Magento 2: Есть ли способ программно заблокировать индексатор?
Когда я запускаю свой пользовательский сценарий импорта, и во время его выполнения запускается reindex
, это приводит к ошибке:
СОСТОЯНИЕ SQLSTATE[40001]: Сбой сериализации: 1213 Взаимоблокировка обнаружена при попытке получить блокировку; попробуйте перезапустить транзакцию, запрос был:
INSERT INTO catalog_product_entity_datetime
... и другиеcatalog_product_entity_* tables
Как я могу избежать этих ошибок?
Я думаю о нескольких способах:
- Индексатор блокировки
- Таблицы блокировки (плохо идея)
- Временное отключение cron (еще более плохая идея)
- Расширьте и переопределите индексатор ядра и вручную напишите код, который проверит некоторые файлы блокировки.
Я не могу найти никакой информации о блокировке индексатора в Magento 2.
И еще один вопрос: Это может быть проблемой с тупиком, которого вообще нет при переиндексации и импорте?
Спасибо.
5
Author: Ashish Raj, 2017-12-28
1 answers
Вот код, который может вам помочь (я взял его из \Magento\Индексатор\Модель\Индексатор::Переиндексация):
$state = $stateFactory->create();
$state->loadByIndexer({indexer_id});
$state->setStatus(StateInterface::STATUS_WORKING);
$state->save();
3
Author: Andrey Konosov, 2017-12-28 11:53:03