...
Admin settings are located in Stores -> Configuration -> Advanced -> System -> Stuck Indexer Fixer
...
Settings:
Field | Options | Comment |
---|---|---|
Enable Automatic Stuck Indexes Fixing | Yes/No | When enabled indexing that got somehow stuck will be automatically detected and fixed |
Shoud enable suspended indexes | Yes/No | When enabled indexing that got suspended will be automatically detected and fixed |
Threshold to mark indexer as stuck | How long (in minutes) from the last activity must pass for indexer in a "working" status to treat it as stuck. | |
Cron expression for scheduling the fixer | Use Crontab Format (Eg. "*/5 * * * *" for every 5 minutes) | https://en.wikipedia.org/wiki/Cron |
Backend
Note |
---|
In progress |
Cron
vendor/creativestyle/magesuite-stuck-indexers-fixer/Cron/FixStuckIndexers.php:14
Code Block |
---|
class FixStuckIndexers
{
public function execute()
{
$this->fixStuckIndexers->execute();
}
} |
Logic to fix indexers
vendor/creativestyle/magesuite-stuck-indexers-fixer/Model/FixStuckIndexers.php:24
Code Block | ||
---|---|---|
| ||
class FixStuckIndexers
{
public function execute()
{
if ($this->configuration->shouldEnableSuspendedIndexes()) {
$this->fixSuspendedIndexes();
}
if (!$this->configuration->isAutomaticFixingEnabled()) {
return;
}
$thresholdToMarkIndexerAsStuck = $this->configuration->getThresholdToMarkIndexerAsStuck();
$this->fixStuckIndexers($thresholdToMarkIndexerAsStuck);
}
protected function fixSuspendedIndexes()
{
$suspendedMview = $this->mviewState->getSuspendedIndexers() ?? [];
foreach ($suspendedMview as $mview) {
$this->mviewState->setIndexerAsIdle($mview['view_id']);
.....
}
}
protected function fixStuckIndexers($threshold)
{
$stuckMview = $this->mviewState->getStuckIndexers($threshold) ?? [];
foreach ($stuckMview as $mview) {
$this->mviewState->setIndexerAsIdle($mview['view_id']);
.....
}
$stuckFull = $this->indexerState->getStuckIndexers($threshold) ?? [];
foreach ($stuckFull as $indexer) {
$this->indexerState->setIndexerAsInvalid($indexer['indexer_id']);
.....
}
}
} |
MviewState
Get stuck and suspended indexers, also set indexer status as idle
vendor/creativestyle/magesuite-stuck-indexers-fixer/Model/ResourceModel/MviewState.php:14
Code Block | ||
---|---|---|
| ||
class MviewState
{
public function getStuckIndexers($stuckDetectionThreshold)
{
$connection = $this->resourceConnection->getConnection();
$select = $connection->select();
$select->from($connection->getTableName('mview_state'));
$select->where('status = ?', \Magento\Framework\Mview\View\StateInterface::STATUS_WORKING);
$select->where(sprintf('updated < date_sub(NOW(), INTERVAL %s Minute)', $stuckDetectionThreshold));
return $connection->fetchAll($select);
}
public function getSuspendedIndexers()
{
$connection = $this->resourceConnection->getConnection();
$select = $connection->select();
$select->from($connection->getTableName('mview_state'));
$select->where('status = ?', \Magento\Framework\Mview\View\StateInterface::STATUS_SUSPENDED);
return $connection->fetchAll($select);
}
public function setIndexerAsIdle($viewId)
{
$connection = $this->resourceConnection->getConnection();
return $connection->update(
$connection->getTableName('mview_state'),
['status' => 'idle'],
['view_id = ?' => $viewId]
);
}
} |
Frontend
There are no frontend features in the module.