diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-02-10 19:49:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-10 19:49:18 +0100 |
commit | 10856151d8c1ecb1aa23591b67a2c6a3afd966f3 (patch) | |
tree | 3b4af4abbc9c9931e841325cc233494abbdf7ddd /config-proxy | |
parent | 97ace087461254d5cc5a710d6b891176297ecfca (diff) |
Revert "Config cleanup 5"
Diffstat (limited to 'config-proxy')
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); |