allow ctrl+c to be consistent at early startup (#10435)

fixes #10431
This commit is contained in:
Harshavardhana
2020-09-08 09:10:55 -07:00
committed by GitHub
parent 86a3319d41
commit 96997d2b21
4 changed files with 36 additions and 37 deletions

View File

@@ -213,14 +213,17 @@ func initSafeMode(ctx context.Context, newObject ObjectLayer) (err error) {
return
}
// If context was canceled
if errors.Is(err, context.Canceled) {
return
}
// Prints the formatted startup message in safe mode operation.
// Drops-into safe mode where users need to now manually recover
// the server.
printStartupSafeModeMessage(getAPIEndpoints(), err)
// Initialization returned error reaching safe mode and
// not proceeding waiting for admin action.
handleSignals()
<-globalOSSignalCh
}
}(txnLk)
@@ -276,7 +279,6 @@ func initSafeMode(ctx context.Context, newObject ObjectLayer) (err error) {
// One of these retriable errors shall be retried.
if errors.Is(err, errDiskNotFound) ||
errors.Is(err, errConfigNotFound) ||
errors.Is(err, context.Canceled) ||
errors.Is(err, context.DeadlineExceeded) ||
errors.As(err, &rquorum) ||
errors.As(err, &wquorum) ||
@@ -384,13 +386,15 @@ func startBackgroundOps(ctx context.Context, objAPI ObjectLayer) {
// serverMain handler called for 'minio server' command.
func serverMain(ctx *cli.Context) {
signal.Notify(globalOSSignalCh, os.Interrupt, syscall.SIGTERM)
go handleSignals()
setDefaultProfilerRates()
// Initialize globalConsoleSys system
globalConsoleSys = NewConsoleLogger(GlobalContext)
signal.Notify(globalOSSignalCh, os.Interrupt, syscall.SIGTERM)
// Handle all server command args.
serverHandleCmdArgs(ctx)
@@ -444,6 +448,9 @@ func serverMain(ctx *cli.Context) {
globalBackgroundHealState = newHealState()
}
// Initialize all sub-systems
newAllSubsystems()
// Configure server.
handler, err := configureServerHandler(globalEndpoints)
if err != nil {
@@ -491,14 +498,14 @@ func serverMain(ctx *cli.Context) {
for {
// Additionally in distributed setup, validate the setup and configuration.
err := verifyServerSystemConfig(GlobalContext, globalEndpoints)
if err == nil {
if err == nil || errors.Is(err, context.Canceled) {
break
}
logger.LogIf(GlobalContext, err, "Unable to initialize distributed setup, retrying.. after 5 seconds")
select {
case <-GlobalContext.Done():
return
case <-time.After(5 * time.Second):
case <-time.After(500 * time.Millisecond):
}
}
}
@@ -516,8 +523,6 @@ func serverMain(ctx *cli.Context) {
globalObjectAPI = newObject
globalObjLayerMutex.Unlock()
newAllSubsystems()
go startBackgroundOps(GlobalContext, newObject)
logger.FatalIf(initSafeMode(GlobalContext, newObject), "Unable to initialize server switching into safe-mode")
@@ -549,7 +554,7 @@ func serverMain(ctx *cli.Context) {
logger.StartupMessage(color.RedBold(msg))
}
handleSignals()
<-globalOSSignalCh
}
// Initialize object layer with the supplied disks, objectLayer is nil upon any error.