~paride/curtin:vmtest-images-lockfile

Last commit made on 2019-10-02
Get this branch:
git clone -b vmtest-images-lockfile https://git.launchpad.net/~paride/curtin
Only Paride Legovini can upload to this branch. If you are Paride Legovini please log in for upload directions.

Branch merges

Branch information

Name:
vmtest-images-lockfile
Repository:
lp:~paride/curtin

Recent commits

30b5418... by Paride Legovini

jenkins-runner: remove unnecessary quotes

Quotes are not necessary around bare strings not at risk of being split
or expanded.

0d9d770... by Paride Legovini

jenkins-runner: force CURTIN_VMTEST_IMAGE_LOCK_TIMEOUT to be an integer

e1816e0... by Paride Legovini

jenkins-runner: take out the common parts of the locking code blocks

Set the flock options and timeout message once and reuse them in the
directory lock and lockfile lock code blocks.

Note that the following line:

  declare -a flock_timeout_opts

isn't really necessary, as an empty array is still an unbound variable
when referred to as $array, while ${unset_variable[@]} expands to
nothing without raising an unbound varaible error, even when running
with 'set -u'. The 'declare' line is only useful for readability.

fa2c397... by Paride Legovini

jenkins-runner: disable the lockfile timeout by default

When CURTIN_VMTEST_IMAGE_LOCK_TIMEOUT is set to a negative integer
disable the lockfile timeout. By default set it to -1 (no timeout).

Rationale: while it is useful to have a timeout, there is no sensible
default. In a run like (parameters omitted):

  $ jenkins-runner &
  $ vmtest-sync-images &
  $ jenkins-runner

the second jenkins-runner will have to wait for the first one to finish,
as it's locked by vmtest-sync-images. A full vmtest run can take several
hours. I easily spotted successful runs that took more than 16 hours on
our Jenkins log. Setting the default timeout to something like 20 hours
should be safe, but still don't think it's a good default, as is too
high for all the cases where only a subset of the tests is being run.
The timeout is too dependent on the hardware, on how busy the server is,
and on the set of tests which is run. No size fits all.

4cdb7fd... by Paride Legovini

vmtest-sync-images: remove unused imports

2d059d1... by Paride Legovini

vmtests: use file locking on the images

This change implements a file locking mechanism in the
jenkins-runner and vmtest-sync-images scripts.

The vmtest-sync-images script requires two exclusive locks
to start updating the images: a lock on IMAGE_DIR and a
lock on a lockfile. The script will wait to get both locks
locks before actually updating the images.

The jenkins-runner script does the following:

 (1) set a shared lock on IMAGE_DIR
 (2) set a shared lock on the lockfile
 (3) release the lock on IMAGE_DIR
 (4) run the vmtests
 (5) exit (releasing the lock on the lockfile)

The jenkins-runner does not hold a lock on IMAGE_DIR while
running, allowing vmtest-sync-images to set a lock there,
prevending further jenkins-runners from running the vmtests
while the images are being updated. In other words
vmtest-sync-images can "book" the images for the next
available slot.

Steps (1) and (3) can be skipped by passing the
--skip-images-dirlock option to jenkins-runner. In this way
jenkins-runner has precedence over vmtest-sync-images. This
is useful when it should run ASAP, for example in CI runs.

6f8ed52... by Paride Legovini

vmtest: enable arm64

 * Call qemu with the correct -machine/-cpu options
 * Default to UEFI boot
 * Boot the Ubuntu "ga" arm64 kernel
 * Disable the unsupported configurations (e.g. CentOS tests)

vmtest: bump the VM memory for Cosmic to 2GB

112b024... by Paride Legovini

Make the vmtests/test_basic test suite run on ppc64el

Changes:
 - On ppc64el inject a PReP partition to the storage configuration
 - Expect a GPT partition table and not a DOS one on ppc64el
 - Skip XenialGAi386TestBasic if target_arch != amd64
 - Skip XenialGAi386TestZfsRoot if target_arch != amd64
 - Skip XenialGAi386TestZfsRootFsType if target_arch != amd64
 - Skip test_partition_is_zero on ppc64el (LP: #1843288)
 - Skip all the CentOS tests if target_arch = ppc64el

692baee... by Paride Legovini

vmtests: separate arch and target_arch in tests

In tests 'arch' is now the arch of the host system, while target_arch
is the architecture the test targets. By default target_arch = arch.

Modify find_arches() to return all the target arches which not excluded
with arch_skip.

17b516a... by Paride Legovini

vmtests: new decorator: skip_if_arch

Introduce the skip_in_arch decorator. It looks a lot like skip_if_flag,
but would compares the 'arch' attr to the passed in value.