From 6a6e4616d9c4dd5f05dc4bfecfc21b32fb767e63 Mon Sep 17 00:00:00 2001 From: Eduardo Olivares Date: Fri, 23 Jun 2023 10:22:28 +0200 Subject: [PATCH] Avoid concurrency issues when creating Cirros and Ubuntu images Tobiko tests can be executed with several workers in parallel. These tests shared some resources, such as images. Concurrency issues have been detected, specially with Ubuntu images that are customized before they are uploaded to Glance. In some cases, one Tobiko worker may overwite the image file while another test is uploading it to Glance. This patch uses lockers to make workers wait while other workers are creating either Cirros or Ubuntu images. Change-Id: Ie2b4001ed8f03433cc87d8b1cae968a935f97805 --- tobiko/openstack/stacks/_cirros.py | 8 ++++++++ tobiko/openstack/stacks/_ubuntu.py | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/tobiko/openstack/stacks/_cirros.py b/tobiko/openstack/stacks/_cirros.py index 4850391a0..c3f312238 100644 --- a/tobiko/openstack/stacks/_cirros.py +++ b/tobiko/openstack/stacks/_cirros.py @@ -14,8 +14,10 @@ from __future__ import absolute_import import io +import os import typing +from oslo_concurrency import lockutils from paramiko import sftp_file from tobiko import config @@ -30,6 +32,7 @@ import tobiko.tripleo from tobiko.openstack.stacks import _hot CONF = config.CONF +LOCK_DIR = os.path.expanduser(CONF.tobiko.common.lock_dir) CIRROS_IMAGE_VERSION = '0.5.2' @@ -54,6 +57,11 @@ class CirrosImageFixture(glance.URLGlanceImageFixture): # when using recent Paramiko versions (>= 2.9.2) 'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']} + @lockutils.synchronized( + 'cirros_image_setup_fixture', external=True, lock_path=LOCK_DIR) + def setup_fixture(self): + super(CirrosImageFixture, self).setup_fixture() + class CirrosFlavorStackFixture(_nova.FlavorStackFixture): ram = 128 diff --git a/tobiko/openstack/stacks/_ubuntu.py b/tobiko/openstack/stacks/_ubuntu.py index 2c3c86301..b741ebc1a 100644 --- a/tobiko/openstack/stacks/_ubuntu.py +++ b/tobiko/openstack/stacks/_ubuntu.py @@ -13,8 +13,11 @@ # under the License. from __future__ import absolute_import +import os import typing +from oslo_concurrency import lockutils + import tobiko from tobiko import config from tobiko.openstack import glance @@ -25,6 +28,7 @@ from tobiko.shell import sh CONF = config.CONF +LOCK_DIR = os.path.expanduser(CONF.tobiko.common.lock_dir) class UbuntuMinimalImageFixture(glance.FileGlanceImageFixture): @@ -38,6 +42,11 @@ class UbuntuMinimalImageFixture(glance.FileGlanceImageFixture): disabled_algorithms = CONF.tobiko.ubuntu.disabled_algorithms is_reachable_timeout = CONF.tobiko.nova.ubuntu_is_reachable_timeout + @lockutils.synchronized( + 'ubuntu_minimal_setup_fixture', external=True, lock_path=LOCK_DIR) + def setup_fixture(self): + super(UbuntuMinimalImageFixture, self).setup_fixture() + IPERF3_SERVICE_FILE = """ [Unit]