Skip to content

Commit cb3d4c5

Browse files
committed
ACP2E-1569: Elasticsearch Indexer document version changes version when new/existing products are imported
1 parent 31b060f commit cb3d4c5

File tree

1 file changed

+32
-11
lines changed
  • app/code/Magento/CatalogImportExport/Model/Import

1 file changed

+32
-11
lines changed

app/code/Magento/CatalogImportExport/Model/Import/Product.php

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
use Magento\Catalog\Api\ProductRepositoryInterface;
1010
use Magento\Catalog\Model\Config as CatalogConfig;
11-
use Magento\Catalog\Model\Product\Visibility;
1211
use Magento\Catalog\Model\Indexer\Product\Category as ProductCategoryIndexer;
1312
use Magento\Catalog\Model\Indexer\Product\Price\Processor as ProductPriceIndexer;
13+
use Magento\Catalog\Model\Product\Visibility;
1414
use Magento\CatalogImportExport\Model\Import\Product\ImageTypeProcessor;
1515
use Magento\CatalogImportExport\Model\Import\Product\LinkProcessor;
1616
use Magento\CatalogImportExport\Model\Import\Product\MediaGalleryProcessor;
@@ -31,6 +31,7 @@
3131
use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor;
3232
use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
3333
use Magento\Framework\Stdlib\DateTime;
34+
use Magento\Framework\Indexer\Config\DependencyInfoProviderInterface;
3435
use Magento\ImportExport\Model\Import;
3536
use Magento\ImportExport\Model\Import\Entity\AbstractEntity;
3637
use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
@@ -767,6 +768,11 @@ class Product extends AbstractEntity
767768
*/
768769
private $stockItemProcessor;
769770

771+
/**
772+
* @var DependencyInfoProviderInterface
773+
*/
774+
private $dependencyInfoProvider;
775+
770776
/**
771777
* @param \Magento\Framework\Json\Helper\Data $jsonHelper
772778
* @param \Magento\ImportExport\Helper\Data $importExportData
@@ -817,6 +823,7 @@ class Product extends AbstractEntity
817823
* @param LinkProcessor|null $linkProcessor
818824
* @param File|null $fileDriver
819825
* @param StockItemProcessorInterface|null $stockItemProcessor
826+
* @param DependencyInfoProviderInterface|null $dependencyInfoProvider
820827
* @throws LocalizedException
821828
* @throws \Magento\Framework\Exception\FileSystemException
822829
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -872,7 +879,8 @@ public function __construct(
872879
StockProcessor $stockProcessor = null,
873880
LinkProcessor $linkProcessor = null,
874881
?File $fileDriver = null,
875-
?StockItemProcessorInterface $stockItemProcessor = null
882+
?StockItemProcessorInterface $stockItemProcessor = null,
883+
?DependencyInfoProviderInterface $dependencyInfoProvider = null
876884
) {
877885
$this->_eventManager = $eventManager;
878886
$this->stockRegistry = $stockRegistry;
@@ -938,6 +946,8 @@ public function __construct(
938946
->get(ProductRepositoryInterface::class);
939947
$this->stockItemProcessor = $stockItemProcessor ?? ObjectManager::getInstance()
940948
->get(StockItemProcessorInterface::class);
949+
$this->dependencyInfoProvider = $dependencyInfoProvider ?? ObjectManager::getInstance()
950+
->get(DependencyInfoProviderInterface::class);
941951
}
942952

943953
/**
@@ -1662,7 +1672,7 @@ protected function _saveProducts()
16621672
$prevAttributeSet,
16631673
$attributes
16641674
);
1665-
// phpcs:ignore Magento2.CodeAnalysis.EmptyBlock.DetectedCatch
1675+
// phpcs:ignore Magento2.CodeAnalysis.EmptyBlock.DetectedCatch
16661676
} catch (Skip $skip) {
16671677
// Product is skipped. Go on to the next one.
16681678
}
@@ -2464,14 +2474,25 @@ private function reindexStockStatus(array $productIds): void
24642474
*/
24652475
private function reindexProducts($productIdsToReindex = [])
24662476
{
2467-
$indexersToReindex = [
2468-
ProductCategoryIndexer::INDEXER_ID,
2469-
ProductPriceIndexer::INDEXER_ID
2470-
];
2471-
foreach ($indexersToReindex as $id) {
2472-
$indexer = $this->indexerRegistry->get($id);
2473-
if (is_array($productIdsToReindex) && count($productIdsToReindex) > 0 && !$indexer->isScheduled()) {
2474-
$indexer->reindexList($productIdsToReindex);
2477+
if (is_array($productIdsToReindex) && !empty($productIdsToReindex)) {
2478+
$indexersToReindex = [
2479+
ProductCategoryIndexer::INDEXER_ID,
2480+
ProductPriceIndexer::INDEXER_ID
2481+
];
2482+
foreach ($indexersToReindex as $id) {
2483+
$indexer = $this->indexerRegistry->get($id);
2484+
if (!$indexer->isScheduled()) {
2485+
//trick for dependent indexers in scheduled mode
2486+
//related issue: AC-7851
2487+
$idsToRunBefore = $this->dependencyInfoProvider->getIndexerIdsToRunBefore($id);
2488+
foreach ($idsToRunBefore as $dependentId) {
2489+
$dependentIndexer = $this->indexerRegistry->get($dependentId);
2490+
if ($dependentIndexer->isScheduled()) {
2491+
$dependentIndexer->reindexList($productIdsToReindex);
2492+
}
2493+
}
2494+
$indexer->reindexList($productIdsToReindex);
2495+
}
24752496
}
24762497
}
24772498
}

0 commit comments

Comments
 (0)