/** * {@inheritdoc} */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { /** @var State[] $stateIndexers */ $stateIndexers = []; $states = $this->statesFactory->create(); foreach ($states->getItems() as $state) { /** @var State $state */ $stateIndexers[$state->getIndexerId()] = $state; } foreach ($this->config->getIndexers() as $indexerId => $indexerConfig) { $expectedHashConfig = $this->encryptor->hash($this->encoder->encode($indexerConfig), Encryptor::HASH_VERSION_MD5); if (isset($stateIndexers[$indexerId])) { if ($stateIndexers[$indexerId]->getHashConfig() != $expectedHashConfig) { $stateIndexers[$indexerId]->setStatus(StateInterface::STATUS_INVALID); $stateIndexers[$indexerId]->setHashConfig($expectedHashConfig); $stateIndexers[$indexerId]->save(); } } else { /** @var State $state */ $state = $this->stateFactory->create(); $state->loadByIndexer($indexerId); $state->setHashConfig($expectedHashConfig); $state->setStatus(StateInterface::STATUS_INVALID); $state->save(); } } }
/** * Regenerate indexes for all invalid indexers * * @return void */ public function reindexAllInvalid() { foreach (array_keys($this->config->getIndexers()) as $indexerId) { $indexer = $this->indexerFactory->create(); $indexer->load($indexerId); if ($indexer->isInvalid()) { $indexer->reindexAll(); } } }
/** * Load data * * @param bool $printQuery * @param bool $logQuery * @return \Magento\Indexer\Model\Indexer\Collection * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function loadData($printQuery = false, $logQuery = false) { if (!$this->isLoaded()) { $states = $this->statesFactory->create(); foreach (array_keys($this->config->getIndexers()) as $indexerId) { /** @var \Magento\Framework\Indexer\IndexerInterface $indexer */ $indexer = $this->getNewEmptyItem(); $indexer->load($indexerId); foreach ($states->getItems() as $state) { /** @var \Magento\Indexer\Model\Indexer\State $state */ if ($state->getIndexerId() == $indexerId) { $indexer->setState($state); break; } } $this->_addItem($indexer); } $this->_setIsLoaded(true); } return $this; }
/** * Regenerate indexes for all invalid indexers * * @return void */ public function reindexAllInvalid() { $sharedIndexesComplete = []; foreach (array_keys($this->config->getIndexers()) as $indexerId) { /** @var Indexer $indexer */ $indexer = $this->indexerFactory->create(); $indexer->load($indexerId); $indexerConfig = $this->config->getIndexer($indexerId); if ($indexer->isInvalid()) { // Skip indexers having shared index that was already complete if (!in_array($indexerConfig['shared_index'], $sharedIndexesComplete)) { $indexer->reindexAll(); } else { /** @var \Magento\Indexer\Model\Indexer\State $state */ $state = $indexer->getState(); $state->setStatus(StateInterface::STATUS_VALID); $state->save(); } if ($indexerConfig['shared_index']) { $sharedIndexesComplete[] = $indexerConfig['shared_index']; } } } }