← Back to team overview

canonical-ubuntu-qa team mailing list archive

[Merge] ~hyask/autopkgtest-cloud:skia/fix_broken_cache_amqp into autopkgtest-cloud:master

 

Skia has proposed merging ~hyask/autopkgtest-cloud:skia/fix_broken_cache_amqp into autopkgtest-cloud:master.

Requested reviews:
  Canonical's Ubuntu QA (canonical-ubuntu-qa)

For more details, see:
https://code.launchpad.net/~hyask/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/463281

Those changes are the proper fix for the current cowboys fixing the package results pages.
-- 
Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~hyask/autopkgtest-cloud:skia/fix_broken_cache_amqp into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-web/webcontrol/browse.cgi b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
index 5e5217b..739abe8 100755
--- a/charms/focal/autopkgtest-web/webcontrol/browse.cgi
+++ b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
@@ -284,19 +284,34 @@ def package_overview(package, _=None):
         (k, v) for (k, v) in get_running_jobs().items() if k == package
     )
 
-    (_, _, queues_info) = get_queues_info()
-    for queue_name, queue in queues_info.items():
-        for release in queue:
-            for arch in queue[release]:
-                filtered_requests = [
-                    r
-                    for r in queue[release][arch][1]
-                    if r.startswith(package + "\n")
-                ]
-                queues_info[queue_name][release][arch] = (
-                    len(filtered_requests),  # update the size too
-                    filtered_requests,
-                )
+    try:
+        (_, _, queues_info) = get_queues_info()
+        for queue_name, queue in queues_info.items():
+            for release in queue:
+                for arch in queue[release]:
+                    filtered_requests = [
+                        r
+                        for r in queue[release][arch][1]
+                        if r.startswith(package + "\n")
+                    ]
+                    queues_info[queue_name][release][arch] = (
+                        len(filtered_requests),  # update the size too
+                        filtered_requests,
+                    )
+    except Exception:
+        # We never want to fail in that block, even is there are issues with cache-amqp
+        queues_info = {
+            "error": {
+                "no-release": {
+                    "no-arch": [
+                        1,
+                        [
+                            "There are errors in cache-amqp, please contact QA team"
+                        ],
+                    ]
+                }
+            }
+        }
 
     return render(
         "browse-package.html",
@@ -376,49 +391,89 @@ def package_release_arch(package, release, arch, _=None):
         )
 
     # Add running jobs if any
-    for _, running_jobs in get_running_jobs().get(package, {}).items():
-        job = running_jobs.get(release, {}).get(arch, {})
-        if job:
-            results.insert(
-                0,
-                (
-                    "N/A",
-                    job[0].get("triggers"),
-                    "N/A",
-                    human_date(job[0].get("submit-time")),
-                    human_sec(int(job[1])),
-                    job[0].get("requester", "-"),
-                    "running",
-                    "",
-                    False,
-                    "",
-                    job[0].get("uuid", "-"),
-                ),
-            )
-
-    # Add queued jobs if any
-    (_, _, queues_info) = get_queues_info()
-    for _, queue in queues_info.items():
-        queue_items = queue.get(release, {}).get(arch, [0, []])[1]
-        for item in queue_items:
-            if item.startswith(package + "\n"):
-                item_info = json.loads(item.split("\n")[1])
+    try:
+        for _, running_jobs in get_running_jobs().get(package, {}).items():
+            job = running_jobs.get(release, {}).get(arch, {})
+            if job:
                 results.insert(
                     0,
                     (
                         "N/A",
-                        item_info.get("triggers"),
-                        "N/A",
-                        human_date(item_info.get("submit-time")),
+                        job[0].get("triggers"),
                         "N/A",
-                        "-",
-                        "queued",
+                        human_date(job[0].get("submit-time")),
+                        human_sec(int(job[1])),
+                        job[0].get("requester", "-"),
+                        "running",
                         "",
                         False,
                         "",
-                        item_info.get("uuid", ""),
+                        job[0].get("uuid", "-"),
                     ),
                 )
+    except Exception:
+        # We never want to fail in that block, even is there are issues with cache-amqp
+        # Let's signal the error in the page, but still display other results
+        results.insert(
+            0,
+            (
+                "Unknown running list",
+                "There are errors in running.json",
+                "Please contact QA team",
+                "",
+                "",
+                "",
+                "",
+                "",
+                False,
+                "",
+                "",
+            ),
+        )
+
+    # Add queued jobs if any
+    try:
+        (_, _, queues_info) = get_queues_info()
+        for _, queue in queues_info.items():
+            queue_items = queue.get(release, {}).get(arch, [0, []])[1]
+            for item in queue_items:
+                if item.startswith(package + "\n"):
+                    item_info = json.loads(item.split("\n")[1])
+                    results.insert(
+                        0,
+                        (
+                            "N/A",
+                            item_info.get("triggers"),
+                            "N/A",
+                            human_date(item_info.get("submit-time")),
+                            "N/A",
+                            "-",
+                            "queued",
+                            "",
+                            False,
+                            "",
+                            item_info.get("uuid", ""),
+                        ),
+                    )
+    except Exception:
+        # We never want to fail in that block, even is there are issues with cache-amqp
+        # Let's signal the error in the page, but still display other results
+        results.insert(
+            0,
+            (
+                "Unknown queued list",
+                "There are errors in cache-amqp",
+                "Please contact QA team",
+                "",
+                "",
+                "",
+                "",
+                "",
+                False,
+                "",
+                "",
+            ),
+        )
 
     return render(
         "browse-results.html",
diff --git a/charms/focal/autopkgtest-web/webcontrol/cache-amqp b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
index 6e87b8b..8ef3b5b 100755
--- a/charms/focal/autopkgtest-web/webcontrol/cache-amqp
+++ b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
@@ -133,9 +133,10 @@ class AutopkgtestQueueContents:
                 ):
                     r = "private job"
                 res.append(r)
-            except (ValueError, IndexError):
-                logging.error('Received invalid request format "%s"', r)
-                return
+            except (ValueError, IndexError) as e:
+                logging.warning(
+                    'Received invalid request format "%s" (%s)', r, repr(e)
+                )
         return res
 
     def get_queue_contents(self):