Subject: bug#54786: Installation tests are failing

From: Ludovic Courtès <[email-masked]>
Date: Thu, 28 Apr 2022 21:19:33 +0200

Hi!

Mathieu Othacehe <[email-masked]> skribis:

>> * cgit-test (https://ci.guix.gnu.org/build/646812/details)
>
> The nginx daemon seems to be started multiple times:

I believe this is caused by a change of semantics (really: a bug) in the
shepherd ‘start’ method in 0.9.0.

Previously, ‘start’ would wait until the daemon was started.  If the
service was being started, shepherd wouldn’t reply until it was done
starting it.

In 0.9.0, shepherd replies even while it’s waiting for the service to be
started.  But as a consequence, it lets you start a service that is
already being started, leading to this mess you reported.

The proper fix is to better track the status of each service in
shepherd, and to prevent double-starts.

In the interim, perhaps we can work around that by using a different
check to determine whether the service is running.  For instance,
instead of:

          (test-assert "nginx running"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd))
                (start-service 'nginx))
             marionette))

… we’d write something like:

          (test-assert "nginx running"
            (wait-for-file "/var/run/nginx/pid"))

Thoughts?  I’ll give that a try.

Thanks for the heads-up!

Ludo’.