«Обновить параметры безопасности» в portal_workflow запускает обновление метаданных каталога без необходимости? - PullRequest
3 голосов
/ 04 апреля 2011

Plone 3.3.5: у нас есть сайт Plone среднего размера, и мы хотели бы обновить его рабочие процессы. Поскольку это длительный процесс, мы заметили что-то странное. Наши средства доступа Archetypes, не связанные с безопасностью, были вызваны при нажатии «Обновить параметры безопасности» в portal_workflow.

Похоже, виновником является update_metadata = 1 настройка по умолчанию в ZCatalog:

-> self.plone_log("treatmentToImagingHours: %s"%str(treatmentToImagingHours))
(Pdb) bt
  /Users/moo/sits/parts/zope2/lib/python/ZServer/PubCore/ZServerPublisher.py(25)__init__()
-> response=b)
  /Users/moo/sits/parts/zope2/lib/python/ZPublisher/Publish.py(401)publish_module()
-> environ, debug, request, response)
  /Users/moo/sits/parts/zope2/lib/python/ZPublisher/Publish.py(202)publish_module_standard()
-> response = publish(request, module_name, after_list, debug=debug)
  /Users/moo/sits/parts/zope2/lib/python/ZPublisher/Publish.py(119)publish()
-> request, bind=1)
  /Users/moo/sits/parts/zope2/lib/python/ZPublisher/mapply.py(88)mapply()
-> if debug is not None: return debug(object,args,context)
  /Users/moo/sits/parts/zope2/lib/python/ZPublisher/Publish.py(42)call_object()
-> result=apply(object,args) # Type s<cr> to step into published object.
  <string>(4)_facade()
  /Users/moo/sits/parts/zope2/lib/python/AccessControl/requestmethod.py(64)_curried()
-> return callable(*args, **kw)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(457)updateRoleMappings()
-> count = self._recursiveUpdateRoleMappings(portal, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(609)_recursiveUpdateRoleMappings()
-> count = count + self._recursiveUpdateRoleMappings(v, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(609)_recursiveUpdateRoleMappings()
-> count = count + self._recursiveUpdateRoleMappings(v, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(609)_recursiveUpdateRoleMappings()
-> count = count + self._recursiveUpdateRoleMappings(v, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(609)_recursiveUpdateRoleMappings()
-> count = count + self._recursiveUpdateRoleMappings(v, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(609)_recursiveUpdateRoleMappings()
-> count = count + self._recursiveUpdateRoleMappings(v, wfs)
  /Users/moo/sits/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/WorkflowTool.py(600)_recursiveUpdateRoleMappings()
-> ob.reindexObject(idxs=['allowedRolesAndUsers'])
  /Users/moo/sits/eggs/Products.Archetypes-1.5.11-py2.4.egg/Products/Archetypes/CatalogMultiplex.py(115)reindexObject()
-> c.catalog_object(self, url, idxs=lst)
  /Users/moo/sits/eggs/Plone-3.3rc2-py2.4.egg/Products/CMFPlone/CatalogTool.py(417)catalog_object()
-> update_metadata, pghandler=pghandler)
  /Users/moo/sits/parts/zope2/lib/python/Products/ZCatalog/ZCatalog.py(536)catalog_object()
-> update_metadata=update_metadata)
  /Users/moo/sits/parts/zope2/lib/python/Products/ZCatalog/Catalog.py(348)catalogObject()
-> self.updateMetadata(object, uid)
  /Users/moo/sits/parts/zope2/lib/python/Products/ZCatalog/Catalog.py(277)updateMetadata()
-> newDataRecord = self.recordify(object)
  /Users/moo/sits/parts/zope2/lib/python/Products/ZCatalog/Catalog.py(417)recordify()
-> if(attr is not MV and safe_callable(attr)): attr=attr()
  /Users/moo/sits/products/SitsPatient/content/SitsPatient.py(2452)outSichECASS()

portal_workflow вызывает ob.reindexObject (idxs = ['enabledRolesAndUsers']). Однако это запускает обновление для всех метаданных.

1) Это нормальное поведение?

2) Это желаемое поведение?

3) Можно ли отключить update_metadata, чтобы ускорить процесс, ничего не нарушая? Надежна ли безопасность портала от метаданных в какой-либо точке?

1 Ответ

4 голосов
/ 04 апреля 2011

Да, это нормальное поведение.В каталоге хранится подмножество информации, которую объект предоставляет в виде кэша, поэтому вы можете отображать страницы только с результатами каталога без необходимости пробуждать исходные объекты.Сюда входит текущее состояние рабочего процесса для объекта.

При переиндексации каталог также должен обновлять метаданные, поскольку у него нет средств для определения, изменились ли эти данные или нет.

В этомконкретный процесс, вы не можете отключить update_metadata без исправления;вам нужно либо:

  • заплатить Products.ZCatalog.Catalog.catalogObject, чтобы отключить там update_metadata,

  • заплатить Products.Archetypes.CatalogMultiplex.CatalogMultiplex.reindexObject для вызова catalogObject с флагом update_metadata, установленным в False,

  • исправляет инструмент рабочего процесса для вызова reindexObjectSecurity вместо reindexObject.

Вам нужно будет проверить столбцы схемы каталога (метаданных), чтобы убедиться, что ничего не изменится при обновлении безопасности рабочего процесса.

...