summaryrefslogtreecommitdiffstats
path: root/defaults/src/vespa/defaults.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'defaults/src/vespa/defaults.cpp')
-rw-r--r--defaults/src/vespa/defaults.cpp172
1 files changed, 152 insertions, 20 deletions
diff --git a/defaults/src/vespa/defaults.cpp b/defaults/src/vespa/defaults.cpp
index ab76cd06175..653a853d8b1 100644
--- a/defaults/src/vespa/defaults.cpp
+++ b/defaults/src/vespa/defaults.cpp
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <string.h>
#include <string>
+#include <vector>
#include <unistd.h>
#include <atomic>
@@ -15,12 +16,32 @@ const char *defaultHome = "/opt/vespa/";
char computedHome[PATH_MAX];
int defaultWebServicePort = 8080;
int defaultPortBase = 19000;
+int defaultPortConfigServerRpc = 19070;
+int defaultPortConfigServerHttp = 19071;
+int defaultPortConfigProxyRpc = 19090;
+const char *defaultConfigServers = "localhost";
+
std::atomic<bool> initialized(false);
+long getNumFromEnv(const char *envName)
+{
+ const char *env = getenv(envName);
+ if (env != nullptr && *env != '\0') {
+ char *endptr = nullptr;
+ long num = strtol(env, &endptr, 10);
+ if (endptr != nullptr && *endptr == '\0') {
+ return num;
+ }
+ fprintf(stderr, "warning\tbad %s '%s' (ignored)\n",
+ envName, env);
+ }
+ return -1;
+}
+
void findDefaults() {
if (initialized) return;
const char *env = getenv("VESPA_HOME");
- if (env != NULL) {
+ if (env != NULL && *env != '\0') {
DIR *dp = NULL;
if (*env == '/') {
dp = opendir(env);
@@ -42,27 +63,34 @@ void findDefaults() {
fprintf(stderr, "warning\tbad VESPA_HOME '%s' (ignored)\n", env);
}
}
- env = getenv("VESPA_WEB_SERVICE_PORT");
- if (env != NULL && *env != '\0') {
- char *endptr = NULL;
- long p = strtol(env, &endptr, 10);
- if (endptr != NULL && *endptr == '\0') {
- defaultWebServicePort = p;
- // fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p);
- } else {
- fprintf(stderr, "warning\tbad VESPA_WEB_SERVICE_PORT '%s' (ignored)\n", env);
- }
+ long p = getNumFromEnv("VESPA_WEB_SERVICE_PORT");
+ if (p > 0) {
+ // fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p);
+ defaultWebServicePort = p;
+ }
+ p = getNumFromEnv("VESPA_PORT_BASE");
+ if (p > 0) {
+ // fprintf(stderr, "debug\tdefault port base is '%ld'\n", p);
+ defaultPortBase = p;
+ }
+ p = getNumFromEnv("port_configserver_rpc");
+ if (p > 0) {
+ defaultPortConfigServerRpc = p;
+ defaultPortConfigServerHttp = p+1;
+ }
+ p = getNumFromEnv("port_configproxy_rpc");
+ if (p > 0) {
+ defaultPortConfigProxyRpc = p;
+ } else {
+ defaultPortConfigProxyRpc = defaultPortBase + 90;
+ }
+ env = getenv("VESPA_CONFIGSERVERS");
+ if (env == NULL || *env == '\0') {
+ env = getenv("addr_configserver");
}
- env = getenv("VESPA_PORT_BASE");
if (env != NULL && *env != '\0') {
- char *endptr = NULL;
- long p = strtol(env, &endptr, 10);
- if (endptr != NULL && *endptr == '\0') {
- defaultPortBase = p;
- // fprintf(stderr, "debug\tdefault port base is '%ld'\n", p);
- } else {
- fprintf(stderr, "warning\tbad VESPA_PORT_BASE '%s' (ignored)\n", env);
- }
+ // fprintf(stderr, "debug\tdefault configserver(s) is '%s'\n", env);
+ defaultConfigServers = env;
}
initialized = true;
}
@@ -143,4 +171,108 @@ Defaults::vespaPortBase()
return defaultPortBase;
}
+std::vector<std::string>
+Defaults::vespaConfigServerHosts()
+{
+ findDefaults();
+ std::vector<std::string> ret;
+ char *toParse = strdup(defaultConfigServers);
+ char *savePtr = 0;
+ char *token = strtok_r(toParse, " ,", &savePtr);
+ if (token == 0) {
+ ret.push_back("localhost");
+ } else {
+ while (token != 0) {
+ char *colon = strchr(token, ':');
+ if (colon != 0 && colon != token) {
+ *colon = '\0';
+ }
+ ret.push_back(token);
+ token = strtok_r(0, " ,", &savePtr);
+ }
+ }
+ free(toParse);
+ return ret;
+}
+
+std::vector<std::string>
+Defaults::vespaConfigServerRpcAddrs()
+{
+ findDefaults();
+ std::vector<std::string> ret;
+ char *toParse = strdup(defaultConfigServers);
+ char *savePtr = 0;
+ char *token = strtok_r(toParse, " ,", &savePtr);
+ if (token == 0) {
+ std::string one = "tcp/localhost:";
+ one += std::to_string(defaultPortConfigServerRpc);
+ ret.push_back(one);
+ } else {
+ while (token != 0) {
+ std::string one = "tcp/";
+ one += token;
+ if (strchr(token, ':') == 0) {
+ one += ":";
+ one += std::to_string(defaultPortConfigServerRpc);
+ }
+ ret.push_back(one);
+ token = strtok_r(0, " ,", &savePtr);
+ }
+ }
+ free(toParse);
+ return ret;
+}
+
+std::vector<std::string>
+Defaults::vespaConfigServerRestUrls()
+{
+ findDefaults();
+ std::vector<std::string> ret;
+ char *toParse = strdup(defaultConfigServers);
+ char *savePtr = 0;
+ char *token = strtok_r(toParse, " ,", &savePtr);
+ if (token == 0) {
+ std::string one = "http://localhost:";
+ one += std::to_string(defaultPortConfigServerHttp);
+ ret.push_back(one);
+ } else {
+ while (token != 0) {
+ std::string one = "http://";
+ char *colon = strchr(token, ':');
+ if (colon != 0 && colon != token) {
+ *colon = '\0';
+ }
+ one += token;
+ one += ":";
+ one += std::to_string(defaultPortConfigServerHttp);
+ one += "/";
+ ret.push_back(one);
+ token = strtok_r(0, " ,", &savePtr);
+ }
+ }
+ free(toParse);
+ return ret;
+}
+
+std::string
+Defaults::vespaConfigProxyRpcAddr()
+{
+ findDefaults();
+ std::string ret = "tcp/localhost:";
+ ret += std::to_string(defaultPortConfigProxyRpc);
+ return ret;
+}
+
+std::vector<std::string>
+Defaults::vespaConfigSourcesRpcAddrs()
+{
+ findDefaults();
+ std::vector<std::string> ret;
+ ret.push_back(vespaConfigProxyRpcAddr());
+ for (std::string v : vespaConfigServerRpcAddrs()) {
+ ret.push_back(v);
+ }
+ return ret;
+}
+
} // namespace vespa