autotest: Don't delete labels that are replaced by static labels.

BUG=chromium:792309
TEST=Run './site_utils/label_cleaner.py -p board:' with local migrated
mysql.

Change-Id: Ia263d3b54576b3ed01c9d57b2d1688333ee34875
Reviewed-on: https://chromium-review.googlesource.com/833330
Commit-Ready: Xixuan Wu <xixuan@chromium.org>
Tested-by: Xixuan Wu <xixuan@chromium.org>
Reviewed-by: Xixuan Wu <xixuan@chromium.org>
diff --git a/site_utils/label_cleaner.py b/site_utils/label_cleaner.py
index d302a6c..4ea06e3 100755
--- a/site_utils/label_cleaner.py
+++ b/site_utils/label_cleaner.py
@@ -46,6 +46,8 @@
         'AUTOTEST_WEB', 'password')
 DATABASE = global_config.global_config.get_config_value(
         'AUTOTEST_WEB', 'database')
+RESPECT_STATIC_LABELS = global_config.global_config.get_config_value(
+        'SKYLAB', 'respect_static_labels', type=bool, default=False)
 
 SELECT_USED_LABELS_FORMAT = """
 SELECT DISTINCT(label_id) FROM afe_autotests_dependency_labels UNION
@@ -59,6 +61,9 @@
 SELECT_LABELS_FORMAT = """
 SELECT id FROM afe_labels WHERE name %s
 """
+SELECT_REPLACED_LABELS = """
+SELECT label_id FROM afe_replaced_labels
+"""
 
 DELETE_LABELS_FORMAT = """
 DELETE FROM afe_labels WHERE id in (%s)
@@ -98,7 +103,15 @@
     logging.debug('Running: %r', sql)
     cursor.execute(sql)
     rows = cursor.fetchall()
-    return set(r[0] for r in rows)
+    # Don't delete labels whose replaced_by_static_label=True, since they're
+    # actually maintained by afe_static_labels, not afe_labels.
+    if not RESPECT_STATIC_LABELS:
+        return set(r[0] for r in rows)
+    else:
+        cursor.execute(SELECT_REPLACED_LABELS)
+        replaced_labels = cursor.fetchall()
+        replaced_label_ids = set([r[0] for r in replaced_labels])
+        return set(r[0] for r in rows) - replaced_label_ids
 
 
 def _delete_labels(conn, labels):