[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