diff options
Diffstat (limited to 'defaults/src')
-rw-r--r-- | defaults/src/apps/printdefault/printdefault.cpp | 26 | ||||
-rw-r--r-- | defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java | 74 | ||||
-rw-r--r-- | defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java | 25 | ||||
-rw-r--r-- | defaults/src/vespa/defaults.cpp | 105 |
4 files changed, 174 insertions, 56 deletions
diff --git a/defaults/src/apps/printdefault/printdefault.cpp b/defaults/src/apps/printdefault/printdefault.cpp index 33c47dbcb20..be6b989fd70 100644 --- a/defaults/src/apps/printdefault/printdefault.cpp +++ b/defaults/src/apps/printdefault/printdefault.cpp @@ -4,6 +4,30 @@ #include <stdio.h> #include <string.h> +void dumpAllVars() { + printf("VESPA_HOME = '%s'\n", vespa::Defaults::vespaHome()); + std::string v = vespa::Defaults::underVespaHome("foo"); + printf("underVespaHome(foo) = '%s'\n", v.c_str()); + printf("VESPA_USER = '%s'\n", vespa::Defaults::vespaUser()); + printf("VESPA_HOSTNAME = '%s'\n", vespa::Defaults::vespaHostname()); + printf("web service port = %d\n", vespa::Defaults::vespaWebServicePort()); + printf("VESPA_PORT_BASE = %d\n", vespa::Defaults::vespaPortBase()); + printf("config server rpc port = %d\n", vespa::Defaults::vespaConfigServerRpcPort()); + size_t count = 0; + for (std::string vv : vespa::Defaults::vespaConfigServerHosts()) { + ++count; + printf("config server host %zu = '%s'\n", count, vv.c_str()); + } + count = 0; + for (std::string vv : vespa::Defaults::vespaConfigServerRestUrls()) { + ++count; + printf("config server rest URL %zu = '%s'\n", count, vv.c_str()); + } + v = vespa::Defaults::vespaConfigProxyRpcAddr(); + printf("config proxy RPC addr = '%s'\n", v.c_str()); + printf("vespa version = '%s'\n", V_TAG_COMPONENT); +} + int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <variable>\n", argv[0]); @@ -15,6 +39,8 @@ int main(int argc, char **argv) { } if (strcmp(argv[1], "home") == 0) { printf("%s\n", vespa::Defaults::vespaHome()); + } else if (strcmp(argv[1], "everything") == 0) { + dumpAllVars(); } else if (strcmp(argv[1], "user") == 0) { printf("%s\n", vespa::Defaults::vespaUser()); } else if (strcmp(argv[1], "hostname") == 0) { diff --git a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java index af92a183443..0fce5d654fb 100644 --- a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java +++ b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java @@ -27,20 +27,25 @@ public class Defaults { private final String vespaHost; private final int vespaWebServicePort; private final int vespaPortBase; + private final int vespaPortConfigServerRpc; + private final int vespaPortConfigServerHttp; + private final int vespaPortConfigProxyRpc; private Defaults() { - vespaHome = findVespaHome(); - vespaUser = findVespaUser(); - vespaHost = findVespaHostname(); - vespaWebServicePort = findVespaWebServicePort(); - vespaPortBase = 19000; // TODO + vespaHome = findVespaHome("/opt/vespa"); + vespaUser = findVespaUser("vespa"); + vespaHost = findVespaHostname("localhost"); + vespaWebServicePort = findWebServicePort(8080); + vespaPortBase = findVespaPortBase(19000); + vespaPortConfigServerRpc = findConfigServerPort(vespaPortBase + 70); + vespaPortConfigServerHttp = vespaPortConfigServerRpc + 1; + vespaPortConfigProxyRpc = findConfigProxyPort(vespaPortBase + 90); } - - static private String findVespaHome() { + static private String findVespaHome(String defHome) { Optional<String> vespaHomeEnv = Optional.ofNullable(System.getenv("VESPA_HOME")); if ( ! vespaHomeEnv.isPresent() || vespaHomeEnv.get().trim().isEmpty()) { - log.info("VESPA_HOME not set, using /opt/vespa"); - return "/opt/vespa"; + log.info("VESPA_HOME not set, using " + defHome); + return defHome; } String vespaHome = vespaHomeEnv.get().trim(); if (vespaHome.endsWith("/")) { @@ -50,38 +55,50 @@ public class Defaults { return vespaHome; } - static private String findVespaHostname() { + static private String findVespaHostname(String defHost) { Optional<String> vespaHostEnv = Optional.ofNullable(System.getenv("VESPA_HOSTNAME")); if (vespaHostEnv.isPresent() && ! vespaHostEnv.get().trim().isEmpty()) { return vespaHostEnv.get().trim(); } - return "localhost"; + return defHost; } - static private String findVespaUser() { + static private String findVespaUser(String defUser) { Optional<String> vespaUserEnv = Optional.ofNullable(System.getenv("VESPA_USER")); if (! vespaUserEnv.isPresent()) { - log.fine("VESPA_USER not set, using vespa"); - return "vespa"; + log.fine("VESPA_USER not set, using "+defUser); + return defUser; } return vespaUserEnv.get().trim(); } - static private int findVespaWebServicePort() { - Optional<String> vespaWebServicePortString = Optional.ofNullable(System.getenv("VESPA_WEB_SERVICE_PORT")); - if ( ! vespaWebServicePortString.isPresent() || vespaWebServicePortString.get().trim().isEmpty()) { - log.info("VESPA_WEB_SERVICE_PORT not set, using 8080"); - return 8080; + static private int findPort(String varName, int defaultPort) { + Optional<String> port = Optional.ofNullable(System.getenv(varName)); + if ( ! port.isPresent() || port.get().trim().isEmpty()) { + log.fine("" + varName + " not set, using " + defaultPort); + return defaultPort; } try { - return Integer.parseInt(vespaWebServicePortString.get()); - } - catch (NumberFormatException e) { - throw new IllegalArgumentException("VESPA_WEB_SERVICE_PORT must be an integer, was '" + - vespaWebServicePortString.get() + "'"); + return Integer.parseInt(port.get()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("must be an integer, was '" + + port.get() + "'"); } } + static private int findVespaPortBase(int defaultPort) { + return findPort("VESPA_PORT_BASE", defaultPort); + } + static private int findConfigServerPort(int defaultPort) { + return findPort("port_configserver_rpc", defaultPort); + } + static private int findConfigProxyPort(int defaultPort) { + return findPort("port_configproxy_rpc", defaultPort); + } + static private int findWebServicePort(int defaultPort) { + return findPort("VESPA_WEB_SERVICE_PORT", defaultPort); + } + /** * Get the username to own directories, files and processes * @return the vespa user name @@ -135,6 +152,15 @@ public class Defaults { */ public int vespaPortBase() { return vespaPortBase; } + /** @return port number used by cloud config server (for its RPC protocol) */ + public int vespaConfigServerRpcPort() { return vespaPortConfigServerRpc; } + + /** @return port number used by cloud config server (REST api on HTTP) */ + public int vespaConfigServerHttpPort() { return vespaPortConfigServerHttp; } + + /** @return port number used by config proxy server (RPC protocol) */ + public int vespaConfigProxyRpcPort() { return vespaPortConfigProxyRpc; } + /** Returns the defaults of this runtime environment */ public static Defaults getDefaults() { return defaults; } diff --git a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java index 75da8e1146f..07d3c39fc9c 100644 --- a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java +++ b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java @@ -22,4 +22,29 @@ public class DefaultsTestCase { assertEquals("vespa", Defaults.getDefaults().vespaUser()); } + @Test + public void testPortsArePositive() { + Defaults d = Defaults.getDefaults(); + assertEquals(true, d.vespaPortBase() > 0); + assertEquals(true, d.vespaWebServicePort() > 0); + assertEquals(true, d.vespaConfigServerRpcPort() > 0); + assertEquals(true, d.vespaConfigServerHttpPort() > 0); + assertEquals(true, d.vespaConfigProxyRpcPort() > 0); + } + + @Test + public void dumpAllVars() { + Defaults d = Defaults.getDefaults(); + System.out.println("vespa user = '" + d.vespaUser() + "'"); + System.out.println("vespa hostname = '" + d.vespaHostname() + "'"); + System.out.println("vespa home = '" + d.vespaHome() + "'"); + System.out.println("underVespaHome(foo) = '" + d.underVespaHome("foo") + "'"); + + System.out.println("web service port = '" + d.vespaWebServicePort() + "'"); + System.out.println("vespa port base = '" + d.vespaPortBase() + "'"); + System.out.println("config server RPC port = '" + d.vespaConfigServerRpcPort() + "'"); + System.out.println("config server HTTP port = '" + d.vespaConfigServerHttpPort() + "'"); + System.out.println("config proxy RPC port = '" + d.vespaConfigProxyRpcPort() + "'"); + } + } diff --git a/defaults/src/vespa/defaults.cpp b/defaults/src/vespa/defaults.cpp index dcb5e38584d..428dcfa6ce5 100644 --- a/defaults/src/vespa/defaults.cpp +++ b/defaults/src/vespa/defaults.cpp @@ -15,15 +15,15 @@ namespace { #define HOST_BUF_SZ 1024 -const char *defaultHome = "/opt/vespa"; -const char *defaultUser = "vespa"; -const char *defaultHost = "localhost"; -int defaultWebServicePort = 8080; -int defaultPortBase = 19000; -int defaultPortConfigServerRpc = 19070; -int defaultPortConfigServerHttp = 19071; -int defaultPortConfigProxyRpc = 19090; -const char *defaultConfigServers = "localhost"; +const char *defaultHome = 0; +const char *defaultUser = 0; +const char *defaultHost = 0; +int defaultWebServicePort = 0; +int defaultPortBase = 0; +int defaultPortConfigServerRpc = 0; +int defaultPortConfigServerHttp = 0; +int defaultPortConfigProxyRpc = 0; +const char *defaultConfigServers = 0; std::atomic<bool> initialized(false); @@ -42,8 +42,7 @@ long getNumFromEnv(const char *envName) return -1; } -void findDefaults() { - if (initialized) return; +const char *findVespaHome(const char *defHome) { const char *env = getenv("VESPA_HOME"); if (env != NULL && *env != '\0') { DIR *dp = NULL; @@ -51,47 +50,72 @@ void findDefaults() { dp = opendir(env); } if (dp != NULL) { - defaultHome = env; - // fprintf(stderr, "debug\tVESPA_HOME is '%s'\n", defaultHome); + // fprintf(stderr, "debug\tVESPA_HOME is '%s'\n", env); closedir(dp); + return env; } else { fprintf(stderr, "warning\tbad VESPA_HOME '%s' (ignored)\n", env); } } - env = getenv("VESPA_USER"); + return defHome; +} + +const char *findVespaUser(const char *defUser) { + const char *env = getenv("VESPA_USER"); if (env != NULL && *env != '\0') { if (getpwnam(env) == 0) { fprintf(stderr, "warning\tbad VESPA_USER '%s' (ignored)\n", env); } else { - defaultUser = env; + return env; } } - env = getenv("VESPA_HOSTNAME"); + return defUser; +} + +const char *findHostname(const char *defHost) { + const char *env = getenv("VESPA_HOSTNAME"); if (env != NULL && *env != '\0') { - defaultHost = env; + return env; } + return defHost; +} + +int findWebServicePort(int defPort) { long p = getNumFromEnv("VESPA_WEB_SERVICE_PORT"); if (p > 0) { // fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p); - defaultWebServicePort = p; + return p; } - p = getNumFromEnv("VESPA_PORT_BASE"); + return defPort; +} + +int findVespaPortBase(int defPort) { + long p = getNumFromEnv("VESPA_PORT_BASE"); if (p > 0) { // fprintf(stderr, "debug\tdefault port base is '%ld'\n", p); - defaultPortBase = p; + return p; } - p = getNumFromEnv("port_configserver_rpc"); + return defPort; +} + +int findConfigServerPort(int defPort) { + long p = getNumFromEnv("port_configserver_rpc"); if (p > 0) { - defaultPortConfigServerRpc = p; - defaultPortConfigServerHttp = p+1; + return p; } - p = getNumFromEnv("port_configproxy_rpc"); + return defPort; +} + +int findConfigProxyPort(int defPort) { + long p = getNumFromEnv("port_configproxy_rpc"); if (p > 0) { - defaultPortConfigProxyRpc = p; - } else { - defaultPortConfigProxyRpc = defaultPortBase + 90; + return p; } - env = getenv("VESPA_CONFIGSERVERS"); + return defPort; +} + +const char *findConfigServers(const char *defServers) { + const char *env = getenv("VESPA_CONFIGSERVERS"); if (env == NULL || *env == '\0') { env = getenv("services__addr_configserver"); } @@ -103,14 +127,26 @@ void findDefaults() { } if (env != NULL && *env != '\0') { // fprintf(stderr, "debug\tdefault configserver(s) is '%s'\n", env); - defaultConfigServers = env; + return env; } - initialized = true; + return defServers; } -} +void findDefaults() { + if (initialized) return; -namespace vespa { + defaultHome = findVespaHome("/opt/vespa"); + defaultUser = findVespaUser("vespa"); + defaultHost = findHostname("localhost"); + defaultWebServicePort = findWebServicePort(8080); + defaultPortBase = findVespaPortBase(19000); + defaultPortConfigServerRpc = findConfigServerPort(defaultPortBase + 70); + defaultPortConfigServerHttp = defaultPortConfigServerRpc + 1; + defaultPortConfigProxyRpc = findConfigProxyPort(defaultPortBase + 90); + defaultConfigServers = findConfigServers("localhost"); + + initialized = true; +} std::string myPath(const char *argv0) { @@ -137,6 +173,10 @@ std::string myPath(const char *argv0) return argv0; } +} + +namespace vespa { + void Defaults::bootstrap(const char *argv0) { @@ -241,6 +281,7 @@ Defaults::vespaConfigServerHosts() int Defaults::vespaConfigServerRpcPort() { + findDefaults(); return defaultPortConfigServerRpc; } |