diff options
Diffstat (limited to 'client/go/jvm/container.go')
-rw-r--r-- | client/go/jvm/container.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/client/go/jvm/container.go b/client/go/jvm/container.go index a07ba684a03..384384da137 100644 --- a/client/go/jvm/container.go +++ b/client/go/jvm/container.go @@ -3,9 +3,60 @@ package jvm +import ( + "fmt" + "strings" + + "github.com/vespa-engine/vespa/client/go/prog" + "github.com/vespa-engine/vespa/client/go/trace" + "github.com/vespa-engine/vespa/client/go/util" +) + type Container interface { ServiceName() string ConfigId() string ArgForMain() string + JvmOptions() *Options Exec() } + +type containerBase struct { + configId string + serviceName string + jvmArgs *Options +} + +func (cb *containerBase) ServiceName() string { + return cb.serviceName +} + +func (cb *containerBase) JvmOptions() *Options { + return cb.jvmArgs +} + +func (cb *containerBase) ConfigId() string { + return cb.configId +} + +func readableEnv(env map[string]string) string { + var buf strings.Builder + for k, v := range env { + fmt.Fprintf(&buf, " %s=%s", k, v) + } + return buf.String() +} + +func (cb *containerBase) Exec() { + argv := make([]string, 0, 100) + argv = append(argv, "java") + for _, x := range cb.JvmOptions().Args() { + argv = append(argv, x) + } + p := prog.NewSpec(argv) + p.ConfigureNumaCtl() + cb.exportEnvSettings(p) + trace.Info("starting container; env:", readableEnv(p.Env)) + trace.Info("starting container; exec:", argv) + err := p.Run() + util.JustExitWith(err) +} |