I have a strange bug on a dev site that is very difficult to reproduce, but I do have some questions on how to debug further, following the explanation. There are two things of note in the traceback. One we are using collective.elasticsearch, two this calls processQueue so this at least involves catalog optimization and is thus related in some way to a previous transaction.
Traceback (innermost last): Module ZPublisher.WSGIPublisher, line 156, in transaction_pubevents Module ZPublisher.WSGIPublisher, line 338, in publish_module Module ZPublisher.WSGIPublisher, line 256, in publish Module ZPublisher.mapply, line 85, in mapply Module ZPublisher.WSGIPublisher, line 62, in call_object Module zope.browserpage.simpleviewclass, line 41, in __call__ Module Products.Five.browser.pagetemplatefile, line 126, in __call__ Module Products.Five.browser.pagetemplatefile, line 61, in __call__ Module zope.pagetemplate.pagetemplate, line 135, in pt_render Module Products.PageTemplates.engine, line 88, in __call__ Module z3c.pt.pagetemplate, line 173, in render Module chameleon.zpt.template, line 306, in render Module chameleon.template, line 209, in render Module chameleon.utils, line 75, in raise_with_traceback Module chameleon.template, line 187, in render Module 485cb277fa9b0bf6634f1ecb0a934611.py, line 4424, in render Module 4d9af5b1f80cd75806f779ed1236f777.py, line 581, in render_master Module z3c.pt.expressions, line 70, in render_content_provider Module zope.viewlet.manager, line 155, in update Module zope.viewlet.manager, line 161, in _updateViewlets Module plone.app.layout.viewlets.common, line 407, in update Module plone.memoize.view, line 48, in memogetter Module plone.app.layout.viewlets.common, line 403, in portal_tabs Module Products.CMFPlone.browser.navigation, line 146, in topLevelTabs Module collective.elasticsearch.patches, line 25, in safeSearchResults Module ims.elasticsearch.patches, line 52, in searchResults Module Products.CMFPlone.CatalogTool, line 429, in searchResults Module Products.CMFCore.indexing, line 96, in processQueue Module Products.CMFCore.indexing, line 223, in process Module Products.CMFCore.indexing, line 51, in reindex Module Products.CMFCore.CatalogTool, line 367, in _reindexObject Module collective.elasticsearch.patches, line 10, in catalog_object Module collective.elasticsearch.es, line 208, in catalog_object Module Products.CMFPlone.CatalogTool, line 351, in catalog_object Module Products.ZCatalog.ZCatalog, line 499, in catalog_object Module Products.ZCatalog.Catalog, line 369, in catalogObject Module Products.PluginIndexes.unindex, line 239, in index_object Module Products.PluginIndexes.KeywordIndex.KeywordIndex, line 60, in _index_object Module Products.PluginIndexes.KeywordIndex.KeywordIndex, line 95, in _get_object_keywords Module plone.indexer.wrapper, line 65, in __getattr__ Module plone.indexer.delegate, line 20, in __call__ Module Products.CMFPlone.CatalogTool, line 158, in allowedRolesAndUsers Module Products.PlonePAS.pas, line 401, in _getAllLocalRoles Module Products.PluginRegistry.PluginRegistry, line 108, in listPlugins Module Products.PluginRegistry.PluginRegistry, line 368, in _getPlugins KeyError: <InterfaceClass Products.PlonePAS.interfaces.plugins.ILocalRolesPlugin>
The problem is completely transient. PluginRegistry raises a KeyError if it can't find any plugins for the given type, but I quite clearly have the Plone default borg_localroles. Indeed on a refresh the page loads without issue. What could make it unable to find the plugin temporarily??
The traceback here shows it is trying to get the local roles of some context to update that index in the catalog. This happens by calling processQueue() first which finishes any pending indexing as part of catalog optimization since 5.1. Is this supposed to (potentially) involve indexing from other requests? potentially stemming from other user actions? In some cases this appears to even trip CSRF protection because the request is now doing a db write.
I've had this happen on several different pages on the site, including edit form submissions, viewing a page, and even viewing a control panel form.