Browse Source

Graceful exits added

Siva 1 year ago
parent
commit
319a0ae2bf
3 changed files with 14 additions and 2 deletions
  1. 3 0
      command/agent/agent.go
  2. 6 0
      service_os/service.go
  3. 5 2
      service_os/service_windows.go

+ 3 - 0
command/agent/agent.go

@@ -21,6 +21,7 @@ import (
 	"github.com/hashicorp/consul/command/flags"
 	"github.com/hashicorp/consul/lib"
 	"github.com/hashicorp/consul/logger"
+	"github.com/hashicorp/consul/service_os"
 	"github.com/hashicorp/go-checkpoint"
 	multierror "github.com/hashicorp/go-multierror"
 	"github.com/hashicorp/logutils"
@@ -411,6 +412,8 @@ func (c *cmd) run(args []string) int {
 		case ch := <-agent.ReloadCh():
 			sig = syscall.SIGHUP
 			reloadErrCh = ch
+		case <-service_os.Shutdown_Channel():
+			sig = os.Interrupt
 		case <-c.shutdownCh:
 			sig = os.Interrupt
 		case err := <-agent.RetryJoinCh():

+ 6 - 0
service_os/service.go

@@ -1 +1,7 @@
 package service_os
+
+var chanGraceExit = make(chan int)
+
+func Shutdown_Channel() <-chan int {
+	return chanGraceExit
+}

+ 5 - 2
service_os/service_windows.go

@@ -3,11 +3,12 @@
 package service_os
 
 import (
-	"os"
 	wsvc "golang.org/x/sys/windows/svc"
+	"os"
+	"time"
 )
 
-type serviceWindows struct {}
+type serviceWindows struct{}
 
 func init() {
 	interactive, err := wsvc.IsAnInteractiveSession()
@@ -19,6 +20,7 @@ func init() {
 	}
 	go func() {
 		_ = wsvc.Run("", serviceWindows{})
+		time.Sleep(4 * time.Second)
 		os.Exit(0)
 	}()
 }
@@ -34,6 +36,7 @@ func (serviceWindows) Execute(args []string, r <-chan wsvc.ChangeRequest, s chan
 		case wsvc.Interrogate:
 			s <- c.CurrentStatus
 		case wsvc.Stop, wsvc.Shutdown:
+			chanGraceExit <- 1
 			s <- wsvc.Status{State: wsvc.StopPending}
 			return false, 0
 		}