diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2021-04-14 12:02:37 -0400 |
---|---|---|
committer | Daniel J Walsh <dwalsh@redhat.com> | 2021-04-14 12:05:59 -0400 |
commit | 4347a62e08b2ffabd07f767bc534a8cb2f5cb0aa (patch) | |
tree | b43eec2993b0c334e140076f8841c96000b9f7c4 /pkg/api/handlers | |
parent | 4ee203dde7c9e8de2484f00c7f251c0f32ed0ad2 (diff) | |
download | podman-4347a62e08b2ffabd07f767bc534a8cb2f5cb0aa.tar.gz podman-4347a62e08b2ffabd07f767bc534a8cb2f5cb0aa.tar.bz2 podman-4347a62e08b2ffabd07f767bc534a8cb2f5cb0aa.zip |
Fix flake on failed podman-remote build
We have a race condition where podman build can fail
but still return an exit code of 0. This PR ensures
that as soon as the build fails, the failed flag is set
eliminating the race.
Fixes: https://github.com/containers/podman/issues/10029
[NO TESTS NEEDED] Tests of failed builds are already in place, and
the elimination of the race should be enough.
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Diffstat (limited to 'pkg/api/handlers')
-rw-r--r-- | pkg/api/handlers/compat/images_build.go | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/pkg/api/handlers/compat/images_build.go b/pkg/api/handlers/compat/images_build.go index 700881926..e0c79e5a7 100644 --- a/pkg/api/handlers/compat/images_build.go +++ b/pkg/api/handlers/compat/images_build.go @@ -462,12 +462,17 @@ func BuildImage(w http.ResponseWriter, r *http.Request) { buildOptions.Timestamp = &ts } + var ( + imageID string + failed bool + ) + runCtx, cancel := context.WithCancel(context.Background()) - var imageID string go func() { defer cancel() imageID, _, err = runtime.Build(r.Context(), buildOptions, query.Dockerfile) if err != nil { + failed = true stderr.Write([]byte(err.Error() + "\n")) } }() @@ -483,8 +488,6 @@ func BuildImage(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") flush() - var failed bool - body := w.(io.Writer) if logrus.IsLevelEnabled(logrus.DebugLevel) { if v, found := os.LookupEnv("PODMAN_RETAIN_BUILD_ARTIFACT"); found { @@ -525,7 +528,6 @@ loop: } flush() case e := <-stderr.Chan(): - failed = true m.Error = string(e) if err := enc.Encode(m); err != nil { logrus.Warnf("Failed to json encode error %v", err) |