[FIX] modules: multi worker signaling initialize variables before loading registry
authorDenis Ledoux <dle@openerp.com>
Tue, 21 Jan 2014 17:18:36 +0000 (18:18 +0100)
committerDenis Ledoux <dle@openerp.com>
Tue, 21 Jan 2014 17:18:36 +0000 (18:18 +0100)
bzr revid: dle@openerp.com-20140121171836-dxs7cvqcd9nxytu1

openerp/modules/registry.py

index a18bd46..853fab0 100644 (file)
@@ -145,7 +145,7 @@ class Registry(object):
     @classmethod
     def setup_multi_process_signaling(cls, cr):
         if not openerp.multi_process:
-            return
+            return None, None
 
         # Inter-process signaling:
         # The `base_registry_signaling` sequence indicates the whole registry
@@ -158,6 +158,16 @@ class Registry(object):
             cr.execute("""SELECT nextval('base_registry_signaling')""")
             cr.execute("""CREATE SEQUENCE base_cache_signaling INCREMENT BY 1 START WITH 1""")
             cr.execute("""SELECT nextval('base_cache_signaling')""")
+        
+        cr.execute("""
+                    SELECT base_registry_signaling.last_value,
+                           base_cache_signaling.last_value
+                    FROM base_registry_signaling, base_cache_signaling""")
+        r, c = cr.fetchone()
+        _logger.debug("Multiprocess load registry signaling: [Registry: # %s] "\
+                    "[Cache: # %s]",
+                    r, c)
+        return r, c
 
     @contextmanager
     def cursor(self, auto_commit=True):
@@ -215,6 +225,10 @@ class RegistryManager(object):
             cls.delete(db_name)
             cls.registries[db_name] = registry
             try:
+                with registry.cursor() as cr:
+                    seq_registry, seq_cache = Registry.setup_multi_process_signaling(cr)
+                    registry.base_registry_signaling_sequence = seq_registry
+                    registry.base_cache_signaling_sequence = seq_cache
                 # This should be a method on Registry
                 openerp.modules.load_modules(registry.db, force_demo, status, update_module)
             except Exception:
@@ -228,7 +242,6 @@ class RegistryManager(object):
 
             cr = registry.db.cursor()
             try:
-                Registry.setup_multi_process_signaling(cr)
                 registry.do_parent_store(cr)
                 registry.get('ir.actions.report.xml').register_all(cr)
                 cr.commit()