• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Fixed Search index batch processing potentially bugged

Affected version
2.0.0 Beta 8

DragonByte Tech

Well-known member
#1
I fully admit this may be me reading the code wrong, but the code in XF\Job\SearchIndex looks wrong to me.

If I run this code:
PHP:
            \XF::app()->jobManager()->enqueue('XF:SearchIndex', [
                'content_type' => 'post',
                'content_ids' => $postIds
            ]);
Where $postIds is an array of, let's say 10,000 numbers, then won't this block of code...
PHP:
        do
        {
            $batch = array_slice($contentIds, 0, $batchSize);
            $contentIds = array_slice($contentIds, count($batch));

            $search->indexByIds($this->data['content_type'], $this->data['content_ids']);

            if (microtime(true) - $s >= $maxRunTime)
            {
                break;
            }
        }
        while ($contentIds);
...run all 10,000?

My reasoning for believing this is that if $this->data['content_ids'] originally contains 10,000 entries during the first run, by the time it hits the $search->indexByIds() line, $this->data['content_ids'] still contains 10,000 entries.

To me, it looks like the second argument to $search->indexByIds() should be $batch since that is the subset of IDs that should be processed at this point.

I have not tested this myself, so please forgive me if I am wrong. I only noticed this because I am building an application that uses a similar kind of process to the search indexer, so I am using the search indexer as a starting point, which includes this job.


Fillip
 

Chris D

XenForo developer
Staff member
#2
I agree. It's actually processing all in one go rather than doing it in the defined batch size and adhering to the job time limit. We've fixed this for the next release; thank you and good catch!