diff --git a/Dockerfile-server b/Dockerfile-server index 8dd2dd2..4d0898e 100644 --- a/Dockerfile-server +++ b/Dockerfile-server @@ -99,6 +99,7 @@ RUN chmod ug+x /usr/local/bin/runmqserver \ && chmod 0660 /run/termination-log # Always use port 1414 for MQ & 9157 for the metrics EXPOSE 1414 9157 9443 +ENV QMGRACEPERIOD=30 ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 AMQ_ADDITIONAL_JSON_LOG=1 LOG_FORMAT=basic USER $MQM_UID ENTRYPOINT ["runmqserver"] diff --git a/cmd/runmqserver/qmgr.go b/cmd/runmqserver/qmgr.go index d3faac3..ad4d1e3 100644 --- a/cmd/runmqserver/qmgr.go +++ b/cmd/runmqserver/qmgr.go @@ -173,17 +173,18 @@ func configureQueueManager() error { func stopQueueManager(name string) error { log.Println("Stopping queue manager") + qmGracePeriod := os.Getenv("QMGRACEPERIOD") isStandby, err := ready.IsRunningAsStandbyQM(name) if err != nil { log.Printf("Error getting status for queue manager %v: %v", name, err.Error()) return err } - args := []string{"-w", "-r", name} + args := []string{"-w", "-r", "-tp", qmGracePeriod, name} if os.Getenv("MQ_MULTI_INSTANCE") == "true" { if isStandby { args = []string{"-x", name} } else { - args = []string{"-s", "-w", "-r", name} + args = []string{"-s", "-w", "-r", "-tp", qmGracePeriod, name} } } out, rc, err := command.Run("endmqm", args...) diff --git a/test/docker/docker_api_test.go b/test/docker/docker_api_test.go index 4c48dca..2c2d976 100644 --- a/test/docker/docker_api_test.go +++ b/test/docker/docker_api_test.go @@ -75,6 +75,29 @@ func TestLicenseView(t *testing.T) { } } +//Start a container with qm grace set to x seconds +//Check that when the container is stopped that the command endmqm has option -tp and x +func TestEndMQMOpts(t *testing.T) { + t.Parallel() + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Env: []string{"LICENSE=accept", "QMGRACEPERIOD=27"}, + } + + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + waitForReady(t, cli, id) + killContainer(t, cli, id, "SIGTERM") + _, out := execContainer(t, cli, id, "mqm", []string{"bash", "-c", "ps -ef | grep 'endmqm -w -r -tp 27'"}) + t.Log(out) + if !strings.Contains(out, "endmqm -w -r -tp 27") { + t.Errorf("Expected endmqm options endmqm -w -r -tp 27; got \"%v\"", out) + } +} + // TestGoldenPath starts a queue manager successfully when metrics are enabled func TestGoldenPathWithMetrics(t *testing.T) { t.Parallel()