summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2021-04-14 12:02:37 -0400
committerDaniel J Walsh <dwalsh@redhat.com>2021-04-14 12:05:59 -0400
commit4347a62e08b2ffabd07f767bc534a8cb2f5cb0aa (patch)
treeb43eec2993b0c334e140076f8841c96000b9f7c4
parent4ee203dde7c9e8de2484f00c7f251c0f32ed0ad2 (diff)
downloadpodman-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>
-rw-r--r--pkg/api/handlers/compat/images_build.go10
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)