diff options
author | Chris Matthews <cmatthews5@apple.com> | 2018-12-15 00:34:03 +0000 |
---|---|---|
committer | Chris Matthews <cmatthews5@apple.com> | 2018-12-15 00:34:03 +0000 |
commit | c78d24b031091ec38c9c30f358325b4aad12da03 (patch) | |
tree | b34029f076280a3abf6145ac6e13f2dd21c8c227 /lnt/server | |
parent | e3d4d67f277dde19e5f81f4c0b2a30a7c84454e7 (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.py | 13 | ||||
-rw-r--r-- | lnt/server/db/testsuitedb.py | 1 |
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): |