[server] Separate repository bootstrap from initialization
authorDenis Laxalde <denis.laxalde@logilab.fr>
Thu, 23 Feb 2017 18:02:33 +0100
changeset 11983 5de78b6fff2e
parent 11982 8d1525c76e65
child 11984 55f57038e553
[server] Separate repository bootstrap from initialization Thus we now call 'bootstrap' here and there explicitly and remove call of this method in Repository.__init__(). This way instantiation of a Repository does not *implicitly* triggers the "bootstrap" step, which is arguably not a trivial thing and thus deserves to be independent. In __init__, set 'shutting_down' attribute to None and then to False in bootstrap as a mean to indicate that, when initialized, a repository is neither shutting down nor started (not sure where this is used though).
cubicweb/cwconfig.py
cubicweb/devtools/stresstester.py
cubicweb/server/__init__.py
cubicweb/server/repository.py
cubicweb/utils.py
--- a/cubicweb/cwconfig.py	Thu Feb 23 17:51:11 2017 +0100
+++ b/cubicweb/cwconfig.py	Thu Feb 23 18:02:33 2017 +0100
@@ -1119,9 +1119,12 @@
     # config -> repository
 
     def repository(self, vreg=None):
+        """Return a new bootstrapped repository."""
         from cubicweb.server.repository import Repository
         from cubicweb.server.utils import TasksManager
-        return Repository(self, TasksManager(), vreg=vreg)
+        repo = Repository(self, TasksManager(), vreg=vreg)
+        repo.bootstrap()
+        return repo
 
     # instance methods used to get instance specific resources #############
 
--- a/cubicweb/devtools/stresstester.py	Thu Feb 23 17:51:11 2017 +0100
+++ b/cubicweb/devtools/stresstester.py	Thu Feb 23 18:02:33 2017 +0100
@@ -168,6 +168,7 @@
     # get local access to the repository
     print("Creating repo", prof_file)
     repo = Repository(config, prof_file)
+    repo.bootstrap()
     session = repo.new_session(user, password=password)
     reporter = ProfileReporter(queries)
     if threads > 1:
--- a/cubicweb/server/__init__.py	Thu Feb 23 17:51:11 2017 +0100
+++ b/cubicweb/server/__init__.py	Thu Feb 23 18:02:33 2017 +0100
@@ -223,6 +223,7 @@
     config.cube_appobject_path = set(('hooks', 'entities'))
     # only enable the system source at initialization time
     repo = Repository(config, vreg=vreg)
+    repo.bootstrap()
     if init_config is not None:
         # further config initialization once it has been bootstrapped
         init_config(config)
--- a/cubicweb/server/repository.py	Thu Feb 23 17:51:11 2017 +0100
+++ b/cubicweb/server/repository.py	Thu Feb 23 18:02:33 2017 +0100
@@ -211,7 +211,7 @@
     entities and relations
     """
 
-    def __init__(self, config, tasks_manager=None, vreg=None, bootstrap=True):
+    def __init__(self, config, tasks_manager=None, vreg=None):
         self.config = config
         self.sources_by_eid = {}
         if vreg is None:
@@ -230,7 +230,7 @@
         self.schema = schema.CubicWebSchema(config.appid)
         self.vreg.schema = self.schema  # until actual schema is loaded...
         # shutdown flag
-        self.shutting_down = False
+        self.shutting_down = None
         # sources (additional sources info in the system database)
         self.system_source = self.get_source('native', 'system',
                                              config.system_source_config.copy())
@@ -239,9 +239,6 @@
         self.querier = querier.QuerierHelper(self, self.schema)
         # cache eid -> type
         self._type_cache = {}
-        # open some connection sets
-        if bootstrap:
-            self.bootstrap()
         # the hooks manager
         self.hm = hook.HooksManager(self.vreg)
 
@@ -258,6 +255,7 @@
 
     def bootstrap(self):
         self.info('starting repository from %s', self.config.apphome)
+        self.shutting_down = False
         config = self.config
         # copy pool size here since config.init_cube() and config.load_schema()
         # reload configuration from file and could reset a manually set pool
--- a/cubicweb/utils.py	Thu Feb 23 17:51:11 2017 +0100
+++ b/cubicweb/utils.py	Thu Feb 23 18:02:33 2017 +0100
@@ -61,6 +61,7 @@
     password = config.default_admin_config['password']
 
     repo = Repository(config, TasksManager())
+    repo.bootstrap()
     session = repo.new_session(login, password=password)
     return session.new_cnx()