15954: Avoid doing concurrent bundle/passenger installs.
authorTom Clegg <tom@tomclegg.ca>
Wed, 19 Feb 2020 15:25:08 +0000 (10:25 -0500)
committerTom Clegg <tom@tomclegg.ca>
Thu, 20 Feb 2020 19:25:03 +0000 (14:25 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

lib/boot/passenger.go

index 61f97df5269ef8c70eedcc432b005a408a60e4e5..31b4afaadf26924f35660b5708e248cf70ea29f3 100644 (file)
@@ -11,10 +11,15 @@ import (
        "os"
        "path/filepath"
        "strings"
+       "sync"
 
        "git.arvados.org/arvados.git/sdk/go/arvados"
 )
 
+// Don't trust "passenger-config" (or "bundle install") to handle
+// concurrent installs.
+var passengerInstallMutex sync.Mutex
+
 type installPassenger struct {
        src     string
        depends []bootTask
@@ -25,6 +30,9 @@ func (runner installPassenger) String() string {
 }
 
 func (runner installPassenger) Run(ctx context.Context, fail func(error), boot *Booter) error {
+       passengerInstallMutex.Lock()
+       defer passengerInstallMutex.Unlock()
+
        err := boot.wait(ctx, runner.depends...)
        if err != nil {
                return err