[Issue] Avoids endless loop of indexers being marked as invalid #29478
Labels
Component: Indexer
Event: MageCONF CD 2020
Fixed in 2.4.x
The issue has been fixed in 2.4-develop branch
Issue: Confirmed
Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed
Issue: Ready for Work
Gate 4. Acknowledged. Issue is added to backlog and ready for development
Priority: P2
A defect with this priority could have functionality issues which are not to expectations.
Progress: done
Reported on 2.3.5
Indicates original Magento version for the Issue report.
Reproduced on 2.4.x
The issue has been reproduced on latest 2.4-develop branch
Severity: S2
Major restrictions or short-term circumventions are required until a fix is available.
Triage: Dev.Experience
Issue related to Developer Experience and needs help with Triage to Confirm or Reject it
This issue is automatically created based on existing pull request: #29196: Avoids endless loop of indexers being marked as invalid
Magento 2.4-develop
Description (*)
This was discovered on a particular project where we noticed that the indexers
catalogrule_rule
andcatalog_category_product
are constantly being marked asReindex required
.The cronjob
indexer_reindex_all_invalid
is running and is supposed to fix this, but that doesn't happen.If however, I stop the cronjobs, and manually execute
bin/magento indexer:reindex catalogrule_rule catalog_category_product
we see a different behavior and onlycatalog_category_product
is then marked asReindex required.
. If I then execute eitherbin/magento indexer:reindex catalog_category_product
or let the cronjobindexer_reindex_all_invalid
take over again, everything is getting back to a stable state and all indexers are marked asReady
.So this means that the execution of the
indexer_reindex_all_invalid
cronjob andbin/magento indexer:reindex {all-invalid-indexers}
are behaving differently which isn't correct in my opinion.We've seen this happening with Magento OS 2.3.5, and I was able to reproduce it on the
2.4-develop
branch (using commit f39a2e0)I currently only have a way to reproduce it by using the database of this particular project and we also need a particular module from Amasty installed as well (the Improved Layered Navigation module version 2.14.3).
But in my opinion it's not a bug in the Amasty module but a problem in core Magento since we see a difference in behavior in how invalid indexers are reindexed if you do it manually or if the cronjob executes it.
After searching around a bit I noticed a particular commit which was only applied to the manual reindexing command: MAGETWO-51540: Linked indexers catalog_category_product and catalog_product_cateogry do not set valid status after shell run.
So I now introduced these same changes to the code which is used by the
indexer_reindex_all_invalid
cronjob and after testing these changes on both our project (on Magento 2.3.5) as on my test on the2.4-develop
branch, it looks like it fixes the issue.In my opinion, this is a pretty important bugfix, because this bug causes the server of this particular project to have a high CPU load because of the constant reindexing which happens with every cron run which is not necessary.
In my opinion, we should also try to refactor the code so both
bin/magento indexer:reindex
as the cronjobindexer_reindex_all_invalid
should use the same code so we can avoid in the future where one fix is applied to one part and forgotten about in the other part.I've currently chosen not to refactor this so it's easier to review these changes, and maybe somebody can follow up in a later PR to refactor this?
Related Pull Requests
Fixed Issues (if relevant)
Manual testing scenarios (*)
bin/magento setup:upgrade
bin/magento indexer:reindex
so all indexers are marked as validbin/magento indexer:reset catalogrule_rule catalog_category_product
bin/magento indexer:status
(the two indexers should be marked as invalid)php n98-magerun2.phar sys:cron:run indexer_reindex_all_invalid
bin/magento indexer:status
(the two indexers are still marked as invalid)php n98-magerun2.phar sys:cron:run indexer_reindex_all_invalid
bin/magento indexer:status
(the two indexers are still marked as invalid)bin/magento indexer:reindex catalogrule_rule catalog_category_product
bin/magento indexer:status
(only one indexers is marked as invalid:catalog_category_product
)php n98-magerun2.phar sys:cron:run indexer_reindex_all_invalid
bin/magento indexer:status
(All indexers are now finally marked as valid)With this PR applied, after step 8, we can jump immediately to step 13. This is probably still not 100% fixing the problem since I would expect all indexers to be marked as valid after this, but maybe that Amasty module is intervening here, not exactly sure without more deeper debugging.
If somebody needs the database from this project, I'm willing to provide it to you in private via Slack for example, but it can contain confidential information, so please I'm asking internal Magento devs to not abuse the information in the database.
Thanks!
Questions or comments
Maybe a reproducible case is written down in internal ticket MAGETWO-51540 which you can try to reproduce using the
indexer_reindex_all_invalid
cronjob?Contribution checklist (*)
The text was updated successfully, but these errors were encountered: