[Erp5-report] r24282 - in /erp5/trunk/products: ERP5/Tool/IdTool.py ERP5Catalog/CatalogTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Oct 22 11:08:24 CEST 2008


Author: vincent
Date: Wed Oct 22 11:08:21 2008
New Revision: 24282

URL: http://svn.erp5.org?rev=24282&view=rev
Log:
Add a method on IdTool to dump all ids from table and store them in ZODB (persistent mapping on portal_ids).
Call that method before clearing catalog.

Modified:
    erp5/trunk/products/ERP5/Tool/IdTool.py
    erp5/trunk/products/ERP5Catalog/CatalogTool.py

Modified: erp5/trunk/products/ERP5/Tool/IdTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/IdTool.py?rev=24282&r1=24281&r2=24282&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/IdTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/IdTool.py Wed Oct 22 11:08:21 2008
@@ -147,6 +147,32 @@
     if getattr(self, 'dict_length_ids', None) is None:
       self.dict_length_ids = PersistentMapping()
     return self.dict_length_ids.items()
+
+  security.declarePrivate('dumpDictLengthIdsItems')
+  def dumpDictLengthIdsItems(self):
+    """
+      Store persistently data from SQL table portal_ids.
+    """
+    portal_catalog = getToolByName(self, 'portal_catalog').getSQLCatalog()
+    query = getattr(portal_catalog, 'z_portal_ids_dump')
+    dict_length_ids = getattr(self, 'dict_length_ids', None)
+    if dict_length_ids is None:
+      dict_length_ids = self.dict_length_ids = PersistentMapping()
+    for line in query().dictionaries():
+      id_group = line['id_group']
+      last_id = line['last_id']
+      stored_last_id = self.dict_length_ids.get(id_group)
+      if stored_last_id is None:
+        self.dict_length_ids[id_group] = Length(last_id)
+      else:
+        stored_last_id_value = stored_last_id()
+        if stored_last_id_value < last_id:
+          stored_last_id.set(last_id)
+        else:
+          if stored_last_id_value > last_id:
+            LOG('IdTool', WARNING, 'ZODB value (%r) for group %r is higher ' \
+                'than SQL value (%r). Keeping ZODB value untouched.' % \
+                (stored_last_id, id_group, last_id))
 
   security.declareProtected(Permissions.AccessContentsInformation,
                             'getLastLengthGeneratedId')

Modified: erp5/trunk/products/ERP5Catalog/CatalogTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/CatalogTool.py?rev=24282&r1=24281&r2=24282&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/CatalogTool.py (original)
+++ erp5/trunk/products/ERP5Catalog/CatalogTool.py Wed Oct 22 11:08:21 2008
@@ -632,10 +632,7 @@
       """
       id_tool = self.getPortalObject().portal_ids
       try:
-        # Call generate new id in order to store the last id into
-        # the zodb
-        id_tool.generateNewLengthId(id_group='portal_activity')
-        id_tool.generateNewLengthId(id_group='portal_activity_queue')
+        id_tool.dumpDictLengthIdsItems()
       except ConflictError:
         raise
       except:




More information about the Erp5-report mailing list