Skip to content

Commit 14e8412

Browse files
committed
MC-37630: Updating Design Configuration runs full reindex which generates DDL statement DROP Table
1 parent 5ca2333 commit 14e8412

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

app/code/Magento/Theme/Model/Indexer/Design/Config.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Theme\Model\Indexer\Design;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Framework\Indexer\ActionInterface;
910
use Magento\Framework\Indexer\FieldsetPool;
1011
use Magento\Framework\Indexer\HandlerPool;
@@ -93,13 +94,30 @@ protected function execute(array $ids = [])
9394
/** @var \Magento\Theme\Model\ResourceModel\Design\Config\Scope\Collection $collection */
9495
$collection = $this->collectionFactory->create();
9596
$this->prepareFields();
96-
if (!count($ids)) {
97+
98+
$tmp = $this->isFlatTableExists();
99+
100+
if (!$this->isFlatTableExists()) {
101+
// instead of clean index check if table exists and create it if not
97102
$this->getSaveHandler()->cleanIndex([]);
98103
}
99104
$this->getSaveHandler()->deleteIndex([], new \ArrayObject($ids));
100105
$this->getSaveHandler()->saveIndex([], $collection);
101106
}
102107

108+
private function isFlatTableExists()
109+
{
110+
/** @var \Magento\Framework\App\ResourceConnection $resource */
111+
$resource = ObjectManager::getInstance()->get(\Magento\Framework\App\ResourceConnection::class);
112+
113+
/** @var \Magento\Framework\DB\Adapter\AdapterInterface $connection */
114+
$connection = ObjectManager::getInstance()->get(\Magento\Framework\App\ResourceConnection::class)->getConnection();
115+
116+
$tableName = $resource->getTableName('design_config_grid_flat');
117+
118+
return $connection->isTableExists($tableName);
119+
}
120+
103121
/**
104122
* Execute full indexation
105123
*

app/code/Magento/Theme/etc/indexer.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<field name="store_group_id" xsi:type="filterable" dataType="int"/>
1818
<field name="store_id" xsi:type="filterable" dataType="int"/>
1919
</fieldset>
20-
<saveHandler class="Magento\Theme\Model\Indexer\Design\IndexerHandler"/>
20+
<saveHandler class="Magento\Framework\Indexer\SaveHandler\Grid"/>
2121
<structure class="Magento\Framework\Indexer\GridStructure"/>
2222
</indexer>
2323
</config>

lib/internal/Magento/Framework/Indexer/SaveHandler/Grid.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,16 @@ protected function prepareFilterableFields(array $documents)
6969
*/
7070
public function deleteIndex($dimensions, \Traversable $ids)
7171
{
72-
foreach ($this->batch->getItems($ids, $this->batchSize) as $batchIds) {
73-
$this->connection->delete(
74-
$this->getTableName('filterable', $dimensions),
75-
['entity_id IN(?)' => $batchIds]
72+
if (!empty(iterator_to_array($ids))) {
73+
foreach ($this->batch->getItems($ids, $this->batchSize) as $batchIds) {
74+
$this->connection->delete(
75+
$this->getTableName('filterable', $dimensions),
76+
['entity_id IN(?)' => $batchIds]
77+
);
78+
}
79+
} else {
80+
$this->connection->truncateTable(
81+
$this->getTableName('filterable', $dimensions)
7682
);
7783
}
7884
}

0 commit comments

Comments
 (0)