summaryrefslogtreecommitdiffstats
path: root/config-proxy
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-02-10 19:49:18 +0100
committerGitHub <noreply@github.com>2020-02-10 19:49:18 +0100
commit10856151d8c1ecb1aa23591b67a2c6a3afd966f3 (patch)
tree3b4af4abbc9c9931e841325cc233494abbdf7ddd /config-proxy
parent97ace087461254d5cc5a710d6b891176297ecfca (diff)
Revert "Config cleanup 5"
Diffstat (limited to 'config-proxy')
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCache.java4
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java43
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/UpstreamConfigSubscriber.java12
3 files changed, 42 insertions, 17 deletions
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCache.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCache.java
index 9c0f104f7de..91bb669f396 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCache.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCache.java
@@ -124,8 +124,8 @@ public class MemoryCache {
// First three lines are meta-data about config as comment lines, fourth line is empty
writer.write("# defMd5:" + config.getDefMd5() + "\n");
writer.write("# configMd5:" + config.getConfigMd5() + "\n");
- writer.write("# generation:" + config.getGeneration() + "\n");
- writer.write("# protocolVersion:" + protocolVersion + "\n");
+ writer.write("# generation:" + Long.toString(config.getGeneration()) + "\n");
+ writer.write("# protocolVersion:" + Long.toString(protocolVersion) + "\n");
writer.write("\n");
writer.write(payload.withCompression(CompressionType.UNCOMPRESSED).toString());
writer.write("\n");
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java
index 865bb2472c2..d809a3c97ed 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java
@@ -11,15 +11,13 @@ import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Target;
import com.yahoo.jrt.Transport;
import com.yahoo.log.LogLevel;
-import com.yahoo.vespa.config.ConfigCacheKey;
-import com.yahoo.vespa.config.JRTConnectionPool;
-import com.yahoo.vespa.config.RawConfig;
-import com.yahoo.vespa.config.TimingValues;
+import com.yahoo.vespa.config.*;
import com.yahoo.vespa.config.protocol.JRTServerConfigRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -44,7 +42,8 @@ class RpcConfigSourceClient implements ConfigSourceClient {
private final TimingValues timingValues;
private final ExecutorService exec;
- private final JRTConfigRequester requester;
+ private final Map<ConfigSourceSet, JRTConfigRequester> requesterPool;
+
RpcConfigSourceClient(RpcServer rpcServer,
ConfigSourceSet configSourceSet,
@@ -58,7 +57,20 @@ class RpcConfigSourceClient implements ConfigSourceClient {
this.timingValues = timingValues;
checkConfigSources();
exec = Executors.newCachedThreadPool(new DaemonThreadFactory("subscriber-"));
- requester = new JRTConfigRequester(new JRTConnectionPool(configSourceSet), timingValues);
+ requesterPool = createRequesterPool(configSourceSet, timingValues);
+ }
+
+ /**
+ * Creates a requester (connection) pool of one entry, to be used each time this {@link RpcConfigSourceClient} is used
+ * @param ccs a {@link ConfigSourceSet}
+ * @param timingValues a {@link TimingValues}
+ * @return requester map
+ */
+ private Map<ConfigSourceSet, JRTConfigRequester> createRequesterPool(ConfigSourceSet ccs, TimingValues timingValues) {
+ Map<ConfigSourceSet, JRTConfigRequester> ret = new HashMap<>();
+ if (ccs.getSources().isEmpty()) return ret; // unit test, just skip creating any requester
+ ret.put(ccs, JRTConfigRequester.get(new JRTConnectionPool(ccs), timingValues));
+ return ret;
}
/**
@@ -141,7 +153,7 @@ class RpcConfigSourceClient implements ConfigSourceClient {
} else {
log.log(LogLevel.DEBUG, () -> "Could not find good config in cache, creating subscriber for: " + configCacheKey);
UpstreamConfigSubscriber subscriber = new UpstreamConfigSubscriber(input, this, configSourceSet,
- timingValues, requester, memoryCache);
+ timingValues, requesterPool, memoryCache);
try {
subscriber.subscribe();
activeSubscribers.put(configCacheKey, subscriber);
@@ -171,17 +183,28 @@ class RpcConfigSourceClient implements ConfigSourceClient {
activeSubscribers.clear();
}
exec.shutdown();
- requester.close();
+ for (JRTConfigRequester requester : requesterPool.values()) {
+ requester.close();
+ }
}
@Override
public String getActiveSourceConnection() {
- return requester.getConnectionPool().getCurrent().getAddress();
+ if (requesterPool.get(configSourceSet) != null) {
+ return requesterPool.get(configSourceSet).getConnectionPool().getCurrent().getAddress();
+ } else {
+ return "";
+ }
}
@Override
public List<String> getSourceConnections() {
- return new ArrayList<>(configSourceSet.getSources());
+ ArrayList<String> ret = new ArrayList<>();
+ final JRTConfigRequester jrtConfigRequester = requesterPool.get(configSourceSet);
+ if (jrtConfigRequester != null) {
+ ret.addAll(configSourceSet.getSources());
+ }
+ return ret;
}
/**
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/UpstreamConfigSubscriber.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/UpstreamConfigSubscriber.java
index ba440da685a..f8df16cb3d2 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/UpstreamConfigSubscriber.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/UpstreamConfigSubscriber.java
@@ -2,15 +2,17 @@
package com.yahoo.vespa.config.proxy;
import com.yahoo.config.subscription.ConfigSource;
+import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.config.subscription.impl.GenericConfigHandle;
import com.yahoo.config.subscription.impl.GenericConfigSubscriber;
import com.yahoo.config.subscription.impl.JRTConfigRequester;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.yolean.Exceptions;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
-import com.yahoo.yolean.Exceptions;
+import java.util.Map;
import java.util.logging.Logger;
/**
@@ -24,24 +26,24 @@ public class UpstreamConfigSubscriber implements Subscriber {
private final ConfigSourceClient configSourceClient;
private final ConfigSource configSourceSet;
private final TimingValues timingValues;
- private final JRTConfigRequester requester;
+ private final Map<ConfigSourceSet, JRTConfigRequester> requesterPool;
private final MemoryCache memoryCache;
private GenericConfigSubscriber subscriber;
private GenericConfigHandle handle;
UpstreamConfigSubscriber(RawConfig config, ConfigSourceClient configSourceClient, ConfigSource configSourceSet,
- TimingValues timingValues, JRTConfigRequester requester,
+ TimingValues timingValues, Map<ConfigSourceSet, JRTConfigRequester> requesterPool,
MemoryCache memoryCache) {
this.config = config;
this.configSourceClient = configSourceClient;
this.configSourceSet = configSourceSet;
this.timingValues = timingValues;
- this.requester = requester;
+ this.requesterPool = requesterPool;
this.memoryCache = memoryCache;
}
void subscribe() {
- subscriber = new GenericConfigSubscriber(requester);
+ subscriber = new GenericConfigSubscriber(requesterPool);
ConfigKey<?> key = config.getKey();
handle = subscriber.subscribe(new ConfigKey<>(key.getName(), key.getConfigId(), key.getNamespace()),
config.getDefContent(), configSourceSet, timingValues);