From 340150a60600313536b155808b7efcbe82fdf235 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 7 Jun 2018 12:12:05 -0700 Subject: [PATCH] (stable) Fix loop in QueryIterator when row count is an exact multiple of page size Summary: Ref T13152. The pager does a bit of magic here and doesn't populate `nextPageID` when it knows it got an exact final page. The logic misfired in this case and sent us back to the start. Test Plan: - Set page size to 1 to guarantee rows were an exact multiple of page size. - Ran `rebuild-identities` (I no-op'd the actual logic to make it faster). - Before: looped forever. - After: clean exit after processing everything. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13152 Differential Revision: https://secure.phabricator.com/D19479 --- src/infrastructure/storage/lisk/PhabricatorQueryIterator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infrastructure/storage/lisk/PhabricatorQueryIterator.php b/src/infrastructure/storage/lisk/PhabricatorQueryIterator.php index c48600eb02..03aaf5707e 100644 --- a/src/infrastructure/storage/lisk/PhabricatorQueryIterator.php +++ b/src/infrastructure/storage/lisk/PhabricatorQueryIterator.php @@ -29,7 +29,7 @@ final class PhabricatorQueryIterator extends PhutilBufferedIterator { // If we got less than a full page of results, this was the last set of // results. Throw away the pager so we end iteration. - if (count($results) < $pager->getPageSize()) { + if (!$pager->getHasMoreResults()) { $this->pager = null; } else { $this->pager->setAfterID($pager->getNextPageID());