# HG changeset patch # User Aurelien Campeas # Date 1402660468 -7200 # Node ID d9a1e7939ee6e7f0e0f95810ed819ccf648ad938 # Parent bab2befaac9bd1d4402c69b4c3d62c7f06656933 [migractions] remove any session related leftovers Also, the migration handler really wants a "repo" session anyway. This highlights a bug in unittest_wfobjs.test_duplicated_transition where an old connection is reused. It probably used to work because it was made of session + set_cnxset magic dust. Related to #3933480. diff -r bab2befaac9b -r d9a1e7939ee6 devtools/testlib.py --- a/devtools/testlib.py Fri Jun 13 12:07:51 2014 +0200 +++ b/devtools/testlib.py Fri Jun 13 13:54:28 2014 +0200 @@ -261,7 +261,7 @@ @contextmanager def shell(self): from cubicweb.server.migractions import ServerMigrationHelper - with repoapi.ClientConnection(self._session) as cnx: + with self._session.new_cnx() as cnx: mih = ServerMigrationHelper(None, repo=self._repo, cnx=cnx, interactive=False, # hack so it don't try to load fs schema diff -r bab2befaac9b -r d9a1e7939ee6 entities/test/unittest_wfobjs.py --- a/entities/test/unittest_wfobjs.py Fri Jun 13 12:07:51 2014 +0200 +++ b/entities/test/unittest_wfobjs.py Fri Jun 13 13:54:28 2014 +0200 @@ -87,12 +87,12 @@ shell.rollback() # no pb if not in the same workflow wf2 = add_wf(shell, 'Company') - foo = wf.add_state(u'foo', initial=True) - bar = wf.add_state(u'bar') - wf.add_transition(u'baz', (foo,), bar, ('managers',)) + foo = wf2.add_state(u'foo', initial=True) + bar = wf2.add_state(u'bar') + wf2.add_transition(u'baz', (foo,), bar, ('managers',)) shell.commit() # gnark gnark - biz = wf.add_transition(u'biz', (bar,), foo) + biz = wf2.add_transition(u'biz', (bar,), foo) shell.commit() with self.assertRaises(ValidationError) as cm: biz.cw_set(name=u'baz') diff -r bab2befaac9b -r d9a1e7939ee6 server/__init__.py --- a/server/__init__.py Fri Jun 13 12:07:51 2014 +0200 +++ b/server/__init__.py Fri Jun 13 13:54:28 2014 +0200 @@ -289,6 +289,7 @@ config._cubes = None # avoid assertion error repo = get_repository(config=config) with connect(repo, login, password=pwd) as cnx: + cnx = cnx._cnx # client connection -> repo connection with cnx.security_enabled(False, False): repo.system_source.eid = ssource.eid # redo this manually handler = config.migration_handler(schema, interactive=False, diff -r bab2befaac9b -r d9a1e7939ee6 server/migractions.py --- a/server/migractions.py Fri Jun 13 12:07:51 2014 +0200 +++ b/server/migractions.py Fri Jun 13 13:54:28 2014 +0200 @@ -125,6 +125,8 @@ self.fs_schema = schema self._synchronized = set() + # overriden from base MigrationHelper ###################################### + def set_cnx(self): try: login = self.repo.config.default_admin_config['login'] @@ -150,7 +152,6 @@ sys.exit(0) self.session = self.repo._get_session(self.cnx.sessionid) - # overriden from base MigrationHelper ###################################### @cached def repo_connect(self): @@ -177,7 +178,7 @@ super(ServerMigrationHelper, self).migrate(vcconf, toupgrade, options) def cmd_process_script(self, migrscript, funcname=None, *args, **kwargs): - with self.cnx._cnx.ensure_cnx_set: + with self.cnx.ensure_cnx_set: try: return super(ServerMigrationHelper, self).cmd_process_script( migrscript, funcname, *args, **kwargs) @@ -286,12 +287,10 @@ print '-> database restored.' def commit(self): - if hasattr(self, 'cnx'): - self.cnx.commit(free_cnxset=False) + self.cnx.commit() def rollback(self): - if hasattr(self, 'cnx'): - self.cnx.rollback(free_cnxset=False) + self.cnx.rollback() def rqlexecall(self, rqliter, ask_confirm=False): for rql, kwargs in rqliter: @@ -309,7 +308,7 @@ 'schema': self.repo.get_schema(), 'cnx': self.cnx, 'fsschema': self.fs_schema, - 'session' : self.cnx._cnx, + 'session' : self.cnx, 'repo' : self.repo, }) return context @@ -957,7 +956,6 @@ % (rtype, new.eid, oldeid), ask_confirm=False) # delete relations using SQL to avoid relations content removal # triggered by schema synchronization hooks. - session = self.session for rdeftype in ('CWRelation', 'CWAttribute'): thispending = set( (eid for eid, in self.sqlexec( 'SELECT cw_eid FROM cw_%s WHERE cw_from_entity=%%(eid)s OR ' @@ -967,10 +965,10 @@ # get some validation error on commit since integrity hooks # may think some required relation is missing... This also ensure # repository caches are properly cleanup - hook.CleanupDeletedEidsCacheOp.get_instance(session).union(thispending) + hook.CleanupDeletedEidsCacheOp.get_instance(self.cnx).union(thispending) # and don't forget to remove record from system tables entities = [self.cnx.entity_from_eid(eid, rdeftype) for eid in thispending] - self.repo.system_source.delete_info_multi(self.cnx._cnx, entities) + self.repo.system_source.delete_info_multi(self.cnx, entities) self.sqlexec('DELETE FROM cw_%s WHERE cw_from_entity=%%(eid)s OR ' 'cw_to_entity=%%(eid)s' % rdeftype, {'eid': oldeid}, ask_confirm=False) @@ -1391,7 +1389,7 @@ indexable entity types """ from cubicweb.server.checkintegrity import reindex_entities - reindex_entities(self.repo.schema, self.cnx._cnx, etypes=etypes) + reindex_entities(self.repo.schema, self.cnx, etypes=etypes) @contextmanager def cmd_dropped_constraints(self, etype, attrname, cstrtype=None, @@ -1490,7 +1488,7 @@ self.sqlexec(sql, ask_confirm=False) dbhelper = self.repo.system_source.dbhelper sqltype = dbhelper.TYPE_MAPPING[newtype] - cursor = self.cnx._cnx.cnxset.cu + cursor = self.cnx.cnxset.cu dbhelper.change_col_type(cursor, 'cw_%s' % etype, 'cw_%s' % attr, sqltype, allownull) if commit: self.commit() diff -r bab2befaac9b -r d9a1e7939ee6 server/test/unittest_migractions.py --- a/server/test/unittest_migractions.py Fri Jun 13 12:07:51 2014 +0200 +++ b/server/test/unittest_migractions.py Fri Jun 13 13:54:28 2014 +0200 @@ -72,7 +72,7 @@ @contextmanager def mh(self): - with self.admin_access.client_cnx() as cnx: + with self.admin_access.repo_cnx() as cnx: yield cnx, ServerMigrationHelper(self.repo.config, migrschema, repo=self.repo, cnx=cnx, interactive=False) diff -r bab2befaac9b -r d9a1e7939ee6 test/unittest_cwctl.py --- a/test/unittest_cwctl.py Fri Jun 13 12:07:51 2014 +0200 +++ b/test/unittest_cwctl.py Fri Jun 13 13:54:28 2014 +0200 @@ -44,7 +44,7 @@ def test_process_script_args_context(self): repo = self.repo - with self.admin_access.client_cnx() as cnx: + with self.admin_access.repo_cnx() as cnx: mih = ServerMigrationHelper(None, repo=repo, cnx=cnx, interactive=False, # hack so it don't try to load fs schema