Magento 2: Есть ли способ программно заблокировать индексатор?


Когда я запускаю свой пользовательский сценарий импорта, и во время его выполнения запускается reindex, это приводит к ошибке:

СОСТОЯНИЕ SQLSTATE[40001]: Сбой сериализации: 1213 Взаимоблокировка обнаружена при попытке получить блокировку; попробуйте перезапустить транзакцию, запрос был:

INSERT INTO catalog_product_entity_datetime ... и другие catalog_product_entity_* tables

Как я могу избежать этих ошибок?

Я думаю о нескольких способах:

  1. Индексатор блокировки
  2. Таблицы блокировки (плохо идея)
  3. Временное отключение cron (еще более плохая идея)
  4. Расширьте и переопределите индексатор ядра и вручную напишите код, который проверит некоторые файлы блокировки.

Я не могу найти никакой информации о блокировке индексатора в Magento 2.

И еще один вопрос: Это может быть проблемой с тупиком, которого вообще нет при переиндексации и импорте?

Спасибо.

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