mirror of
https://github.com/minio/minio.git
synced 2024-12-25 06:35:56 -05:00
1de3bd6911
Save http trace to a file instead of displaying it onto the console. the environment variable MINIO_HTTP_TRACE will be a filepath instead of a boolean. This to handle the scenario where both json and http tracing are turned on. In that case, both http trace and json output are displayed on the screen making the json not parsable. Loging this trace onto a file helps us avoid that scenario. Fixes #5263
88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
/*
|
|
* Minio Cloud Storage, (C) 2015, 2016, 2017 Minio, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
|
|
func handleSignals() {
|
|
// Custom exit function
|
|
exit := func(state bool) {
|
|
// If global profiler is set stop before we exit.
|
|
if globalProfiler != nil {
|
|
globalProfiler.Stop()
|
|
}
|
|
|
|
if state {
|
|
os.Exit(0)
|
|
}
|
|
|
|
os.Exit(1)
|
|
}
|
|
|
|
stopProcess := func() bool {
|
|
var err, oerr error
|
|
|
|
err = globalHTTPServer.Shutdown()
|
|
errorIf(err, "Unable to shutdown http server")
|
|
|
|
if objAPI := newObjectLayerFn(); objAPI != nil {
|
|
oerr = objAPI.Shutdown()
|
|
errorIf(oerr, "Unable to shutdown object layer")
|
|
}
|
|
|
|
return (err == nil && oerr == nil)
|
|
}
|
|
|
|
for {
|
|
select {
|
|
case err := <-globalHTTPServerErrorCh:
|
|
errorIf(err, "http server exited abnormally")
|
|
var oerr error
|
|
if objAPI := newObjectLayerFn(); objAPI != nil {
|
|
oerr = objAPI.Shutdown()
|
|
errorIf(oerr, "Unable to shutdown object layer")
|
|
}
|
|
|
|
exit(err == nil && oerr == nil)
|
|
case osSignal := <-globalOSSignalCh:
|
|
stopHTTPTrace()
|
|
log.Printf("Exiting on signal %v\n", osSignal)
|
|
exit(stopProcess())
|
|
case signal := <-globalServiceSignalCh:
|
|
switch signal {
|
|
case serviceStatus:
|
|
// Ignore this at the moment.
|
|
case serviceRestart:
|
|
log.Println("Restarting on service signal")
|
|
err := globalHTTPServer.Shutdown()
|
|
errorIf(err, "Unable to shutdown http server")
|
|
stopHTTPTrace()
|
|
rerr := restartProcess()
|
|
errorIf(rerr, "Unable to restart the server")
|
|
|
|
exit(err == nil && rerr == nil)
|
|
case serviceStop:
|
|
log.Println("Stopping on service signal")
|
|
stopHTTPTrace()
|
|
exit(stopProcess())
|
|
}
|
|
}
|
|
}
|
|
}
|