[LNT] r318566 - Age out oldest unprocessed regressions

Chris Matthews via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 17 14:52:57 PST 2017


Author: cmatthews
Date: Fri Nov 17 14:52:57 2017
New Revision: 318566

URL: http://llvm.org/viewvc/llvm-project?rev=318566&view=rev
Log:
Age out oldest unprocessed regressions

When the regression pages are not used in LNT, detected regressions will
build up.  We continue to consider those regressions when we look at
incoming changes.  Now lets limit that set of regressions to 50, any
that are older (by oldest end order) are moved to ignored.

Modified:
    lnt/trunk/lnt/server/db/rules/rule_update_fixed_regressions.py

Modified: lnt/trunk/lnt/server/db/rules/rule_update_fixed_regressions.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/db/rules/rule_update_fixed_regressions.py?rev=318566&r1=318565&r2=318566&view=diff
==============================================================================
--- lnt/trunk/lnt/server/db/rules/rule_update_fixed_regressions.py (original)
+++ lnt/trunk/lnt/server/db/rules/rule_update_fixed_regressions.py Fri Nov 17 14:52:57 2017
@@ -49,6 +49,41 @@ def impacts(session, ts, run_id, regress
     return machine_id in regression_machines_set
 
 
+def age_out_oldest_regressions(session, ts, num_to_keep=50):
+    # type: (Session, TestSuiteDB, int) -> int
+    """Find the oldest regressions that are still in the detected state,
+    and age them out.  This is needed when regressions are not manually
+    acknowledged, regression analysis can grow unbounded.
+    
+    :param session: db session
+    :param ts: testsuite
+    :param num_to_keep: the number of newest regressions to keep in the detected state.
+    :returns: the number of regressions changed.
+    """
+
+    regression_orders = session.query(ts.Regression.id, ts.FieldChange.end_order_id) \
+        .filter(ts.Regression.state == RegressionState.DETECTED) \
+        .join(ts.RegressionIndicator, ts.Regression.id == ts.RegressionIndicator.regression_id) \
+        .join(ts.FieldChange) \
+        .all()
+
+    regression_newest_change = {}
+    for regression_id, order_id in regression_orders:
+        current = regression_newest_change.get(regression_id)
+        if current is None or current < order_id:
+            regression_newest_change[regression_id] = order_id
+    # Order regressions by FC end order.
+    ordered = sorted(regression_newest_change.items(), key=lambda x: x[1])
+    to_move = ordered[0:(-1 * num_to_keep)]
+
+    for r, _ in to_move:
+        regress = session.query(ts.Regression).filter_by(id=r).one()
+        logger.info("Ageing out regression {} to keep regression count under {}."
+                    .format(regress, num_to_keep))
+        regress.state = RegressionState.IGNORED
+    return len(to_move)
+
+
 @timed
 def regression_evolution(session, ts, run_id):
     """Analyse regressions. If they have changes, process them.
@@ -69,6 +104,11 @@ def regression_evolution(session, ts, ru
     staged = [r for r in regressions if r.state == RegressionState.STAGED]
     active = [r for r in regressions if r.state == RegressionState.ACTIVE]
 
+    # Remove the oldest detected regressions if needed.
+    num_regression_to_keep = 50
+    if len(detects) > num_regression_to_keep:
+        changed += age_out_oldest_regressions(session, ts, num_regression_to_keep)
+
     for regression in detects:
         if impacts(session, ts, run_id, regression) and is_fixed(session, ts, regression):
             logger.info("Detected fixed regression" + str(regression))
@@ -89,6 +129,7 @@ def regression_evolution(session, ts, ru
             regression.state = RegressionState.DETECTED_FIXED
             regression.title = regression.title + " [Detected Fixed]"
             changed += 1
+
     session.commit()
     logger.info("Changed the state of {} regressions".format(changed))
 




More information about the llvm-commits mailing list