Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer (GitLab) <jacob@gitlab.com>2018-04-23 18:00:24 +0300
committerNick Thomas <nick@gitlab.com>2018-04-23 18:00:24 +0300
commitfd06fc02844a15bfaa78502f6b7c36588f66cd42 (patch)
tree65bf11c76d4ab6b09f7cbf9dee088e980bcec7c9 /daemon.go
parentc2fb2a8f8aa79e390b920f7b7c061e2951e69566 (diff)
Add gRPC admin health check
Diffstat (limited to 'daemon.go')
-rw-r--r--daemon.go57
1 files changed, 32 insertions, 25 deletions
diff --git a/daemon.go b/daemon.go
index 9a732709..d06f9392 100644
--- a/daemon.go
+++ b/daemon.go
@@ -153,14 +153,7 @@ func daemonChroot(cmd *exec.Cmd) (*jail.Jail, error) {
return cage, nil
}
-func daemonize(config appConfig, uid, gid uint) {
- var err error
- defer func() {
- if err != nil {
- fatal(err)
- }
- }()
-
+func daemonize(config appConfig, uid, gid uint) error {
log.WithFields(log.Fields{
"uid": uid,
"gid": gid,
@@ -168,7 +161,7 @@ func daemonize(config appConfig, uid, gid uint) {
cmd, err := daemonReexec(uid, gid, daemonRunProgram)
if err != nil {
- return
+ return err
}
defer killProcess(cmd)
@@ -176,41 +169,35 @@ func daemonize(config appConfig, uid, gid uint) {
chroot, err := daemonChroot(cmd)
if err != nil {
log.WithError(err).Print("chroot failed")
- return
+ return err
}
defer chroot.Dispose()
// Create a pipe to pass the configuration
configReader, configWriter, err := os.Pipe()
if err != nil {
- return
+ return err
}
defer configWriter.Close()
cmd.ExtraFiles = append(cmd.ExtraFiles, configReader)
- // Create a new file and store the FD for each listener
- daemonUpdateFds(cmd, config.ListenHTTP)
- daemonUpdateFds(cmd, config.ListenHTTPS)
- daemonUpdateFds(cmd, config.ListenProxy)
- if config.ListenMetrics != 0 {
- config.ListenMetrics = daemonUpdateFd(cmd, config.ListenMetrics)
- }
+ updateFds(&config, cmd)
// Start the process
- if err = cmd.Start(); err != nil {
+ if err := cmd.Start(); err != nil {
log.WithError(err).Error("start failed")
- return
+ return err
}
//detach binded mountpoints
- if err = chroot.LazyUnbind(); err != nil {
+ if err := chroot.LazyUnbind(); err != nil {
log.WithError(err).Print("chroot lazy umount failed")
- return
+ return err
}
// Write the configuration
- if err = json.NewEncoder(configWriter).Encode(config); err != nil {
- return
+ if err := json.NewEncoder(configWriter).Encode(config); err != nil {
+ return err
}
configWriter.Close()
@@ -218,5 +205,25 @@ func daemonize(config appConfig, uid, gid uint) {
passSignals(cmd)
// Wait for process to exit
- err = cmd.Wait()
+ return cmd.Wait()
+}
+
+func updateFds(config *appConfig, cmd *exec.Cmd) {
+ for _, fds := range [][]uintptr{
+ config.ListenHTTP,
+ config.ListenHTTPS,
+ config.ListenProxy,
+ } {
+ daemonUpdateFds(cmd, fds)
+ }
+
+ for _, fdPtr := range []*uintptr{
+ &config.ListenMetrics,
+ &config.ListenAdminUnix,
+ &config.ListenAdminHTTPS,
+ } {
+ if *fdPtr != 0 {
+ *fdPtr = daemonUpdateFd(cmd, *fdPtr)
+ }
+ }
}