So lösen Sie den Indexerstatus "ausgesetzt" (n im Rückstand)

12

Einer der Indexer, die so konfiguriert sind, dass sie planmäßig aktualisiert werden, ist im Status "angehalten" gesperrt und wird nicht mehr aktualisiert.

Ausgabe von bin/magento indexer:status

+----------------------------+------------------+-----------+-------------------------------+---------------------+
| Title                      | Status           | Update On | Schedule Status               | Schedule Updated    |
+----------------------------+------------------+-----------+-------------------------------+---------------------+
| ...                        |                  |           |                               |                     |
| IntegerNet_Solr            | Reindex required | Schedule  | suspended (101028 in backlog) | 2018-09-24 15:28:44 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

Andere zeigen idle (0 in backlog)und die aktuelle Uhrzeit in der Spalte "Zeitplan aktualisiert" an, sodass der Indexer-Zeitplan im Allgemeinen funktioniert.

Wie kann ich das lösen?

Fabian Schmengler
quelle

Antworten:

7

Ich fand heraus, dass der Status gesetzt \Magento\Framework\Mview\View::suspend()und entfernt wurde \Magento\Framework\Mview\View::resume().

Diese Methoden werden nur aufgerufen \Magento\Indexer\Model\Indexer::reindexAll(), um die geplante Indizierung vor einer erzwungenen vollständigen Neuindizierung auszusetzen und sie anschließend fortzusetzen oder wenn eine Ausnahme auftritt.

Wenn der Prozess jedoch ausnahmslos beendet wird, z. B. beendet, fehlerhaft oder sogar auf einen nicht behebbaren schwerwiegenden Fehler stößt, bleibt der Status "ausgesetzt" und es gibt keine Möglichkeit, ihn fortzusetzen.

Lösung: Stellen Sie sicher, dass wirklich kein vollständiger Neuindex ausgeführt wird, und aktualisieren Sie dann den Status über SQL.

Sie finden alle Status mit:

select * from mview_state;

und aktualisiere es so:

update mview_state set status='idle' where view_id='integernet_solr';
Fabian Schmengler
quelle
Haben Sie es geschafft, eine vollständige Proof-Lösung zu finden?
Vivek Kumar
2

Sie müssen dazu keine Datenbank bearbeiten. Sie können dies auch tun, indem Sie die Indexer zurücksetzen und indizieren und sie dann mithilfe der folgenden Befehle erneut indizieren.

php bin/magento indexer:reset

php bin/magento indexer:reindex
Vivek Kumar
quelle
1
Das war das erste, was ich versuchte, aber es setzt nur den Status zurück (dh "in Bearbeitung"), nicht den mview-Zustand
Fabian Schmengler
Ich bin mir nicht sicher, ob das erneute Auslösen eines vollständigen Neuindex funktioniert hätte, aber selbst wenn ja, würde ich es gerne vermeiden
Fabian Schmengler
Ich hatte das gleiche Problem in meinem Fall, in dem der Prozess ausgesetzt wurde, der oben für mich arbeitete. Es war jedoch Magento 2.1.x.
Vivek Kumar
Danke, ich werde ein bisschen experimentieren, um mehr herauszufinden :)
Fabian Schmengler
1
Ich fand, dass der Reset, PHP Bin / Magento Indexer: Reset, das angehaltene Flag nicht geändert hat, aber es so gemacht hat, dass ich mich richtig neu indizieren konnte und das wiederum das Flag wieder in den Leerlauf geändert hat. Ich schlage vor, den oben vorgeschlagenen: php bin / magento indexer: reset zu verwenden.
Jrossi