Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:d-r-d-a-r-handle-simultaneous-write into autopkgtest-cloud:master.
Requested reviews: Canonical's Ubuntu QA (canonical-ubuntu-qa) For more details, see: https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/460498 -- Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:d-r-d-a-r-handle-simultaneous-write into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-web/webcontrol/download-all-results b/charms/focal/autopkgtest-web/webcontrol/download-all-results index 97f40a5..60161e9 100755 --- a/charms/focal/autopkgtest-web/webcontrol/download-all-results +++ b/charms/focal/autopkgtest-web/webcontrol/download-all-results @@ -21,6 +21,7 @@ import sys import tarfile import time import urllib.parse +from random import randrange from urllib.request import urlopen from distro_info import UbuntuDistroInfo @@ -181,25 +182,36 @@ def fetch_one_result(url): if env in testinfo.keys(): env_vars.append(spec) - try: - c = db_con.cursor() - c.execute( - "INSERT INTO result VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", - ( - test_id, - run_id, - ver, - test_triggers, - duration, - exitcode, - requester, - ",".join(env_vars), - test_uuid, - ), - ) - db_con.commit() - except sqlite3.IntegrityError: - LOGGER.info("%s was already recorded - skipping", run_id) + while True: + try: + c = db_con.cursor() + c.execute( + "INSERT INTO result VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + ( + test_id, + run_id, + ver, + test_triggers, + duration, + exitcode, + requester, + ",".join(env_vars), + test_uuid, + ), + ) + db_con.commit() + break + except sqlite3.IntegrityError as e: + if "database is locked" in str(e): + sleep_time = randrange(1, 10) + logging.info( + "database is currently locked, waiting %s seconds and trying again..." + % sleep_time + ) + time.sleep(sleep_time) + else: + LOGGER.info("%s was already recorded - skipping", run_id) + break def fetch_container(release, container_url): diff --git a/charms/focal/autopkgtest-web/webcontrol/download-results b/charms/focal/autopkgtest-web/webcontrol/download-results index 9942437..09316ae 100755 --- a/charms/focal/autopkgtest-web/webcontrol/download-results +++ b/charms/focal/autopkgtest-web/webcontrol/download-results @@ -6,7 +6,9 @@ import logging import os import socket import sqlite3 +import time import urllib.parse +from random import randrange import amqplib.client_0_8 as amqp from helpers.utils import get_test_id, init_db @@ -82,25 +84,36 @@ def process_message(msg, db_con): test_id = get_test_id(db_con, release, arch, package) - try: - c = db_con.cursor() - c.execute( - "INSERT INTO result VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", - ( - test_id, - run_id, - version, - triggers, - duration, - exitcode, - requester, - info.get("env", ""), - test_uuid, - ), - ) - db_con.commit() - except sqlite3.IntegrityError: - logging.info("...which was already recorded - skipping") + while True: + try: + c = db_con.cursor() + c.execute( + "INSERT INTO result VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + ( + test_id, + run_id, + version, + triggers, + duration, + exitcode, + requester, + info.get("env", ""), + test_uuid, + ), + ) + db_con.commit() + break + except sqlite3.IntegrityError as e: + if "database is locked" in str(e): + sleep_time = randrange(1, 10) + logging.info( + "database is currently locked, waiting %s seconds and trying again..." + % sleep_time + ) + time.sleep(sleep_time) + else: + logging.info("...which was already recorded - skipping") + break msg.channel.basic_ack(msg.delivery_tag)
-- Mailing list: https://launchpad.net/~canonical-ubuntu-qa Post to : canonical-ubuntu-qa@lists.launchpad.net Unsubscribe : https://launchpad.net/~canonical-ubuntu-qa More help : https://help.launchpad.net/ListHelp