Comment résoudre le statut d'indexeur «suspendu» (n dans le backlog)

12

L'un des indexeurs configurés pour être mis à jour dans les délais est verrouillé à l'état "suspendu" et n'est plus mis à jour.

Sortie de 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 |
| ...                        |                  |           |                               |                     |
+----------------------------+------------------+-----------+-------------------------------+---------------------+

D'autres affichent idle (0 in backlog)l'heure actuelle dans la colonne "Planification mise à jour", de sorte que la planification de l'indexeur fonctionne généralement.

Comment puis-je resoudre ceci?

Fabian Schmengler
la source

Réponses:

8

J'ai découvert que le statut est défini \Magento\Framework\Mview\View::suspend()et supprimé \Magento\Framework\Mview\View::resume().

Ces méthodes sont uniquement appelées \Magento\Indexer\Model\Indexer::reindexAll()pour suspendre l'indexation planifiée avant une réindexation complète forcée et pour la reprendre ensuite ou si une exception se produit.

Mais si le processus se termine sans exception, par exemple tué, segfaulted ou même rencontre une erreur fatale non récupérable, le statut reste "suspendu" et il n'y a aucun moyen de le reprendre.

Solution: assurez-vous qu'il n'y a vraiment pas de réindexation complète en cours d'exécution, puis mettez à jour l'état via SQL.

Vous trouverez tous les statuts avec:

select * from mview_state;

et mettez-le à jour comme ceci:

update mview_state set status='idle' where view_id='integernet_solr';
Fabian Schmengler
la source
Avez-vous réussi à trouver une solution complète de preuve?
Vivek Kumar
1

Vous n'avez pas besoin de modifier la base de données pour le faire, vous pouvez faire de même en réinitialisant et indexant puis en les réindexant à l'aide des commandes suivantes;

php bin/magento indexer:reset

php bin/magento indexer:reindex
Vivek Kumar
la source
1
C'est la première chose que j'ai essayée, mais elle ne réinitialise que le statut (c'est-à-dire "en cours"), pas l'état mview
Fabian Schmengler
Je ne sais pas si le déclenchement d'une réindexation complète aurait fonctionné, mais même si c'est le cas, j'aimerais l'éviter
Fabian Schmengler
J'ai eu le même problème dans mon cas où le processus a été suspendu, ce qui a fonctionné pour moi alors. C'était magento 2.1.x cependant.
Vivek Kumar
Merci, je vais expérimenter un peu pour en savoir plus :)
Fabian Schmengler
1
J'ai trouvé que la réinitialisation, php bin / magento indexer: reset, n'a pas changé le drapeau suspendu, mais l'a fait pour que je puisse réindexer correctement et que, à son tour, le drapeau a été réactivé. je suggère d'utiliser l'indexeur: php bin / magento: reset suggéré ci-dessus.
jrossi