summaryrefslogtreecommitdiffstats
path: root/client/go/jvm/container.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/jvm/container.go')
-rw-r--r--client/go/jvm/container.go51
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)
+}