Skip to content

Commit 25544f2

Browse files
author
Anna Bukatar
committed
ACP2E-1875: Products incorrectly showed Out of Stock then all products show in stock
1 parent 8af9d33 commit 25544f2

File tree

5 files changed

+81
-1
lines changed

5 files changed

+81
-1
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\ImportExport\Plugin;
9+
10+
use Magento\Framework\Indexer\DeferredCacheCleanerInterface;
11+
use Magento\ImportExport\Model\Import;
12+
13+
class DeferCacheCleaningUntilImportIsComplete
14+
{
15+
/**
16+
* @var DeferredCacheCleanerInterface
17+
*/
18+
private $cacheCleaner;
19+
20+
/**
21+
* @param DeferredCacheCleanerInterface $cacheCleaner
22+
*/
23+
public function __construct(DeferredCacheCleanerInterface $cacheCleaner)
24+
{
25+
$this->cacheCleaner = $cacheCleaner;
26+
}
27+
28+
/**
29+
* Start deferred cache before stock items save
30+
*
31+
* @param Import $subject
32+
* @return void
33+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
34+
*/
35+
public function beforeImportSource(Import $subject): void
36+
{
37+
$this->cacheCleaner->start();
38+
}
39+
40+
/**
41+
* Flush deferred cache after stock items save
42+
*
43+
* @param Import $subject
44+
* @param bool $result
45+
* @return void
46+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
47+
*/
48+
public function afterImportSource(Import $subject, bool $result): void
49+
{
50+
$this->cacheCleaner->flush();
51+
}
52+
}

app/code/Magento/ImportExport/etc/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,7 @@
3939
</argument>
4040
</arguments>
4141
</type>
42+
<type name="Magento\ImportExport\Model\Import">
43+
<plugin name="import_defer_cache" type="Magento\ImportExport\Plugin\DeferCacheCleaningUntilImportIsComplete" sortOrder="1"/>
44+
</type>
4245
</config>

app/code/Magento/Indexer/Model/Indexer/DeferredCacheCleaner.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
use Magento\Framework\App\CacheInterface;
1111
use Magento\Framework\Event\Manager as EventManager;
1212
use Magento\Framework\Indexer\CacheContext;
13+
use Magento\Framework\Indexer\DeferredCacheCleanerInterface;
1314

1415
/**
1516
* Deferred cache cleaner for indexers
1617
*/
17-
class DeferredCacheCleaner
18+
class DeferredCacheCleaner implements DeferredCacheCleanerInterface
1819
{
1920
/**
2021
* @var EventManager

app/code/Magento/Indexer/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<preference for="Magento\Framework\Indexer\Table\StrategyInterface" type="Magento\Framework\Indexer\Table\Strategy" />
1414
<preference for="Magento\Framework\Indexer\StateInterface" type="Magento\Indexer\Model\Indexer\State" />
1515
<preference for="Magento\Framework\Indexer\IndexMutexInterface" type="Magento\Indexer\Model\IndexMutex" />
16+
<preference for="Magento\Framework\Indexer\DeferredCacheCleanerInterface" type="Magento\Indexer\Model\Indexer\DeferredCacheCleaner" />
1617
<type name="Magento\Framework\Indexer\Table\StrategyInterface" shared="false" />
1718
<type name="Magento\Indexer\Model\Indexer">
1819
<arguments>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Indexer;
9+
10+
interface DeferredCacheCleanerInterface
11+
{
12+
/**
13+
* Defer cache cleaning until flush() is called
14+
*
15+
* @see flush()
16+
*/
17+
public function start(): void;
18+
19+
/**
20+
* Flush cache
21+
*/
22+
public function flush(): void;
23+
}

0 commit comments

Comments
 (0)