diff options
author | Chris Matthews <cmatthews5@apple.com> | 2017-11-27 21:51:35 +0000 |
---|---|---|
committer | Chris Matthews <cmatthews5@apple.com> | 2017-11-27 21:51:35 +0000 |
commit | 02c1f49eabffaeb5152713b153916dd9f62ce9b4 (patch) | |
tree | 22b29dd12c7cf859fa5f56d668be0c48c7c8e86b | |
parent | 0c27e6bc24d96232f01722014d068864048660e1 (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.py | 59 |
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 |