aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Matthews <cmatthews5@apple.com>2017-11-27 21:51:35 +0000
committerChris Matthews <cmatthews5@apple.com>2017-11-27 21:51:35 +0000
commit02c1f49eabffaeb5152713b153916dd9f62ce9b4 (patch)
tree22b29dd12c7cf859fa5f56d668be0c48c7c8e86b
parent0c27e6bc24d96232f01722014d068864048660e1 (diff)
A litte bit faster query
Since we only use the RIs directly here, we can query for them in one query instead of doing lots of little queries. git-svn-id: https://llvm.org/svn/llvm-project/lnt/trunk@319102 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lnt/server/db/fieldchange.py59
1 files changed, 29 insertions, 30 deletions
diff --git a/lnt/server/db/fieldchange.py b/lnt/server/db/fieldchange.py
index 728c153..ab77824 100644
--- a/lnt/server/db/fieldchange.py
+++ b/lnt/server/db/fieldchange.py
@@ -194,40 +194,39 @@ def identify_related_changes(session, ts, fc):
ranges. Then looks for changes that are similar.
"""
- regressions = session.query(ts.Regression.id) \
+ active_indicators = session.query(ts.RegressionIndicator) \
+ .join(ts.Regression) \
.filter(or_(ts.Regression.state == RegressionState.DETECTED,
ts.Regression.state == RegressionState.DETECTED_FIXED)) \
.all()
- for regression_packed in regressions:
- regression_id = regression_packed[0]
- regression_indicators = get_ris(session, ts, regression_id)
- for change in regression_indicators:
- regression_change = change.field_change
- if is_overlaping(regression_change, fc):
- confidence = 0.0
-
- confidence += percent_similar(regression_change.machine.name,
- fc.machine.name)
- confidence += percent_similar(regression_change.test.name,
- fc.test.name)
-
- if regression_change.field_id == fc.field_id:
- confidence += 1.0
-
- if confidence >= 2.0:
- # Matching
- MSG = "Found a match: {} with score {}."
- regression = session.query(ts.Regression) \
- .get(regression_id)
- logger.info(MSG.format(str(regression),
- confidence))
- ri = ts.RegressionIndicator(regression, fc)
- session.add(ri)
- # Update the default title if needed.
- rebuild_title(session, ts, regression)
- session.commit()
- return True, regression
+ for change in active_indicators:
+ regression_change = change.field_change
+
+ if is_overlaping(regression_change, fc):
+ confidence = 0.0
+
+ confidence += percent_similar(regression_change.machine.name,
+ fc.machine.name)
+ confidence += percent_similar(regression_change.test.name,
+ fc.test.name)
+
+ if regression_change.field_id == fc.field_id:
+ confidence += 1.0
+
+ if confidence >= 2.0:
+ # Matching
+ MSG = "Found a match: {} with score {}."
+ regression = session.query(ts.Regression) \
+ .get(change.regression_id)
+ logger.info(MSG.format(str(regression),
+ confidence))
+ ri = ts.RegressionIndicator(regression, fc)
+ session.add(ri)
+ # Update the default title if needed.
+ rebuild_title(session, ts, regression)
+ session.commit()
+ return True, regression
logger.info("Could not find a partner, creating new Regression for change")
new_reg = new_regression(session, ts, [fc.id])
return False, new_reg