[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 04/16] tests/docker: reduce scary warnings from failed ins
From: |
Cleber Rosa |
Subject: |
Re: [PATCH v2 04/16] tests/docker: reduce scary warnings from failed inspect |
Date: |
Mon, 23 Sep 2019 16:51:15 -0400 |
User-agent: |
Mutt/1.12.1 (2019-06-15) |
On Thu, Sep 19, 2019 at 06:10:03PM +0100, Alex Bennée wrote:
> There is a race here in the clean-up code so lets just accept that
> sometimes the active task we just looked up might have finished before
> we got to inspect it.
>
> Signed-off-by: Alex Bennée <address@hidden>
> ---
> tests/docker/docker.py | 32 ++++++++++++++++++--------------
> 1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/tests/docker/docker.py b/tests/docker/docker.py
> index 29613afd489..4dca6006d2f 100755
> --- a/tests/docker/docker.py
> +++ b/tests/docker/docker.py
> @@ -235,20 +235,24 @@ class Docker(object):
> if not only_active:
> cmd.append("-a")
> for i in self._output(cmd).split():
> - resp = self._output(["inspect", i])
> - labels = json.loads(resp)[0]["Config"]["Labels"]
> - active = json.loads(resp)[0]["State"]["Running"]
> - if not labels:
> - continue
> - instance_uuid = labels.get("com.qemu.instance.uuid", None)
> - if not instance_uuid:
> - continue
> - if only_known and instance_uuid not in self._instances:
> - continue
> - print("Terminating", i)
> - if active:
> - self._do(["kill", i])
> - self._do(["rm", i])
> + try:
> + resp = self._output(["inspect", i])
> + labels = json.loads(resp)[0]["Config"]["Labels"]
> + active = json.loads(resp)[0]["State"]["Running"]
> + if not labels:
> + continue
> + instance_uuid = labels.get("com.qemu.instance.uuid", None)
> + if not instance_uuid:
> + continue
> + if only_known and instance_uuid not in self._instances:
> + continue
> + print("Terminating", i)
> + if active:
> + self._do(["kill", i])
> + self._do(["rm", i])
Both podman and docker seem to handle "rm -f $INSTANCE" well, which
would by itself consolidate the two commands in one and minimize the
race condition.
For unexisting containers, and no other errors, podman will return "1
if one of the specified containers did not exist, and no other
failure", as per its man page. I couldn't find any guarantee that
docker will also return 1 on a similar situation, but that's what
I've experienced too:
$ docker rm -f CONTAINER_IS_NOW_FONE
Error response from daemon: No such container: CONTAINER_IS_NOW_GONE
$ echo $?
1
Maybe waiving exit status 1 and nothing else would do the trick here
and not hide other real problems?
- Cleber.
> + except subprocess.CalledProcessError:
> + # i likely finished running before we got here
> + pass
>
> def clean(self):
> self._do_kill_instances(False, False)
> --
> 2.20.1
>
>
- [PATCH v2 13/16] .shippable.yml: Build WHPX enabled binaries, (continued)
[PATCH v2 04/16] tests/docker: reduce scary warnings from failed inspect, Alex Bennée, 2019/09/19
- Re: [PATCH v2 04/16] tests/docker: reduce scary warnings from failed inspect,
Cleber Rosa <=
[PATCH v2 01/16] tests/docker: add sanitizers back to clang build, Alex Bennée, 2019/09/19
[PATCH v2 05/16] podman: fix command invocation, Alex Bennée, 2019/09/19
[PATCH v2 09/16] tests/tcg: add float_madds test to multiarch, Alex Bennée, 2019/09/19
[PATCH v2 03/16] tests/docker: remove python2.7 from docker9-mxe, Alex Bennée, 2019/09/19
[PATCH v2 02/16] tests/docker: fix DOCKER_PARTIAL_IMAGES, Alex Bennée, 2019/09/19