[LNT] r318483 - v4db: Avoid expiring objects on commit()

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 16 16:36:31 PST 2017


Author: matze
Date: Thu Nov 16 16:36:31 2017
New Revision: 318483

URL: http://llvm.org/viewvc/llvm-project?rev=318483&view=rev
Log:
v4db: Avoid expiring objects on commit()

We don't expect the metadata to change after LNT startup. For that
matter we also don't want to the usual behavior where commit() expires
the existing objects on session.commit().

Modified:
    lnt/trunk/lnt/server/db/v4db.py

Modified: lnt/trunk/lnt/server/db/v4db.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/db/v4db.py?rev=318483&r1=318482&r2=318483&view=diff
==============================================================================
--- lnt/trunk/lnt/server/db/v4db.py (original)
+++ lnt/trunk/lnt/server/db/v4db.py Thu Nov 16 16:36:31 2017
@@ -25,34 +25,38 @@ class V4DB(object):
     Wrapper object for LNT v0.4+ databases.
     """
     def _load_schema_file(self, schema_file):
-        session = self.make_session()
+        session = self.make_session(expire_on_commit=False)
         with open(schema_file) as schema_fd:
             data = yaml.load(schema_fd)
         suite = testsuite.TestSuite.from_json(data)
         testsuite.check_testsuite_schema_changes(session, suite)
         suite = testsuite.sync_testsuite_with_metatables(session, suite)
         session.commit()
+        session.close()
 
         # Create tables if necessary
         tsdb = lnt.server.db.testsuitedb.TestSuiteDB(self, suite.name, suite)
-        session.close()
         tsdb.create_tables(self.engine)
+        return tsdb
 
     def _load_schemas(self):
         # Load schema files (preferred)
         schemasDir = self.config.schemasDir
         for schema_file in glob.glob('%s/*.yaml' % schemasDir):
-            self._load_schema_file(schema_file)
+            tsdb = self._load_schema_file(schema_file)
+            self.testsuite[tsdb.name] = tsdb
 
         # Load schemas from database.
-        session = self.make_session()
+        session = self.make_session(expire_on_commit=False)
         ts_list = session.query(testsuite.TestSuite).all()
         session.expunge_all()
         session.close()
         for suite in ts_list:
             name = suite.name
-            ts = lnt.server.db.testsuitedb.TestSuiteDB(self, name, suite)
-            self.testsuite[name] = ts
+            if name in self.testsuite:
+                continue
+            tsdb = lnt.server.db.testsuitedb.TestSuiteDB(self, name, suite)
+            self.testsuite[name] = tsdb
 
     def __init__(self, path, config, baseline_revision=0):
         # If the path includes no database type, assume sqlite.
@@ -83,8 +87,8 @@ class V4DB(object):
     def close(self):
         self.engine.dispose()
 
-    def make_session(self):
-        return self.sessionmaker()
+    def make_session(self, expire_on_commit=True):
+        return self.sessionmaker(expire_on_commit=expire_on_commit)
 
     def settings(self):
         """All the setting needed to recreate this instnace elsewhere."""




More information about the llvm-commits mailing list