Skip to content

Commit c1e81cf

Browse files
committed
ACP2E-4303: Reindexing stuck due to high memory usage
1 parent 92c0dff commit c1e81cf

File tree

1 file changed

+78
-15
lines changed
  • app/code/Magento/CatalogRule/Model/ResourceModel/Product

1 file changed

+78
-15
lines changed

app/code/Magento/CatalogRule/Model/ResourceModel/Product/Collection.php

Lines changed: 78 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,100 @@
1010
use Magento\CatalogRule\Model\Indexer\DynamicBatchSizeCalculator;
1111
use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
1212
use Magento\Framework\App\ObjectManager;
13+
use Magento\Framework\DB\Adapter\AdapterInterface;
1314
use Magento\Framework\Exception\LocalizedException;
1415

1516
/**
1617
* Specialized product collection for catalog rule indexing
18+
*
19+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1720
*/
1821
class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
1922
{
2023
/**
21-
* Shared cache of AttributeValuesLoader instances across all collections
24+
* Cache of AttributeValuesLoader instances for this collection
2225
*
2326
* @var array
2427
*/
25-
private static array $loaderCache = [];
28+
private array $loaderCache = [];
2629

2730
/**
2831
* @var DynamicBatchSizeCalculator
2932
*/
3033
private $batchSizeCalculator;
3134

3235
/**
33-
* Get dynamic batch size calculator
36+
* @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
37+
* @param \Psr\Log\LoggerInterface $logger
38+
* @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
39+
* @param \Magento\Framework\Event\ManagerInterface $eventManager
40+
* @param \Magento\Eav\Model\Config $eavConfig
41+
* @param \Magento\Framework\App\ResourceConnection $resource
42+
* @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
43+
* @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
44+
* @param \Magento\Framework\Validator\UniversalFactory $universalFactory
45+
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
46+
* @param \Magento\Framework\Module\Manager $moduleManager
47+
* @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
48+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
49+
* @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
50+
* @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
51+
* @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
52+
* @param \Magento\Customer\Model\Session $customerSession
53+
* @param \Magento\Framework\Stdlib\DateTime $dateTime
54+
* @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
55+
* @param DynamicBatchSizeCalculator|null $batchSizeCalculator
56+
* @param AdapterInterface|null $connection
3457
*
35-
* @return DynamicBatchSizeCalculator
58+
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
3659
*/
37-
private function getBatchSizeCalculator(): DynamicBatchSizeCalculator
38-
{
39-
if ($this->batchSizeCalculator === null) {
40-
$this->batchSizeCalculator = ObjectManager::getInstance()
41-
->get(DynamicBatchSizeCalculator::class);
42-
}
43-
return $this->batchSizeCalculator;
60+
public function __construct(
61+
\Magento\Framework\Data\Collection\EntityFactory $entityFactory,
62+
\Psr\Log\LoggerInterface $logger,
63+
\Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
64+
\Magento\Framework\Event\ManagerInterface $eventManager,
65+
\Magento\Eav\Model\Config $eavConfig,
66+
\Magento\Framework\App\ResourceConnection $resource,
67+
\Magento\Eav\Model\EntityFactory $eavEntityFactory,
68+
\Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
69+
\Magento\Framework\Validator\UniversalFactory $universalFactory,
70+
\Magento\Store\Model\StoreManagerInterface $storeManager,
71+
\Magento\Framework\Module\Manager $moduleManager,
72+
\Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
73+
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
74+
\Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
75+
\Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
76+
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
77+
\Magento\Customer\Model\Session $customerSession,
78+
\Magento\Framework\Stdlib\DateTime $dateTime,
79+
\Magento\Customer\Api\GroupManagementInterface $groupManagement,
80+
?DynamicBatchSizeCalculator $batchSizeCalculator = null,
81+
?AdapterInterface $connection = null
82+
) {
83+
parent::__construct(
84+
$entityFactory,
85+
$logger,
86+
$fetchStrategy,
87+
$eventManager,
88+
$eavConfig,
89+
$resource,
90+
$eavEntityFactory,
91+
$resourceHelper,
92+
$universalFactory,
93+
$storeManager,
94+
$moduleManager,
95+
$catalogProductFlatState,
96+
$scopeConfig,
97+
$productOptionFactory,
98+
$catalogUrl,
99+
$localeDate,
100+
$customerSession,
101+
$dateTime,
102+
$groupManagement,
103+
$connection
104+
);
105+
$this->batchSizeCalculator = $batchSizeCalculator ??
106+
ObjectManager::getInstance()->get(DynamicBatchSizeCalculator::class);
44107
}
45108

46109
/**
@@ -58,14 +121,14 @@ public function getAllAttributeValues($attribute)
58121

59122
$attributeId = (int)$attribute->getId();
60123

61-
if (!isset(self::$loaderCache[$attributeId])) {
62-
self::$loaderCache[$attributeId] = new AttributeValuesLoader(
124+
if (!isset($this->loaderCache[$attributeId])) {
125+
$this->loaderCache[$attributeId] = new AttributeValuesLoader(
63126
$this,
64127
$attribute,
65-
$this->getBatchSizeCalculator()
128+
$this->batchSizeCalculator
66129
);
67130
}
68131

69-
return self::$loaderCache[$attributeId];
132+
return $this->loaderCache[$attributeId];
70133
}
71134
}

0 commit comments

Comments
 (0)