[LNT] r257821 - When removing field changes, make sure to clean up correctly
Chris Matthews via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 14 14:19:05 PST 2016
Author: cmatthews
Date: Thu Jan 14 16:19:04 2016
New Revision: 257821
URL: http://llvm.org/viewvc/llvm-project?rev=257821&view=rev
Log:
When removing field changes, make sure to clean up correctly
Modified:
lnt/trunk/lnt/server/db/fieldchange.py
lnt/trunk/tests/server/ui/change_processing.py
Modified: lnt/trunk/lnt/server/db/fieldchange.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/db/fieldchange.py?rev=257821&r1=257820&r2=257821&view=diff
==============================================================================
--- lnt/trunk/lnt/server/db/fieldchange.py (original)
+++ lnt/trunk/lnt/server/db/fieldchange.py Thu Jan 14 16:19:04 2016
@@ -18,6 +18,36 @@ def post_submit_tasks(ts, run_id):
regenerate_fieldchanges_for_run(ts, run_id)
+def delete_fieldchange(ts, change):
+ """Delete this field change. Since it might be attahed to a regression
+ via regression indicators, fix those up too. If this orphans a regression
+ delete it as well."""
+ # Find the indicators.
+ indicators = ts.query(ts.RegressionIndicator). \
+ filter(ts.RegressionIndicator.field_change_id == change.id). \
+ all()
+ # And all the related regressions.
+ regression_ids = [r.regression_id for r in indicators]
+
+ # Remove the idicators that point to this change.
+ for ind in indicators:
+ ts.delete(ind)
+
+ # Now we can remove the change, itself.
+ ts.delete(change)
+
+ # We might have just created a regression with no changes.
+ # If so, delete it as well.
+ for r in regression_ids:
+ remaining = ts.query(ts.RegressionIndicator). \
+ filter(ts.RegressionIndicator.regression_id == r). \
+ all()
+ if len(remaining) == 0:
+ r = ts.query(ts.Regression).get(r)
+ note("Deleting regression because it has not changes:" + repr(r))
+ ts.delete(r)
+ ts.commit()
+
@timed
def regenerate_fieldchanges_for_run(ts, run_id):
@@ -79,7 +109,7 @@ def regenerate_fieldchanges_for_run(ts,
if not result.is_result_performance_change() and f:
# With more data, its not a regression. Kill it!
note("Removing field change: {}".format(f.id))
- ts.delete(f)
+ delete_fieldchange(ts, f)
continue
if result.is_result_performance_change() and not f:
Modified: lnt/trunk/tests/server/ui/change_processing.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/tests/server/ui/change_processing.py?rev=257821&r1=257820&r2=257821&view=diff
==============================================================================
--- lnt/trunk/tests/server/ui/change_processing.py (original)
+++ lnt/trunk/tests/server/ui/change_processing.py Thu Jan 14 16:19:04 2016
@@ -17,6 +17,7 @@ from lnt.server.db import v4db
from lnt.server.db.fieldchange import is_overlaping, identify_related_changes
from lnt.server.db.regression import rebuild_title, RegressionState
from lnt.server.db.rules import rule_update_fixed_regressions
+from lnt.server.db.fieldchange import delete_fieldchange
logging.basicConfig(level=logging.DEBUG)
@@ -191,6 +192,11 @@ class ChangeProcessingTests(unittest.Tes
def test_regression_evolution(self):
ts_db = self.ts_db
rule_update_fixed_regressions.regression_evolution(ts_db, self.regressions)
+
+ def test_fc_deletion(self):
+ delete_fieldchange(self.ts_db, self.field_change)
+ delete_fieldchange(self.ts_db, self.field_change2)
+ delete_fieldchange(self.ts_db, self.field_change3)
if __name__ == '__main__':
More information about the llvm-commits
mailing list