summaryrefslogtreecommitdiffstats
path: root/client/go/internal/admin/vespa-wrapper/configserver
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/internal/admin/vespa-wrapper/configserver')
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/check.go24
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/env.go31
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/fix_dirs_and_files.go27
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/logd.go25
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/runserver.go59
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/start.go86
-rw-r--r--client/go/internal/admin/vespa-wrapper/configserver/zk.go22
7 files changed, 274 insertions, 0 deletions
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/check.go b/client/go/internal/admin/vespa-wrapper/configserver/check.go
new file mode 100644
index 00000000000..a0248dd128f
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/check.go
@@ -0,0 +1,24 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "fmt"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/defaults"
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+)
+
+func checkIsConfigserver(myname string) {
+ onlyHosts := defaults.VespaConfigserverHosts()
+ for _, hn := range onlyHosts {
+ if hn == "localhost" || hn == myname {
+ trace.Debug("should run configserver:", hn)
+ return
+ }
+ }
+ trace.Warning("only these hosts should run a config server:", onlyHosts)
+ util.JustExitMsg(fmt.Sprintf("this host [%s] should not run a config server", myname))
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/env.go b/client/go/internal/admin/vespa-wrapper/configserver/env.go
new file mode 100644
index 00000000000..1c4c33f5628
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/env.go
@@ -0,0 +1,31 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/envvars"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+)
+
+func exportSettings(vespaHome string) {
+ vlt := fmt.Sprintf("file:%s/logs/vespa/vespa.log", vespaHome)
+ lcd := fmt.Sprintf("%s/var/db/vespa/logcontrol", vespaHome)
+ lcf := fmt.Sprintf("%s/configserver.logcontrol", lcd)
+ dlp := fmt.Sprintf("%s/lib64", vespaHome)
+ app := fmt.Sprintf("%s/conf/configserver-app", vespaHome)
+ os.Setenv(envvars.VESPA_LOG_TARGET, vlt)
+ os.Setenv(envvars.VESPA_LOG_CONTROL_DIR, lcd)
+ os.Setenv(envvars.VESPA_LOG_CONTROL_FILE, lcf)
+ os.Setenv(envvars.VESPA_SERVICE_NAME, "configserver")
+ os.Setenv(envvars.LD_LIBRARY_PATH, dlp)
+ os.Setenv(envvars.JAVAVM_LD_PRELOAD, "")
+ os.Setenv(envvars.LD_PRELOAD, "")
+ os.Setenv(envvars.STANDALONE_JDISC_APP_LOCATION, app)
+ os.Setenv(envvars.STANDALONE_JDISC_DEPLOYMENT_PROFILE, "configserver")
+ os.Setenv(envvars.MALLOC_ARENA_MAX, "1")
+ util.OptionallyReduceTimerFrequency()
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/fix_dirs_and_files.go b/client/go/internal/admin/vespa-wrapper/configserver/fix_dirs_and_files.go
new file mode 100644
index 00000000000..8410d3f657c
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/fix_dirs_and_files.go
@@ -0,0 +1,27 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+ "github.com/vespa-engine/vespa/client/go/internal/vespa"
+)
+
+func makeFixSpec() util.FixSpec {
+ vespaUid, vespaGid := vespa.FindVespaUidAndGid()
+ return util.FixSpec{
+ UserId: vespaUid,
+ GroupId: vespaGid,
+ DirMode: 0755,
+ FileMode: 0644,
+ }
+}
+
+func fixDirsAndFiles(fixSpec util.FixSpec) {
+ fixSpec.FixDir("var/zookeeper")
+ fixSpec.FixDir("var/zookeeper/conf")
+ fixSpec.FixDir("var/zookeeper/version-2")
+ fixSpec.FixFile("var/zookeeper/conf/zookeeper.cfg")
+ fixSpec.FixFile("var/zookeeper/myid")
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/logd.go b/client/go/internal/admin/vespa-wrapper/configserver/logd.go
new file mode 100644
index 00000000000..39a2100b20f
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/logd.go
@@ -0,0 +1,25 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "os"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/envvars"
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+)
+
+func maybeStartLogd() {
+ v1 := os.Getenv(envvars.CLOUDCONFIG_SERVER_MULTITENANT)
+ v2 := os.Getenv(envvars.VESPA_CONFIGSERVER_MULTITENANT)
+ if v1 == "true" || v2 == "true" {
+ backticks := util.BackTicksForwardStderr
+ out, err := backticks.Run("libexec/vespa/start-logd")
+ if err != nil {
+ panic(err)
+ }
+ trace.Info(out)
+ }
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/runserver.go b/client/go/internal/admin/vespa-wrapper/configserver/runserver.go
new file mode 100644
index 00000000000..bef50009d8d
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/runserver.go
@@ -0,0 +1,59 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "fmt"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/defaults"
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+)
+
+const (
+ PROG_NAME = "vespa-runserver"
+)
+
+type RunServer struct {
+ ServiceName string
+ Args []string
+}
+
+func (rs *RunServer) PidFile() string {
+ varRunDir := defaults.UnderVespaHome("var/run")
+ return fmt.Sprintf("%s/%s.pid", varRunDir, rs.ServiceName)
+}
+
+func (rs *RunServer) ProgPath() string {
+ p := fmt.Sprintf("%s/bin64/%s", defaults.VespaHome(), PROG_NAME)
+ if util.IsExecutableFile(p) {
+ return p
+ }
+ p = fmt.Sprintf("%s/bin/%s", defaults.VespaHome(), PROG_NAME)
+ if util.IsExecutableFile(p) {
+ return p
+ }
+ panic(fmt.Errorf("not an executable file: %s", p))
+}
+
+func (rs *RunServer) WouldRun() bool {
+ backticks := util.BackTicksForwardStderr
+ out, err := backticks.Run(rs.ProgPath(), "-s", rs.ServiceName, "-p", rs.PidFile(), "-W")
+ trace.Trace("output from -W:", out, "error:", err)
+ return err == nil
+}
+
+func (rs *RunServer) Exec(prog string) {
+ argv := util.ArrayList[string]{
+ PROG_NAME,
+ "-s", rs.ServiceName,
+ "-r", "30",
+ "-p", rs.PidFile(),
+ "--",
+ prog,
+ }
+ argv.AppendAll(rs.Args...)
+ err := util.Execvp(rs.ProgPath(), argv)
+ util.JustExitWith(err)
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/start.go b/client/go/internal/admin/vespa-wrapper/configserver/start.go
new file mode 100644
index 00000000000..e2ea6a11357
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/start.go
@@ -0,0 +1,86 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "os"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/envvars"
+ "github.com/vespa-engine/vespa/client/go/internal/admin/jvm"
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+ "github.com/vespa-engine/vespa/client/go/internal/vespa"
+)
+
+const (
+ SERVICE_NAME = "configserver"
+)
+
+func commonPreChecks() (veHome string) {
+ if doTrace := os.Getenv(envvars.TRACE_JVM_STARTUP); doTrace != "" {
+ trace.AdjustVerbosity(1)
+ }
+ if doDebug := os.Getenv(envvars.DEBUG_JVM_STARTUP); doDebug != "" {
+ trace.AdjustVerbosity(2)
+ }
+ _ = vespa.FindAndVerifyVespaHome()
+ err := vespa.LoadDefaultEnv()
+ if err != nil {
+ panic(err)
+ }
+ veHome = vespa.FindAndVerifyVespaHome()
+ veHost, e := vespa.FindOurHostname()
+ if e != nil {
+ trace.Warning("could not detect hostname:", err, "; using fallback:", veHost)
+ }
+ checkIsConfigserver(veHost)
+ e = os.Chdir(veHome)
+ if e != nil {
+ util.JustExitWith(e)
+ }
+ return
+}
+
+func JustStartConfigserver() int {
+ vespaHome := commonPreChecks()
+ vespa.CheckCorrectUser()
+ util.TuneResourceLimits()
+ util.TuneLogging(SERVICE_NAME, "com.google.api.client.http.HttpTransport", "config=off")
+ exportSettings(vespaHome)
+ removeStaleZkLocks(vespaHome)
+ c := jvm.NewStandaloneContainer(SERVICE_NAME)
+ jvmOpts := c.JvmOptions()
+ if extra := os.Getenv(envvars.VESPA_CONFIGSERVER_JVMARGS); extra != "" {
+ jvmOpts.AddJvmArgsFromString(extra)
+ }
+ minFallback := jvm.MegaBytesOfMemory(128)
+ maxFallback := jvm.MegaBytesOfMemory(2048)
+ jvmOpts.AddDefaultHeapSizeArgs(minFallback, maxFallback)
+ c.Exec()
+ // unreachable:
+ return 1
+}
+
+func runConfigserverWithRunserver() int {
+ commonPreChecks()
+ vespa.CheckCorrectUser()
+ rs := RunServer{
+ ServiceName: SERVICE_NAME,
+ Args: []string{"just-start-configserver"},
+ }
+ rs.Exec("libexec/vespa/vespa-wrapper")
+ return 1
+}
+
+func StartConfigserverEtc() int {
+ vespaHome := commonPreChecks()
+ vespa.RunPreStart()
+ util.TuneResourceLimits()
+ fixSpec := makeFixSpec()
+ fixDirsAndFiles(fixSpec)
+ exportSettings(vespaHome)
+ vespa.MaybeSwitchUser("vespa-start-configserver")
+ maybeStartLogd()
+ return runConfigserverWithRunserver()
+}
diff --git a/client/go/internal/admin/vespa-wrapper/configserver/zk.go b/client/go/internal/admin/vespa-wrapper/configserver/zk.go
new file mode 100644
index 00000000000..91ddf522848
--- /dev/null
+++ b/client/go/internal/admin/vespa-wrapper/configserver/zk.go
@@ -0,0 +1,22 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "fmt"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+ "github.com/vespa-engine/vespa/client/go/internal/util"
+)
+
+const (
+ ZOOKEEPER_LOG_FILE_PREFIX = "logs/vespa/zookeeper.configserver"
+)
+
+func removeStaleZkLocks(vespaHome string) {
+ backticks := util.BackTicksIgnoreStderr
+ cmd := fmt.Sprintf("rm -f '%s/%s'*lck", vespaHome, ZOOKEEPER_LOG_FILE_PREFIX)
+ trace.Trace("cleaning locks:", cmd)
+ backticks.Run("/bin/sh", "-c", cmd)
+}