aboutsummaryrefslogtreecommitdiffstats
path: root/config-proxy
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-12-06 20:03:59 +0100
committerHarald Musum <musum@yahooinc.com>2021-12-06 20:03:59 +0100
commitcfd3c3a096eae48543fce849c9d5fc43dc73823a (patch)
tree1433062b3b04d2bef1394028baef342366a05e65 /config-proxy
parentc4aa35c9c75a511eb7322ac167d0a962e349e55e (diff)
SImplify code related to MemoryCache
No functional changes
Diffstat (limited to 'config-proxy')
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServer.java6
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigSourceClient.java2
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClient.java13
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ProxyServer.java38
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClient.java11
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServerTest.java6
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClientTest.java5
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSourceClient.java7
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ProxyServerTest.java31
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClientTest.java2
10 files changed, 62 insertions, 59 deletions
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServer.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServer.java
index f2d16399712..207a6385b5a 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServer.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServer.java
@@ -177,7 +177,7 @@ public class ConfigProxyRpcServer implements Runnable, TargetWatcher, RpcServer
private void invalidateCache(Request req) {
dispatchRpcRequest(req, () -> {
- proxyServer.getMemoryCache().clear();
+ proxyServer.memoryCache().clear();
String[] s = new String[2];
s[0] = "0";
s[1] = "success";
@@ -213,7 +213,7 @@ public class ConfigProxyRpcServer implements Runnable, TargetWatcher, RpcServer
private void dumpCache(Request req) {
dispatchRpcRequest(req, () -> {
- final MemoryCache memoryCache = proxyServer.getMemoryCache();
+ final MemoryCache memoryCache = proxyServer.memoryCache();
req.returnValues().add(new StringValue(memoryCache.dumpCacheToDisk(req.parameters().get(0).asString(), memoryCache)));
req.returnRequest();
});
@@ -278,7 +278,7 @@ public class ConfigProxyRpcServer implements Runnable, TargetWatcher, RpcServer
private void listCachedConfig(Request req, boolean full) {
String[] ret;
- MemoryCache cache = proxyServer.getMemoryCache();
+ MemoryCache cache = proxyServer.memoryCache();
ret = new String[cache.size()];
int i = 0;
for (RawConfig config : cache.values()) {
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigSourceClient.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigSourceClient.java
index 6e5fe2d3fd8..341f4eb99db 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigSourceClient.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigSourceClient.java
@@ -26,4 +26,6 @@ interface ConfigSourceClient {
DelayedResponses delayedResponses();
+ MemoryCache memoryCache();
+
}
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClient.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClient.java
index 6e90ad16f50..b56d94ded77 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClient.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClient.java
@@ -1,12 +1,14 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.proxy;
-import java.util.logging.Level;
-import com.yahoo.vespa.config.*;
+import com.yahoo.vespa.config.ConfigCacheKey;
+import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.protocol.JRTServerConfigRequest;
import java.util.Collections;
import java.util.List;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -20,8 +22,8 @@ class MemoryCacheConfigClient implements ConfigSourceClient {
private final MemoryCache cache;
private final DelayedResponses delayedResponses = new DelayedResponses();
- MemoryCacheConfigClient(MemoryCache cache) {
- this.cache = cache;
+ MemoryCacheConfigClient() {
+ this.cache = new MemoryCache();
}
/**
@@ -64,4 +66,7 @@ class MemoryCacheConfigClient implements ConfigSourceClient {
return delayedResponses;
}
+ @Override
+ public MemoryCache memoryCache() { return cache; }
+
}
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ProxyServer.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ProxyServer.java
index d063c45a3f7..8492381786b 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ProxyServer.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ProxyServer.java
@@ -1,14 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.proxy;
+import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.jrt.Spec;
import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Transport;
-import java.util.logging.Level;
import com.yahoo.log.LogSetup;
import com.yahoo.log.event.Event;
-import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.protocol.JRTServerConfigRequest;
import com.yahoo.vespa.config.proxy.filedistribution.FileDistributionAndUrlDownload;
@@ -20,8 +19,8 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Level;
import java.util.logging.Logger;
import static com.yahoo.vespa.config.proxy.Mode.ModeName.DEFAULT;
@@ -40,27 +39,24 @@ public class ProxyServer implements Runnable {
private static final int JRT_TRANSPORT_THREADS = 4;
static final String DEFAULT_PROXY_CONFIG_SOURCES = "tcp/localhost:19070";
- private final static Logger log = Logger.getLogger(ProxyServer.class.getName());
+ private static final Logger log = Logger.getLogger(ProxyServer.class.getName());
+
private final AtomicBoolean signalCaught = new AtomicBoolean(false);
private final Supervisor supervisor;
private final ConfigProxyRpcServer rpcServer;
- private ConfigSourceSet configSource;
-
- private volatile ConfigSourceClient configClient;
-
- private final MemoryCache memoryCache;
private final FileDistributionAndUrlDownload fileDistributionAndUrlDownload;
+ private ConfigSourceSet configSource;
+ private volatile ConfigSourceClient configClient;
private volatile Mode mode = new Mode(DEFAULT);
- ProxyServer(Spec spec, ConfigSourceSet source, MemoryCache memoryCache, ConfigSourceClient configClient) {
+ ProxyServer(Spec spec, ConfigSourceSet source, ConfigSourceClient configClient) {
this.configSource = source;
supervisor = new Supervisor(new Transport("proxy-server", JRT_TRANSPORT_THREADS)).setDropEmptyBuffers(true);
log.log(Level.FINE, () -> "Using config source '" + source);
- this.memoryCache = memoryCache;
this.rpcServer = createRpcServer(spec);
- this.configClient = (configClient == null) ? createRpcClient(rpcServer, source, memoryCache) : configClient;
+ this.configClient = (configClient == null) ? createRpcClient(rpcServer, source) : configClient;
this.fileDistributionAndUrlDownload = new FileDistributionAndUrlDownload(supervisor, source);
}
@@ -97,12 +93,12 @@ public class ProxyServer implements Runnable {
switch (newMode.getMode()) {
case MEMORYCACHE:
configClient.shutdownSourceConnections();
- configClient = new MemoryCacheConfigClient(memoryCache);
+ configClient = new MemoryCacheConfigClient();
this.mode = new Mode(modeName);
break;
case DEFAULT:
flush();
- configClient = createRpcClient(rpcServer, configSource, memoryCache);
+ configClient = createRpcClient(rpcServer, configSource);
this.mode = new Mode(modeName);
break;
default:
@@ -115,8 +111,8 @@ public class ProxyServer implements Runnable {
return (spec == null) ? null : new ConfigProxyRpcServer(this, supervisor, spec); // TODO: Try to avoid first argument being 'this'
}
- private static RpcConfigSourceClient createRpcClient(RpcServer rpcServer, ConfigSourceSet source, MemoryCache memoryCache) {
- return new RpcConfigSourceClient(rpcServer, source, memoryCache);
+ private static RpcConfigSourceClient createRpcClient(RpcServer rpcServer, ConfigSourceSet source) {
+ return new RpcConfigSourceClient(rpcServer, source);
}
private void setupSignalHandler() {
@@ -159,7 +155,7 @@ public class ProxyServer implements Runnable {
Event.started("configproxy");
ConfigSourceSet configSources = new ConfigSourceSet(properties.configSources);
- ProxyServer proxyServer = new ProxyServer(new Spec(null, port), configSources, new MemoryCache(), null);
+ ProxyServer proxyServer = new ProxyServer(new Spec(null, port), configSources, null);
// catch termination and interrupt signal
proxyServer.setupSignalHandler();
Thread proxyserverThread = threadFactory.newThread(proxyServer);
@@ -184,7 +180,7 @@ public class ProxyServer implements Runnable {
// Cancels all config instances and flushes the cache. When this method returns,
// the cache will not be updated again before someone calls getConfig().
private synchronized void flush() {
- memoryCache.clear();
+ configClient.memoryCache().clear();
configClient.cancel();
}
@@ -200,8 +196,8 @@ public class ProxyServer implements Runnable {
Event.stopping("configproxy", "stop complete");
}
- MemoryCache getMemoryCache() {
- return memoryCache;
+ MemoryCache memoryCache() {
+ return configClient.memoryCache();
}
String getActiveSourceConnection() {
@@ -215,7 +211,7 @@ public class ProxyServer implements Runnable {
void updateSourceConnections(List<String> sources) {
configSource = new ConfigSourceSet(sources);
flush();
- configClient = createRpcClient(rpcServer, configSource, memoryCache);
+ configClient = createRpcClient(rpcServer, configSource);
}
DelayedResponses delayedResponses() {
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 5df7b1fc021..ce60e2cea67 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
@@ -57,10 +57,10 @@ class RpcConfigSourceClient implements ConfigSourceClient, Runnable {
Executors.newScheduledThreadPool(1, new DaemonThreadFactory("delayed responses"));
private final ScheduledFuture<?> delayedResponsesFuture;
- RpcConfigSourceClient(RpcServer rpcServer, ConfigSourceSet configSourceSet, MemoryCache memoryCache) {
+ RpcConfigSourceClient(RpcServer rpcServer, ConfigSourceSet configSourceSet) {
this.rpcServer = rpcServer;
this.configSourceSet = configSourceSet;
- this.memoryCache = memoryCache;
+ this.memoryCache = new MemoryCache();
this.delayedResponses = new DelayedResponses();
checkConfigSources();
nextConfigFuture = nextConfigScheduler.scheduleAtFixedRate(this, 0, 10, MILLISECONDS);
@@ -243,9 +243,10 @@ class RpcConfigSourceClient implements ConfigSourceClient, Runnable {
}
@Override
- public DelayedResponses delayedResponses() {
- return delayedResponses;
- }
+ public DelayedResponses delayedResponses() { return delayedResponses; }
+
+ @Override
+ public MemoryCache memoryCache() { return memoryCache; }
private void updateWithNewConfig(RawConfig newConfig) {
log.log(Level.FINE, () -> "config to be returned for '" + newConfig.getKey() +
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServerTest.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServerTest.java
index fbe7a6c74d9..7906edc06ee 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServerTest.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ConfigProxyRpcServerTest.java
@@ -92,7 +92,7 @@ public class ConfigProxyRpcServerTest {
assertThat(ret.length, is(0));
final RawConfig config = ProxyServerTest.fooConfig;
- server.proxyServer().getMemoryCache().update(config);
+ server.proxyServer().memoryCache().update(config);
req = new Request("listCachedConfig");
client.invoke(req);
assertFalse(req.errorMessage(), req.isError());
@@ -119,7 +119,7 @@ public class ConfigProxyRpcServerTest {
assertThat(ret.length, is(0));
final RawConfig config = ProxyServerTest.fooConfig;
- server.proxyServer().getMemoryCache().update(config);
+ server.proxyServer().memoryCache().update(config);
req = new Request("listCachedConfigFull");
client.invoke(req);
assertFalse(req.errorMessage(), req.isError());
@@ -261,7 +261,7 @@ public class ConfigProxyRpcServerTest {
}
private static ProxyServer createTestServer(ConfigSourceSet source) {
- return new ProxyServer(null, source, new MemoryCache(), null);
+ return new ProxyServer(null, source, null);
}
private static class TestServer implements AutoCloseable {
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClientTest.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClientTest.java
index 51d0b983764..ae7350b11e0 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClientTest.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MemoryCacheConfigClientTest.java
@@ -16,9 +16,8 @@ public class MemoryCacheConfigClientTest {
@Test
public void basic() {
- MemoryCache cache = new MemoryCache();
- cache.update(ConfigTester.fooConfig);
- MemoryCacheConfigClient client = new MemoryCacheConfigClient(cache);
+ MemoryCacheConfigClient client = new MemoryCacheConfigClient();
+ client.memoryCache().update(ConfigTester.fooConfig);
assertThat(client.getConfig(ConfigTester.fooConfig, null), is(ConfigTester.fooConfig));
assertNull(client.getConfig(ConfigTester.barConfig, null));
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSourceClient.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSourceClient.java
index c0efc1cb355..2871db0a919 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSourceClient.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSourceClient.java
@@ -18,9 +18,9 @@ public class MockConfigSourceClient implements ConfigSourceClient{
private final MemoryCache memoryCache;
private final DelayedResponses delayedResponses = new DelayedResponses();
- MockConfigSourceClient(MockConfigSource configSource, MemoryCache memoryCache) {
+ MockConfigSourceClient(MockConfigSource configSource) {
this.configSource = configSource;
- this.memoryCache = memoryCache;
+ this.memoryCache = new MemoryCache();
}
@Override
@@ -56,4 +56,7 @@ public class MockConfigSourceClient implements ConfigSourceClient{
@Override
public DelayedResponses delayedResponses() { return delayedResponses; }
+ @Override
+ public MemoryCache memoryCache() { return memoryCache; }
+
}
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ProxyServerTest.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ProxyServerTest.java
index cdda2bf6e77..9c36190da34 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ProxyServerTest.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/ProxyServerTest.java
@@ -25,9 +25,8 @@ import static org.junit.Assert.assertTrue;
*/
public class ProxyServerTest {
- private final MemoryCache memoryCache = new MemoryCache();
private final MockConfigSource source = new MockConfigSource();
- private final MockConfigSourceClient client = new MockConfigSourceClient(source, memoryCache);
+ private final MockConfigSourceClient client = new MockConfigSourceClient(source);
private ProxyServer proxy;
static final RawConfig fooConfig = ConfigTester.fooConfig;
@@ -46,7 +45,7 @@ public class ProxyServerTest {
source.clear();
source.put(fooConfig.getKey(), createConfigWithNextConfigGeneration(fooConfig, 0));
source.put(errorConfigKey, createConfigWithNextConfigGeneration(fooConfig, ErrorCode.UNKNOWN_DEFINITION));
- proxy = createTestServer(source, client, memoryCache);
+ proxy = createTestServer(source, client);
}
@After
@@ -57,10 +56,10 @@ public class ProxyServerTest {
@Test
public void basic() {
assertTrue(proxy.getMode().isDefault());
- assertThat(proxy.getMemoryCache().size(), is(0));
+ assertThat(proxy.memoryCache().size(), is(0));
ConfigTester tester = new ConfigTester();
- final MemoryCache memoryCache = proxy.getMemoryCache();
+ MemoryCache memoryCache = proxy.memoryCache();
assertEquals(0, memoryCache.size());
RawConfig res = proxy.resolveConfig(tester.createRequest(fooConfig));
assertNotNull(res);
@@ -74,7 +73,7 @@ public class ProxyServerTest {
*/
@Test
public void testModeSwitch() {
- ProxyServer proxy = createTestServer(source, client, new MemoryCache());
+ ProxyServer proxy = createTestServer(source, client);
assertTrue(proxy.getMode().isDefault());
for (String mode : Mode.modes()) {
@@ -109,7 +108,7 @@ public class ProxyServerTest {
@Test
public void testGetConfigAndCaching() {
ConfigTester tester = new ConfigTester();
- final MemoryCache memoryCache = proxy.getMemoryCache();
+ MemoryCache memoryCache = proxy.memoryCache();
assertEquals(0, memoryCache.size());
RawConfig res = proxy.resolveConfig(tester.createRequest(fooConfig));
assertNotNull(res);
@@ -134,14 +133,14 @@ public class ProxyServerTest {
// Simulate an error response
source.put(fooConfig.getKey(), createConfigWithNextConfigGeneration(fooConfig, ErrorCode.INTERNAL_ERROR));
- final MemoryCache cacheManager = proxy.getMemoryCache();
- assertEquals(0, cacheManager.size());
+ MemoryCache memoryCache = proxy.memoryCache();
+ assertEquals(0, memoryCache.size());
RawConfig res = proxy.resolveConfig(tester.createRequest(fooConfig));
assertNotNull(res);
assertNotNull(res.getPayload());
assertTrue(res.isError());
- assertEquals(0, cacheManager.size());
+ assertEquals(0, memoryCache.size());
// Put a version of the same config into backend without error and see that it now works (i.e. we are
// not getting a cached response (of the error in the previous request)
@@ -152,12 +151,12 @@ public class ProxyServerTest {
assertNotNull(res);
assertNotNull(res.getPayload().getData());
assertThat(res.getPayload().toString(), is(ConfigTester.fooPayload.toString()));
- assertEquals(1, cacheManager.size());
+ assertEquals(1, memoryCache.size());
JRTServerConfigRequest newRequestBasedOnResponse = tester.createRequest(res);
RawConfig res2 = proxy.resolveConfig(newRequestBasedOnResponse);
assertFalse(ProxyServer.configOrGenerationHasChanged(res2, newRequestBasedOnResponse));
- assertEquals(1, cacheManager.size());
+ assertEquals(1, memoryCache.size());
}
/**
@@ -169,7 +168,7 @@ public class ProxyServerTest {
@Test
public void testNoCachingOfEmptyConfig() {
ConfigTester tester = new ConfigTester();
- MemoryCache cache = proxy.getMemoryCache();
+ MemoryCache cache = proxy.memoryCache();
assertEquals(0, cache.size());
RawConfig res = proxy.resolveConfig(tester.createRequest(fooConfig));
@@ -222,10 +221,8 @@ public class ProxyServerTest {
assertThat(properties.configSources[0], is(ProxyServer.DEFAULT_PROXY_CONFIG_SOURCES));
}
- private static ProxyServer createTestServer(ConfigSourceSet source,
- ConfigSourceClient configSourceClient,
- MemoryCache memoryCache) {
- return new ProxyServer(null, source, memoryCache, configSourceClient);
+ private static ProxyServer createTestServer(ConfigSourceSet source, ConfigSourceClient configSourceClient) {
+ return new ProxyServer(null, source, configSourceClient);
}
static RawConfig createConfigWithNextConfigGeneration(RawConfig config, int errorCode) {
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClientTest.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClientTest.java
index 372c8c41c99..f452289c6d8 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClientTest.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/RpcConfigSourceClientTest.java
@@ -27,7 +27,7 @@ public class RpcConfigSourceClientTest {
@Before
public void setup() {
rpcServer = new MockRpcServer();
- rpcConfigSourceClient = new RpcConfigSourceClient(rpcServer, new MockConfigSource(), new MemoryCache());
+ rpcConfigSourceClient = new RpcConfigSourceClient(rpcServer, new MockConfigSource());
}
@Test