diff --git a/app/code/Magento/Persistent/Model/CleanExpiredPersistentQuotes.php b/app/code/Magento/Persistent/Model/CleanExpiredPersistentQuotes.php index 06b3ea9d7b71..d78075ac9a9f 100644 --- a/app/code/Magento/Persistent/Model/CleanExpiredPersistentQuotes.php +++ b/app/code/Magento/Persistent/Model/CleanExpiredPersistentQuotes.php @@ -74,14 +74,14 @@ private function processStoreQuotes(StoreInterface $store): void foreach ($quotesToProcess as $quote) { $count++; + $lastProcessedId = (int)$quote->getId(); try { $this->quoteRepository->delete($quote); - $lastProcessedId = (int)$quote->getId(); } catch (Exception $e) { $this->logger->error(sprintf( 'Unable to delete expired quote (ID: %s): %s', $quote->getId(), - (string)$e + $e->getMessage() )); } if ($count % $this->batchSize === 0) { diff --git a/app/code/Magento/Persistent/Model/ResourceModel/ExpiredPersistentQuotesCollection.php b/app/code/Magento/Persistent/Model/ResourceModel/ExpiredPersistentQuotesCollection.php index 291bf855af93..0f357e260a75 100644 --- a/app/code/Magento/Persistent/Model/ResourceModel/ExpiredPersistentQuotesCollection.php +++ b/app/code/Magento/Persistent/Model/ResourceModel/ExpiredPersistentQuotesCollection.php @@ -97,7 +97,10 @@ public function getExpiredPersistentQuotes(StoreInterface $store, int $lastId, i Select::SQL_UNION_ALL ); - $quotes->getSelect()->where('main_table.entity_id IN (' . $selectQuoteIds . ')'); + $quotes->getSelect() + ->where('main_table.entity_id IN (' . $selectQuoteIds . ')') + ->order('main_table.entity_id ' . Select::SQL_ASC) + ->limit($batchSize); return $quotes; } diff --git a/app/code/Magento/Persistent/Test/Unit/Model/ResourceModel/ExpiredPersistentQuotesCollectionTest.php b/app/code/Magento/Persistent/Test/Unit/Model/ResourceModel/ExpiredPersistentQuotesCollectionTest.php index f9a5db9f8f15..0e4e3f254bab 100644 --- a/app/code/Magento/Persistent/Test/Unit/Model/ResourceModel/ExpiredPersistentQuotesCollectionTest.php +++ b/app/code/Magento/Persistent/Test/Unit/Model/ResourceModel/ExpiredPersistentQuotesCollectionTest.php @@ -141,6 +141,16 @@ public function testGetExpiredPersistentQuotes(): void ->with($this->stringContains('main_table.entity_id IN (')) ->willReturnSelf(); + $dbSelectMock3->method('where') + ->with($this->stringContains('main_table.entity_id IN (')) + ->willReturnSelf(); + $dbSelectMock3->method('order') + ->with('main_table.entity_id ' . Select::SQL_ASC) + ->willReturnSelf(); + $dbSelectMock3->method('limit') + ->with(100) + ->willReturnSelf(); + $result = $this->model->getExpiredPersistentQuotes($storeMock, 0, 100); $this->assertSame($quoteCollectionMock, $result); }