canonical-ubuntu-qa team mailing list archive
-
canonical-ubuntu-qa team
-
Mailing list archive
-
Message #02907
[Merge] ~andersson123/autopkgtest-cloud:d-r-d-a-r-handle-simultaneous-write into autopkgtest-cloud:master
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)
Follow ups