projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
18348: Add ClusterID field to service log entries.
[arvados.git]
/
lib
/
service
/
cmd.go
diff --git
a/lib/service/cmd.go
b/lib/service/cmd.go
index 7f2f78ee9a9f7224aac4aacba94148497f292a5e..dbafc89fe4792d90b30e5fa70ec18b43a0c5107d 100644
(file)
--- a/
lib/service/cmd.go
+++ b/
lib/service/cmd.go
@@
-2,7
+2,7
@@
//
// SPDX-License-Identifier: Apache-2.0
//
// SPDX-License-Identifier: Apache-2.0
-//
p
ackage service provides a cmd.Handler that brings up a system service.
+//
P
ackage service provides a cmd.Handler that brings up a system service.
package service
import (
package service
import (
@@
-12,6
+12,7
@@
import (
"io"
"net"
"net/http"
"io"
"net"
"net/http"
+ _ "net/http/pprof"
"net/url"
"os"
"strings"
"net/url"
"os"
"strings"
@@
-29,6
+30,7
@@
import (
type Handler interface {
http.Handler
CheckHealth() error
type Handler interface {
http.Handler
CheckHealth() error
+ Done() <-chan struct{}
}
type NewHandlerFunc func(_ context.Context, _ *arvados.Cluster, token string, registry *prometheus.Registry) Handler
}
type NewHandlerFunc func(_ context.Context, _ *arvados.Cluster, token string, registry *prometheus.Registry) Handler
@@
-69,16
+71,19
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
loader := config.NewLoader(stdin, log)
loader.SetupFlags(flags)
versionFlag := flags.Bool("version", false, "Write version information to stdout and exit 0")
loader := config.NewLoader(stdin, log)
loader.SetupFlags(flags)
versionFlag := flags.Bool("version", false, "Write version information to stdout and exit 0")
- err = flags.Parse(args)
- if err == flag.ErrHelp {
- err = nil
- return 0
- } else if err != nil {
- return 2
+ pprofAddr := flags.String("pprof", "", "Serve Go profile data at `[addr]:port`")
+ if ok, code := cmd.ParseFlags(flags, prog, args, "", stderr); !ok {
+ return code
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
}
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
}
+ if *pprofAddr != "" {
+ go func() {
+ log.Println(http.ListenAndServe(*pprofAddr, nil))
+ }()
+ }
+
if strings.HasSuffix(prog, "controller") {
// Some config-loader checks try to make API calls via
// controller. Those can't be expected to work if this
if strings.HasSuffix(prog, "controller") {
// Some config-loader checks try to make API calls via
// controller. Those can't be expected to work if this
@@
-100,7
+105,8
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
// logger with a new one according to the logging config.
log = ctxlog.New(stderr, cluster.SystemLogs.Format, cluster.SystemLogs.LogLevel)
logger := log.WithFields(logrus.Fields{
// logger with a new one according to the logging config.
log = ctxlog.New(stderr, cluster.SystemLogs.Format, cluster.SystemLogs.LogLevel)
logger := log.WithFields(logrus.Fields{
- "PID": os.Getpid(),
+ "PID": os.Getpid(),
+ "ClusterID": cluster.ClusterID,
})
ctx := ctxlog.Context(c.ctx, logger)
})
ctx := ctxlog.Context(c.ctx, logger)
@@
-117,13
+123,14
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
}
instrumented := httpserver.Instrument(reg, log,
}
instrumented := httpserver.Instrument(reg, log,
- httpserver.HandlerWith
Context(ctx
,
+ httpserver.HandlerWith
Deadline(cluster.API.RequestTimeout.Duration()
,
httpserver.AddRequestIDs(
httpserver.LogRequests(
httpserver.NewRequestLimiter(cluster.API.MaxConcurrentRequests, handler, reg)))))
srv := &httpserver.Server{
Server: http.Server{
httpserver.AddRequestIDs(
httpserver.LogRequests(
httpserver.NewRequestLimiter(cluster.API.MaxConcurrentRequests, handler, reg)))))
srv := &httpserver.Server{
Server: http.Server{
- Handler: instrumented.ServeAPI(cluster.ManagementToken, instrumented),
+ Handler: instrumented.ServeAPI(cluster.ManagementToken, instrumented),
+ BaseContext: func(net.Listener) context.Context { return ctx },
},
Addr: listenURL.Host,
}
},
Addr: listenURL.Host,
}
@@
-148,9
+155,15
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
logger.WithError(err).Errorf("error notifying init daemon")
}
go func() {
logger.WithError(err).Errorf("error notifying init daemon")
}
go func() {
+ // Shut down server if caller cancels context
<-ctx.Done()
srv.Close()
}()
<-ctx.Done()
srv.Close()
}()
+ go func() {
+ // Shut down server if handler dies
+ <-handler.Done()
+ srv.Close()
+ }()
err = srv.Wait()
if err != nil {
return 1
err = srv.Wait()
if err != nil {
return 1
@@
-158,8
+171,6
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
return 0
}
return 0
}
-const rfc3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"
-
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.FieldLogger) (arvados.URL, error) {
svc, ok := svcs.Map()[prog]
if !ok {
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.FieldLogger) (arvados.URL, error) {
svc, ok := svcs.Map()[prog]
if !ok {
@@
-170,6
+181,9
@@
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.F
} else if url, err := url.Parse(want); err != nil {
return arvados.URL{}, fmt.Errorf("$ARVADOS_SERVICE_INTERNAL_URL (%q): %s", want, err)
} else {
} else if url, err := url.Parse(want); err != nil {
return arvados.URL{}, fmt.Errorf("$ARVADOS_SERVICE_INTERNAL_URL (%q): %s", want, err)
} else {
+ if url.Path == "" {
+ url.Path = "/"
+ }
return arvados.URL(*url), nil
}
return arvados.URL(*url), nil
}