aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-12-03 13:31:03 +0100
committerHarald Musum <musum@yahooinc.com>2021-12-03 13:31:03 +0100
commit40fad69acd84bd751fa4a2b533b07fe08602978c (patch)
treeaad33ac242b956814e5588f50b27799718ec040d /config
parentaa0376715ca4590f8b4c2a3e10b4f659e5eacf8d (diff)
Cleanup use of requesters and config sources
Remove requesters() method from ConfigSubscriber as well, not useful for others and is documented as for internal use only
Diffstat (limited to 'config')
-rw-r--r--config/abi-spec.json5
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java33
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java8
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java15
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java7
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java21
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JrtConfigRequesters.java38
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/ConfigSetSubscriptionTest.java10
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/ConfigSubscriptionTest.java18
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java16
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java7
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java78
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestFactoryTest.java11
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java18
14 files changed, 136 insertions, 149 deletions
diff --git a/config/abi-spec.json b/config/abi-spec.json
index fa016fd91da..844835ae1c5 100644
--- a/config/abi-spec.json
+++ b/config/abi-spec.json
@@ -212,21 +212,18 @@
"public boolean nextGeneration(long)",
"protected void throwIfExceptionSet(com.yahoo.config.subscription.impl.ConfigSubscription)",
"public void close()",
- "protected void closeRequesters()",
"public java.lang.String toString()",
"public java.lang.Thread startConfigThread(java.lang.Runnable)",
"protected com.yahoo.config.subscription.ConfigSubscriber$State state()",
"public void reload(long)",
"public com.yahoo.config.subscription.ConfigSource getSource()",
- "public java.util.Map requesters()",
"public boolean isClosed()",
"public com.yahoo.config.subscription.ConfigHandle subscribe(com.yahoo.config.subscription.ConfigSubscriber$SingleSubscriber, java.lang.Class, java.lang.String)",
"public long getGeneration()",
"protected void finalize()"
],
"fields": [
- "protected final java.util.List subscriptionHandles",
- "protected java.util.Map requesters"
+ "protected final java.util.List subscriptionHandles"
]
},
"com.yahoo.config.subscription.ConfigURI": {
diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
index 07132c460f9..01008f0a8a2 100644
--- a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
+++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
@@ -5,15 +5,13 @@ import com.yahoo.config.ConfigInstance;
import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.impl.ConfigSubscription;
import com.yahoo.config.subscription.impl.JRTConfigRequester;
+import com.yahoo.config.subscription.impl.JrtConfigRequesters;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.TimingValues;
import com.yahoo.yolean.Exceptions;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
-
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -40,6 +38,7 @@ public class ConfigSubscriber implements AutoCloseable {
private final ConfigSource source;
private final Object monitor = new Object();
private final Throwable stackTraceAtConstruction; // TODO Remove once finalizer is gone
+ private final JrtConfigRequesters requesters = new JrtConfigRequesters();
/** The last complete config generation received by this */
private long generation = -1;
@@ -52,11 +51,6 @@ public class ConfigSubscriber implements AutoCloseable {
private boolean applyOnRestart = false;
/**
- * Reuse requesters for equal source sets, limit number if many subscriptions.
- */
- protected Map<ConfigSourceSet, JRTConfigRequester> requesters = new HashMap<>();
-
- /**
* The states of the subscriber. Affects the validity of calling certain methods.
*
*/
@@ -114,8 +108,8 @@ public class ConfigSubscriber implements AutoCloseable {
// for testing
<T extends ConfigInstance> ConfigHandle<T> subscribe(Class<T> configClass, String configId, ConfigSource source, TimingValues timingValues) {
checkStateBeforeSubscribe();
- final ConfigKey<T> configKey = new ConfigKey<>(configClass, configId);
- ConfigSubscription<T> sub = ConfigSubscription.get(configKey, this, source, timingValues);
+ ConfigKey<T> configKey = new ConfigKey<>(configClass, configId);
+ ConfigSubscription<T> sub = ConfigSubscription.get(configKey, requesters, source, timingValues);
ConfigHandle<T> handle = new ConfigHandle<>(sub);
subscribeAndHandleErrors(sub, configKey, handle, timingValues);
return handle;
@@ -375,19 +369,10 @@ public class ConfigSubscriber implements AutoCloseable {
for (ConfigHandle<? extends ConfigInstance> h : subscriptionHandles) {
h.subscription().close();
}
- closeRequesters();
+ requesters.close();
log.log(FINE, () -> "Config subscriber has been closed.");
}
- /**
- * Closes all open requesters
- */
- protected void closeRequesters() {
- for (JRTConfigRequester requester : requesters.values()) {
- requester.close();
- }
- }
-
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@@ -442,14 +427,6 @@ public class ConfigSubscriber implements AutoCloseable {
return source;
}
- /**
- * Implementation detail, do not use.
- * @return requesters
- */
- public Map<ConfigSourceSet, JRTConfigRequester> requesters() {
- return requesters;
- }
-
public boolean isClosed() {
synchronized (monitor) {
return state == State.CLOSED;
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
index 780556e93fa..f8a45a11b70 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
@@ -111,10 +111,9 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
* Correct type of ConfigSubscription instance based on type of source or form of config id
*
* @param key a {@link ConfigKey}
- * @param subscriber the subscriber for this subscription
* @return a subclass of a ConfigsSubscription
*/
- public static <T extends ConfigInstance> ConfigSubscription<T> get(ConfigKey<T> key, ConfigSubscriber subscriber,
+ public static <T extends ConfigInstance> ConfigSubscription<T> get(ConfigKey<T> key, JrtConfigRequesters requesters,
ConfigSource source, TimingValues timingValues) {
String configId = key.getConfigId();
if (source instanceof RawSource || configId.startsWith("raw:")) return getRawSub(key, source);
@@ -122,7 +121,10 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
if (source instanceof DirSource || configId.startsWith("dir:")) return getDirFileSub(key, source);
if (source instanceof JarSource || configId.startsWith("jar:")) return getJarSub(key, source);
if (source instanceof ConfigSet) return new ConfigSetSubscription<>(key, source);
- if (source instanceof ConfigSourceSet) return new JRTConfigSubscription<>(key, subscriber, (ConfigSourceSet) source, timingValues);
+ if (source instanceof ConfigSourceSet) {
+ JRTConfigRequester requester = requesters.getRequester((ConfigSourceSet) source, timingValues);
+ return new JRTConfigSubscription<>(key, requester, timingValues);
+ }
throw new IllegalArgumentException("Unknown source type: " + source);
}
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
index 6dc18137639..e382bab576e 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
@@ -3,14 +3,12 @@ package com.yahoo.config.subscription.impl;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.subscription.ConfigHandle;
-import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
import java.util.List;
-import java.util.Map;
/**
* A subscriber that can subscribe without the class. Used by config proxy.
@@ -19,16 +17,18 @@ import java.util.Map;
*/
public class GenericConfigSubscriber extends ConfigSubscriber {
+ private final JRTConfigRequester requester;
+
/**
* Constructs a new subscriber using the given pool of requesters (JRTConfigRequester holds 1 connection which in
* turn is subject to failover across the elements in the source set.)
* The behaviour is undefined if the map key is different from the source set the requester was built with.
* See also {@link JRTConfigRequester#JRTConfigRequester(com.yahoo.vespa.config.ConnectionPool, com.yahoo.vespa.config.TimingValues)}
*
- * @param requesters a map from config source set to config requester
+ * @param requester a config requester
*/
- public GenericConfigSubscriber(Map<ConfigSourceSet, JRTConfigRequester> requesters) {
- this.requesters = requesters;
+ public GenericConfigSubscriber(JRTConfigRequester requester) {
+ this.requester = requester;
}
/**
@@ -36,13 +36,12 @@ public class GenericConfigSubscriber extends ConfigSubscriber {
*
* @param key the {@link ConfigKey to subscribe to}
* @param defContent the config definition content for the config to subscribe to
- * @param source the config source to use
* @param timingValues {@link TimingValues}
* @return generic handle
*/
- public GenericConfigHandle subscribe(ConfigKey<RawConfig> key, List<String> defContent, ConfigSourceSet source, TimingValues timingValues) {
+ public GenericConfigHandle subscribe(ConfigKey<RawConfig> key, List<String> defContent, TimingValues timingValues) {
checkStateBeforeSubscribe();
- GenericJRTConfigSubscription sub = new GenericJRTConfigSubscription(key, defContent, this, source, timingValues);
+ GenericJRTConfigSubscription sub = new GenericJRTConfigSubscription(key, defContent, requester, timingValues);
GenericConfigHandle handle = new GenericConfigHandle(sub);
subscribeAndHandleErrors(sub, key, handle, timingValues);
return handle;
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
index 737ca64b075..43f7a1fc168 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
@@ -1,8 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
-import com.yahoo.config.subscription.ConfigSourceSet;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
@@ -25,10 +23,9 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfi
public GenericJRTConfigSubscription(ConfigKey<RawConfig> key,
List<String> defContent,
- ConfigSubscriber subscriber,
- ConfigSourceSet source,
+ JRTConfigRequester requester,
TimingValues timingValues) {
- super(key, subscriber, source, timingValues);
+ super(key, requester, timingValues);
this.defContent = defContent;
}
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
index b27c75fb61d..0b98e9cd1b2 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
@@ -4,8 +4,6 @@ package com.yahoo.config.subscription.impl;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.ConfigInterruptedException;
-import com.yahoo.config.subscription.ConfigSourceSet;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
import com.yahoo.vespa.config.TimingValues;
@@ -31,9 +29,8 @@ import static java.util.logging.Level.INFO;
*/
public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubscription<T> {
- private JRTConfigRequester requester;
+ private final JRTConfigRequester requester;
private final TimingValues timingValues;
- private final ConfigSubscriber subscriber;
// Last time we got an OK JRT callback
private Instant lastOK = Instant.MIN;
@@ -43,13 +40,11 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
* but has not yet been handled.
*/
private BlockingQueue<JRTClientConfigRequest> reqQueue = new LinkedBlockingQueue<>();
- private final ConfigSourceSet sources;
- public JRTConfigSubscription(ConfigKey<T> key, ConfigSubscriber subscriber, ConfigSourceSet source, TimingValues timingValues) {
+ public JRTConfigSubscription(ConfigKey<T> key, JRTConfigRequester requester, TimingValues timingValues) {
super(key);
this.timingValues = timingValues;
- this.subscriber = subscriber;
- this.sources = source;
+ this.requester = requester;
}
@Override
@@ -148,7 +143,6 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
@Override
public boolean subscribe(long timeout) {
lastOK = Instant.now();
- requester = getRequester();
requester.request(this);
JRTClientConfigRequest req = reqQueue.peek();
while (req == null && (Instant.now().isBefore(lastOK.plus(Duration.ofMillis(timeout))))) {
@@ -162,15 +156,6 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
return req != null;
}
- private JRTConfigRequester getRequester() {
- JRTConfigRequester requester = subscriber.requesters().get(sources);
- if (requester == null) {
- requester = JRTConfigRequester.create(sources, timingValues);
- subscriber.requesters().put(sources, requester);
- }
- return requester;
- }
-
@Override
@SuppressWarnings("serial")
public void close() {
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JrtConfigRequesters.java b/config/src/main/java/com/yahoo/config/subscription/impl/JrtConfigRequesters.java
new file mode 100644
index 00000000000..1e9612272d5
--- /dev/null
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JrtConfigRequesters.java
@@ -0,0 +1,38 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config.subscription.impl;
+
+import com.yahoo.config.subscription.ConfigSourceSet;
+import com.yahoo.vespa.config.TimingValues;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Keeps track of requesters per config subscriber
+ *
+ * @author hmusum
+ */
+public class JrtConfigRequesters {
+
+ /**
+ * Reuse requesters for equal source sets, limit number if many subscriptions.
+ */
+ protected Map<ConfigSourceSet, JRTConfigRequester> requesters = new HashMap<>();
+
+ public JRTConfigRequester getRequester(ConfigSourceSet source, TimingValues timingValues) {
+ JRTConfigRequester requester = requesters.get(source);
+ if (requester == null) {
+ requester = JRTConfigRequester.create(source, timingValues);
+ requesters.put(source, requester);
+ }
+ return requester;
+ }
+
+ /**
+ * Closes all open requesters
+ */
+ public void close() {
+ requesters.values().forEach(JRTConfigRequester::close);
+ }
+
+}
diff --git a/config/src/test/java/com/yahoo/config/subscription/ConfigSetSubscriptionTest.java b/config/src/test/java/com/yahoo/config/subscription/ConfigSetSubscriptionTest.java
index 0d9b8745888..346368ee7d9 100644
--- a/config/src/test/java/com/yahoo/config/subscription/ConfigSetSubscriptionTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/ConfigSetSubscriptionTest.java
@@ -2,6 +2,7 @@
package com.yahoo.config.subscription;
import com.yahoo.config.subscription.impl.ConfigSubscription;
+import com.yahoo.config.subscription.impl.JrtConfigRequesters;
import com.yahoo.foo.AppConfig;
import com.yahoo.foo.SimpletypesConfig;
import com.yahoo.foo.StringConfig;
@@ -18,21 +19,21 @@ public class ConfigSetSubscriptionTest {
@Test
public void testConfigSubscription() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
ConfigSet configSet = new ConfigSet();
AppConfig.Builder a0builder = new AppConfig.Builder().message("A message, 0").times(88);
configSet.addBuilder("app/0", a0builder);
AppConfig.Builder a1builder = new AppConfig.Builder().message("A message, 1").times(89);
configSet.addBuilder("app/1", a1builder);
+ JrtConfigRequesters requesters = new JrtConfigRequesters();
ConfigSubscription<AppConfig> c1 = ConfigSubscription.get(
new ConfigKey<>(AppConfig.class, "app/0"),
- subscriber,
+ requesters,
configSet,
new TimingValues());
ConfigSubscription<AppConfig> c2 = ConfigSubscription.get(
new ConfigKey<>(AppConfig.class, "app/1"),
- subscriber,
+ requesters,
configSet,
new TimingValues());
@@ -42,14 +43,13 @@ public class ConfigSetSubscriptionTest {
@Test(expected = IllegalArgumentException.class)
public void testUnknownKey() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
ConfigSet configSet = new ConfigSet();
AppConfig.Builder a0builder = new AppConfig.Builder().message("A message, 0").times(88);
configSet.addBuilder("app/0", a0builder);
ConfigSubscription.get(
new ConfigKey<>(SimpletypesConfig.class, "simpletypes/1"),
- subscriber,
+ new JrtConfigRequesters(),
configSet,
new TimingValues());
}
diff --git a/config/src/test/java/com/yahoo/config/subscription/ConfigSubscriptionTest.java b/config/src/test/java/com/yahoo/config/subscription/ConfigSubscriptionTest.java
index 270c618ee1b..1b0bc858361 100644
--- a/config/src/test/java/com/yahoo/config/subscription/ConfigSubscriptionTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/ConfigSubscriptionTest.java
@@ -4,6 +4,7 @@ package com.yahoo.config.subscription;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.impl.ConfigSubscription;
+import com.yahoo.config.subscription.impl.JrtConfigRequesters;
import com.yahoo.foo.AppConfig;
import com.yahoo.foo.SimpletypesConfig;
import com.yahoo.vespa.config.ConfigKey;
@@ -29,9 +30,10 @@ public class ConfigSubscriptionTest {
public void testEquals() {
ConfigSubscriber sub = new ConfigSubscriber();
- ConfigSubscription<SimpletypesConfig> a = createSubscription(sub, "test");
- ConfigSubscription<SimpletypesConfig> b = createSubscription(sub, "test");
- ConfigSubscription<SimpletypesConfig> c = createSubscription(sub, "test2");
+ JrtConfigRequesters requesters = new JrtConfigRequesters();
+ ConfigSubscription<SimpletypesConfig> a = createSubscription(requesters, "test");
+ ConfigSubscription<SimpletypesConfig> b = createSubscription(requesters, "test");
+ ConfigSubscription<SimpletypesConfig> c = createSubscription(requesters, "test2");
assertEquals(b, a);
assertEquals(a, a);
assertEquals(b, b);
@@ -39,21 +41,21 @@ public class ConfigSubscriptionTest {
assertNotEquals(c, a);
assertNotEquals(c, b);
- ConfigSubscriber subscriber = new ConfigSubscriber();
ConfigSet configSet = new ConfigSet();
AppConfig.Builder a0builder = new AppConfig.Builder().message("A message, 0").times(88);
configSet.addBuilder("app/0", a0builder);
AppConfig.Builder a1builder = new AppConfig.Builder().message("A message, 1").times(89);
configSet.addBuilder("app/1", a1builder);
+
ConfigSubscription<AppConfig> c1 = ConfigSubscription.get(
new ConfigKey<>(AppConfig.class, "app/0"),
- subscriber,
+ requesters,
configSet,
new TimingValues());
ConfigSubscription<AppConfig> c2 = ConfigSubscription.get(
new ConfigKey<>(AppConfig.class, "app/1"),
- subscriber,
+ requesters,
configSet,
new TimingValues());
@@ -86,9 +88,9 @@ public class ConfigSubscriptionTest {
}
}
- private ConfigSubscription<SimpletypesConfig> createSubscription(ConfigSubscriber sub, String configId) {
+ private ConfigSubscription<SimpletypesConfig> createSubscription(JrtConfigRequesters requesters, String configId) {
return ConfigSubscription.get(new ConfigKey<>(SimpletypesConfig.class, configId),
- sub, new RawSource("boolval true"), new TimingValues());
+ requesters, new RawSource("boolval true"), new TimingValues());
}
private static class TestConfigSubscriber extends ConfigSubscriber {
diff --git a/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java b/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
index 5fada55be28..fc922cc3b07 100644
--- a/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
@@ -6,14 +6,15 @@ import com.yahoo.config.subscription.impl.GenericConfigSubscriber;
import com.yahoo.config.subscription.impl.JRTConfigRequester;
import com.yahoo.config.subscription.impl.JRTConfigRequesterTest;
import com.yahoo.config.subscription.impl.MockConnection;
+import com.yahoo.jrt.Supervisor;
+import com.yahoo.jrt.Transport;
import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.JRTConnectionPool;
import com.yahoo.vespa.config.TimingValues;
import com.yahoo.vespa.config.protocol.CompressionType;
import org.junit.Test;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -30,14 +31,11 @@ public class GenericConfigSubscriberTest {
@Test
public void testSubscribeGeneric() throws InterruptedException {
- Map<ConfigSourceSet, JRTConfigRequester> requesters = new HashMap<>();
- ConfigSourceSet sourceSet = new ConfigSourceSet("blabla");
- requesters.put(sourceSet, new JRTConfigRequester(new MockConnection(), tv));
- GenericConfigSubscriber sub = new GenericConfigSubscriber(requesters);
+ JRTConfigRequester requester = new JRTConfigRequester(new MockConnection(), tv);
+ GenericConfigSubscriber sub = new GenericConfigSubscriber(requester);
final List<String> defContent = List.of("myVal int");
GenericConfigHandle handle = sub.subscribe(new ConfigKey<>("simpletypes", "id", "config"),
defContent,
- sourceSet,
tv);
assertTrue(sub.nextConfig(false));
assertTrue(handle.isChanged());
@@ -75,9 +73,7 @@ public class GenericConfigSubscriberTest {
}
private GenericConfigSubscriber createSubscriber() {
- return new GenericConfigSubscriber(Map.of(
- new ConfigSourceSet("blabla"),
- new JRTConfigRequester(new MockConnection(), JRTConfigRequesterTest.getTestTimingValues())));
+ return new GenericConfigSubscriber(new JRTConfigRequester(new JRTConnectionPool(new ConfigSourceSet("foo"), new Supervisor(new Transport())), tv));
}
}
diff --git a/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java b/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
index 15f39f590aa..74af35e39dc 100644
--- a/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/impl/FileConfigSubscriptionTest.java
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.config.subscription.DirSource;
import com.yahoo.foo.SimpletypesConfig;
import com.yahoo.foo.TestReferenceConfig;
@@ -98,8 +97,10 @@ public class FileConfigSubscriptionTest {
final String cfgDir = "src/test/resources/configs/foo";
final String cfgId = "dir:" + cfgDir;
final ConfigKey<TestReferenceConfig> key = new ConfigKey<>(TestReferenceConfig.class, cfgId);
- ConfigSubscriber subscriber = new ConfigSubscriber();
- ConfigSubscription<TestReferenceConfig> sub = ConfigSubscription.get(key, subscriber, new DirSource(new File(cfgDir)), new TimingValues());
+ ConfigSubscription<TestReferenceConfig> sub = ConfigSubscription.get(key,
+ new JrtConfigRequesters(),
+ new DirSource(new File(cfgDir)),
+ new TimingValues());
assertTrue(sub.nextConfig(1000));
assertThat(sub.getConfigState().getConfig().configId(), is(cfgId));
}
diff --git a/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java b/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
index 62a25fadf25..dca0c2d0018 100644
--- a/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
@@ -2,7 +2,6 @@
package com.yahoo.config.subscription.impl;
import com.yahoo.config.subscription.ConfigSourceSet;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.foo.SimpletypesConfig;
import com.yahoo.jrt.Request;
import com.yahoo.vespa.config.ConfigKey;
@@ -51,12 +50,11 @@ public class JRTConfigRequesterTest {
@Test
public void testFirstRequestAfterSubscribing() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
-
- final MockConnection connection = new MockConnection();
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection();
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
+
assertEquals(requester.getConnectionPool(), connection);
requester.request(sub);
final Request request = connection.getRequest();
@@ -70,25 +68,24 @@ public class JRTConfigRequesterTest {
@Test
public void testFatalError() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
final TimingValues timingValues = getTestTimingValues();
final MockConnection connection = new MockConnection(new ErrorResponseHandler());
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
- requester.request(createSubscription(subscriber, timingValues));
+ requester.request(createSubscription(requester, timingValues));
waitUntilResponse(connection);
assertEquals(1, requester.getFailures());
}
@Test
public void testFatalErrorSubscribed() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection(new ErrorResponseHandler());
+ JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
sub.setConfig(1L, false, config(), PayloadChecksums.empty());
- final MockConnection connection = new MockConnection(new ErrorResponseHandler());
- JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
requester.request(sub);
waitUntilResponse(connection);
assertEquals(1, requester.getFailures());
@@ -96,25 +93,23 @@ public class JRTConfigRequesterTest {
@Test
public void testTransientError() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
+ TimingValues timingValues = getTestTimingValues();
- final MockConnection connection = new MockConnection(new ErrorResponseHandler(com.yahoo.jrt.ErrorCode.TIMEOUT));
+ MockConnection connection = new MockConnection(new ErrorResponseHandler(com.yahoo.jrt.ErrorCode.TIMEOUT));
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
- requester.request(createSubscription(subscriber, timingValues));
+ requester.request(createSubscription(requester, timingValues));
waitUntilResponse(connection);
assertEquals(1, requester.getFailures());
}
@Test
public void testTransientErrorSubscribed() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection(new ErrorResponseHandler(com.yahoo.jrt.ErrorCode.TIMEOUT));
+ JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
sub.setConfig(1L, false, config(), PayloadChecksums.empty());
- final MockConnection connection = new MockConnection(new ErrorResponseHandler(com.yahoo.jrt.ErrorCode.TIMEOUT));
- JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
requester.request(sub);
waitUntilResponse(connection);
assertEquals(1, requester.getFailures());
@@ -122,13 +117,12 @@ public class JRTConfigRequesterTest {
@Test
public void testUnknownConfigDefinitionError() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection(new ErrorResponseHandler(ErrorCode.UNKNOWN_DEFINITION));
+ JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
sub.setConfig(1L, false, config(), PayloadChecksums.empty());
- final MockConnection connection = new MockConnection(new ErrorResponseHandler(ErrorCode.UNKNOWN_DEFINITION));
- JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
assertEquals(requester.getConnectionPool(), connection);
requester.request(sub);
waitUntilResponse(connection);
@@ -137,13 +131,12 @@ public class JRTConfigRequesterTest {
@Test
public void testClosedSubscription() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection(new MockConnection.OKResponseHandler());
+ JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
sub.close();
- final MockConnection connection = new MockConnection(new MockConnection.OKResponseHandler());
- JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
requester.request(sub);
assertEquals(1, connection.getNumberOfRequests());
// Check that no further request was sent?
@@ -157,16 +150,14 @@ public class JRTConfigRequesterTest {
@Test
public void testTimeout() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
- final TimingValues timingValues = getTestTimingValues();
- JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
+ TimingValues timingValues = getTestTimingValues();
+ MockConnection connection = new MockConnection(new DelayedResponseHandler(timingValues.getSubscribeTimeout()),
+ 2); // fake that we have more than one source
+ JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
+ JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(requester, timingValues);
sub.close();
- final MockConnection connection = new MockConnection(
- new DelayedResponseHandler(timingValues.getSubscribeTimeout()),
- 2); // fake that we have more than one source
- JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
- requester.request(createSubscription(subscriber, timingValues));
+ requester.request(createSubscription(requester, timingValues));
// Check that no further request was sent?
try {
Thread.sleep(timingValues.getFixedDelay()*2);
@@ -175,9 +166,10 @@ public class JRTConfigRequesterTest {
}
}
- private JRTConfigSubscription<SimpletypesConfig> createSubscription(ConfigSubscriber subscriber, TimingValues timingValues) {
- return new JRTConfigSubscription<>(
- new ConfigKey<>(SimpletypesConfig.class, "testid"), subscriber, null, timingValues);
+ private JRTConfigSubscription<SimpletypesConfig> createSubscription(JRTConfigRequester requester, TimingValues timingValues) {
+ return new JRTConfigSubscription<>(new ConfigKey<>(SimpletypesConfig.class, "testid"),
+ requester,
+ timingValues);
}
private SimpletypesConfig config() {
diff --git a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestFactoryTest.java b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestFactoryTest.java
index 4f7b1df5a43..14183aa087a 100644
--- a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestFactoryTest.java
+++ b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestFactoryTest.java
@@ -2,10 +2,11 @@
package com.yahoo.vespa.config.protocol;
import com.yahoo.config.subscription.ConfigSourceSet;
-import com.yahoo.config.subscription.ConfigSubscriber;
+import com.yahoo.config.subscription.impl.JRTConfigRequester;
import com.yahoo.config.subscription.impl.JRTConfigSubscription;
import com.yahoo.foo.FunctionTestConfig;
import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.JRTConnectionPool;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
import org.junit.Test;
@@ -42,11 +43,13 @@ public class JRTConfigRequestFactoryTest {
@Test
public void testCreateFromSub() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
Class<FunctionTestConfig> clazz = FunctionTestConfig.class;
final String configId = "foo";
- JRTConfigSubscription<FunctionTestConfig> sub = new JRTConfigSubscription<>(
- new ConfigKey<>(clazz, configId), subscriber, new ConfigSourceSet(), new TimingValues());
+ TimingValues timingValues = new TimingValues();
+ JRTConfigSubscription<FunctionTestConfig> sub =
+ new JRTConfigSubscription<>(new ConfigKey<>(clazz, configId),
+ new JRTConfigRequester(new JRTConnectionPool(new ConfigSourceSet("tcp/localhost:12345")), timingValues),
+ timingValues);
JRTClientConfigRequest request = JRTConfigRequestFactory.createFromSub(sub);
assertThat(request.getVespaVersion().get(), is(defaultVespaVersion));
diff --git a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
index 5f2a5c73fa5..dabd87e1eec 100644
--- a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
+++ b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
@@ -2,8 +2,6 @@
package com.yahoo.vespa.config.protocol;
import com.yahoo.config.subscription.ConfigSourceSet;
-import com.yahoo.config.subscription.ConfigSubscriber;
-import com.yahoo.config.subscription.impl.GenericConfigSubscriber;
import com.yahoo.config.subscription.impl.JRTConfigRequester;
import com.yahoo.config.subscription.impl.JRTConfigSubscription;
import com.yahoo.config.subscription.impl.MockConnection;
@@ -16,6 +14,7 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
import com.yahoo.vespa.config.ErrorCode;
+import com.yahoo.vespa.config.JRTConnectionPool;
import com.yahoo.vespa.config.PayloadChecksums;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
@@ -23,7 +22,6 @@ import com.yahoo.vespa.config.util.ConfigUtils;
import org.junit.Before;
import org.junit.Test;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -190,12 +188,11 @@ public class JRTConfigRequestV3Test {
@Test
public void created_from_subscription() {
- ConfigSubscriber subscriber = new ConfigSubscriber();
+ TimingValues timingValues = new TimingValues();
JRTConfigSubscription<SimpletypesConfig> sub =
new JRTConfigSubscription<>(new ConfigKey<>(SimpletypesConfig.class, configId),
- subscriber,
- new ConfigSourceSet(),
- new TimingValues());
+ new JRTConfigRequester(new JRTConnectionPool(new ConfigSourceSet("tcp/localhost:985")), timingValues),
+ timingValues);
JRTClientConfigRequest request = createReq(sub, Trace.createNew(9));
assertThat(request.getConfigKey().getName(), is(SimpletypesConfig.CONFIG_DEF_NAME));
JRTServerConfigRequest serverRequest = createReq(request.getRequest());
@@ -212,9 +209,10 @@ public class JRTConfigRequestV3Test {
}
});
- ConfigSourceSet src = new ConfigSourceSet();
- ConfigSubscriber subscriber = new GenericConfigSubscriber(Collections.singletonMap(src, new JRTConfigRequester(connection, new TimingValues())));
- JRTConfigSubscription<SimpletypesConfig> sub = new JRTConfigSubscription<>(new ConfigKey<>(SimpletypesConfig.class, configId), subscriber, src, new TimingValues());
+ TimingValues timingValues = new TimingValues();
+ JRTConfigSubscription<SimpletypesConfig> sub = new JRTConfigSubscription<>(new ConfigKey<>(SimpletypesConfig.class, configId),
+ new JRTConfigRequester(connection, timingValues),
+ timingValues);
sub.subscribe(120_0000);
assertTrue(sub.nextConfig(120_0000));
sub.close();