aboutsummaryrefslogtreecommitdiff
path: root/lnt/server
diff options
context:
space:
mode:
authorChris Matthews <cmatthews5@apple.com>2018-12-15 00:34:03 +0000
committerChris Matthews <cmatthews5@apple.com>2018-12-15 00:34:03 +0000
commitc78d24b031091ec38c9c30f358325b4aad12da03 (patch)
treeb34029f076280a3abf6145ac6e13f2dd21c8c227 /lnt/server
parente3d4d67f277dde19e5f81f4c0b2a30a7c84454e7 (diff)
Make a cache for machine -> order lookup
This set of queries were taking a long time. Make the query faster, by using .first(), and then cache the results in our testsuitedb. git-svn-id: https://llvm.org/svn/llvm-project/lnt/trunk@349219 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lnt/server')
-rw-r--r--lnt/server/db/regression.py13
-rw-r--r--lnt/server/db/testsuitedb.py1
2 files changed, 13 insertions, 1 deletions
diff --git a/lnt/server/db/regression.py b/lnt/server/db/regression.py
index ed2e415..fcef910 100644
--- a/lnt/server/db/regression.py
+++ b/lnt/server/db/regression.py
@@ -87,6 +87,14 @@ def get_all_orders_for_machine(session, ts, machine):
.order_by(asc(ts.Order.llvm_project_revision)) \
.all()
+@timed
+def get_last_order_for_machine(session, ts, machine):
+ """Get all the orders for this sa machine."""
+ return session.query(ts.Order) \
+ .join(ts.Run) \
+ .filter(ts.Run.machine_id == machine) \
+ .order_by(desc(ts.Order.llvm_project_revision)) \
+ .first()
def get_ris(session, ts, regression_id):
return session.query(ts.RegressionIndicator) \
@@ -116,7 +124,10 @@ def get_current_runs_of_fieldchange(session, ts, fc):
before_runs = get_runs_for_order_and_machine(session, ts,
fc.start_order_id,
fc.machine_id)
- newest_order = get_all_orders_for_machine(session, ts, fc.machine_id)[-1]
+ newest_order = ts.machine_to_latest_order_cache.get(fc.machine_id)
+ if not newest_order:
+ newest_order = get_last_order_for_machine(session, ts, fc.machine_id)
+ ts.machine_to_latest_order_cache[fc.machine_id] = newest_order
after_runs = get_runs_for_order_and_machine(session, ts, newest_order.id,
fc.machine_id)
diff --git a/lnt/server/db/testsuitedb.py b/lnt/server/db/testsuitedb.py
index 95a37d8..2a6d6bc 100644
--- a/lnt/server/db/testsuitedb.py
+++ b/lnt/server/db/testsuitedb.py
@@ -88,6 +88,7 @@ class TestSuiteDB(object):
self.run_fields = list(self.test_suite.run_fields)
self.sample_fields = list(sorted(self.test_suite.sample_fields,
key = lambda s: s.schema_index))
+ self.machine_to_latest_order_cache = {}
sample_field_indexes = dict()
for i, field in enumerate(self.sample_fields):