Skip to content

Commit 0ccc1ee

Browse files
committed
MC-19646: [Magento Cloud] - Catalog Product Rule Indexer stuck
1 parent 01df8e2 commit 0ccc1ee

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -292,25 +292,26 @@ protected function doReindexByIds($ids)
292292

293293
/** @var Rule[] $activeRules */
294294
$activeRules = $this->getActiveRules()->getItems();
295-
foreach ($activeRules as $rule) {
296-
$ruleWebsiteIds = $rule->getWebsiteIds();
297-
if (!$rule->getIsActive() || empty($ruleWebsiteIds)) {
298-
continue;
299-
}
295+
foreach ($ids as $productId) {
296+
foreach ($activeRules as $activeRule) {
297+
$rule = clone $activeRule;
298+
$rule->setProductsFilter($productId);
299+
$matchedProductIds = $rule->getMatchingProductIds();
300+
if (!isset($matchedProductIds[$productId])) {
301+
continue;
302+
}
300303

301-
foreach ($ids as $productId) {
302-
$rule->setProductsFilter([$productId]);
303-
if ($rule->getMatchingProductIds()) {
304-
$this->assignProductToRule($rule, $productId, $ruleWebsiteIds);
304+
$websiteIds = array_keys(array_filter($matchedProductIds[$productId]));
305+
if (empty($websiteIds)) {
306+
continue;
305307
}
308+
309+
$this->assignProductToRule($rule, $productId, $websiteIds);
306310
}
307-
}
308311

309-
foreach ($ids as $productId) {
310312
$this->cleanProductPriceIndex([$productId]);
311313
$this->reindexRuleProductPrice->execute($this->batchCount, $productId);
312314
}
313-
314315
$this->reindexRuleGroupWebsite->execute();
315316
}
316317

0 commit comments

Comments
 (0)