summaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-03-19 13:28:57 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-03-19 13:28:57 +0100
commit2b129a08525562b1a9f2ac241541246952d61adc (patch)
tree776c6c4eb9e8f582da2102c1c2f81e37b98c2a30 /metrics-proxy
parentfc4c42aee2855ab047297bf7b313aa17f4db2ddf (diff)
Reuse Supervisor instance
This will allow the client to reuse existing SSL sessions
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/ConfigSentinelClient.java39
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/ConfigSentinelClientTest.java66
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockConfigSentinelClient.java11
3 files changed, 65 insertions, 51 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/ConfigSentinelClient.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/ConfigSentinelClient.java
index 9fceafc8849..b5bd6c073cd 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/ConfigSentinelClient.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/ConfigSentinelClient.java
@@ -2,6 +2,7 @@
package ai.vespa.metricsproxy.service;
import com.google.inject.Inject;
+import com.yahoo.component.AbstractComponent;
import com.yahoo.log.LogLevel;
import com.yahoo.jrt.ErrorCode;
@@ -20,13 +21,21 @@ import java.util.logging.Logger;
/**
* Connects to the config sentinel and gets information like pid for the services on the node
*/
-public class ConfigSentinelClient {
+public class ConfigSentinelClient extends AbstractComponent {
private final static Logger log = Logger.getLogger(ConfigSentinelClient.class.getName());
+ private final Supervisor supervisor = new Supervisor(new Transport());
+
@Inject
public ConfigSentinelClient() {
}
+ @Override
+ public void deconstruct() {
+ supervisor.transport().shutdown().join();
+ super.deconstruct();
+ }
+
/**
* Update all services reading from config sentinel
*
@@ -145,24 +154,26 @@ public class ConfigSentinelClient {
String sentinelLs() {
String servicelist = "";
- Supervisor supervisor = new Supervisor(new Transport());
int rpcPort = 19097;
Spec spec = new Spec("localhost", rpcPort);
Target connection = supervisor.connect(spec);
- if (connection.isValid()) {
- Request req = new Request("sentinel.ls");
- connection.invokeSync(req, 5.0);
- if (req.errorCode() == ErrorCode.NONE &&
- req.checkReturnTypes("s"))
- {
- servicelist = req.returnValues().get(0).asString();
+ try {
+ if (connection.isValid()) {
+ Request req = new Request("sentinel.ls");
+ connection.invokeSync(req, 5.0);
+ if (req.errorCode() == ErrorCode.NONE &&
+ req.checkReturnTypes("s"))
+ {
+ servicelist = req.returnValues().get(0).asString();
+ } else {
+ log.log(LogLevel.WARNING, "Bad answer to RPC request: " + req.errorMessage());
+ }
} else {
- log.log(LogLevel.WARNING, "Bad answer to RPC request: " + req.errorMessage());
+ log.log(LogLevel.WARNING, "Could not connect to sentinel at: "+spec);
}
- } else {
- log.log(LogLevel.WARNING, "Could not connect to sentinel at: "+spec);
+ return servicelist;
+ } finally {
+ connection.close();
}
- supervisor.transport().shutdown().join();
- return servicelist;
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/ConfigSentinelClientTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/ConfigSentinelClientTest.java
index c28e16a8eaa..810596d6d0b 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/ConfigSentinelClientTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/ConfigSentinelClientTest.java
@@ -26,38 +26,39 @@ public class ConfigSentinelClientTest {
services.add(qrserver);
services.add(docproc);
- MockConfigSentinelClient client = new MockConfigSentinelClient(configsentinel);
- client.updateServiceStatuses(services);
+ try (MockConfigSentinelClient client = new MockConfigSentinelClient(configsentinel)) {
+ client.updateServiceStatuses(services);
- assertThat(qrserver.getPid(), is(6520));
- assertThat(qrserver.getState(), is("RUNNING"));
- assertThat(qrserver.isAlive(), is(true));
- assertThat(searchnode4.getPid(), is(6534));
- assertThat(searchnode4.getState(), is("RUNNING"));
- assertThat(searchnode4.isAlive(), is(true));
+ assertThat(qrserver.getPid(), is(6520));
+ assertThat(qrserver.getState(), is("RUNNING"));
+ assertThat(qrserver.isAlive(), is(true));
+ assertThat(searchnode4.getPid(), is(6534));
+ assertThat(searchnode4.getState(), is("RUNNING"));
+ assertThat(searchnode4.isAlive(), is(true));
- assertThat(docproc.getPid(), is(-1));
- assertThat(docproc.getState(), is("FINISHED"));
- assertThat(docproc.isAlive(), is(false));
+ assertThat(docproc.getPid(), is(-1));
+ assertThat(docproc.getState(), is("FINISHED"));
+ assertThat(docproc.isAlive(), is(false));
- configsentinel.reConfigure();
+ configsentinel.reConfigure();
- client.ping(docproc);
- assertThat(docproc.getPid(), is(100));
- assertThat(docproc.getState(), is("RUNNING"));
- assertThat(docproc.isAlive(), is(true));
+ client.ping(docproc);
+ assertThat(docproc.getPid(), is(100));
+ assertThat(docproc.getState(), is("RUNNING"));
+ assertThat(docproc.isAlive(), is(true));
- //qrserver has yet not been checked
- assertThat(qrserver.isAlive(), is(true));
+ //qrserver has yet not been checked
+ assertThat(qrserver.isAlive(), is(true));
- client.updateServiceStatuses(services);
+ client.updateServiceStatuses(services);
- assertThat(docproc.getPid(), is(100));
- assertThat(docproc.getState(), is("RUNNING"));
- assertThat(docproc.isAlive(), is(true));
- //qrserver is no longer running on this node - so should be false
- assertThat(qrserver.isAlive(), is(false));
+ assertThat(docproc.getPid(), is(100));
+ assertThat(docproc.getState(), is("RUNNING"));
+ assertThat(docproc.isAlive(), is(true));
+ //qrserver is no longer running on this node - so should be false
+ assertThat(qrserver.isAlive(), is(false));
+ }
}
@Test
@@ -88,15 +89,16 @@ public class ConfigSentinelClientTest {
services.add(containerClusterController);
services.add(notPresent);
- MockConfigSentinelClient client = new MockConfigSentinelClient(configsentinel);
- client.updateServiceStatuses(services);
- assertThat(container.isAlive(),is(true));
- assertThat(container.getPid(),is(14338));
- assertThat(container.getState(),is("RUNNING"));
+ try (MockConfigSentinelClient client = new MockConfigSentinelClient(configsentinel)) {
+ client.updateServiceStatuses(services);
+ assertThat(container.isAlive(),is(true));
+ assertThat(container.getPid(),is(14338));
+ assertThat(container.getState(),is("RUNNING"));
- assertThat(containerClusterController.isAlive(),is(true));
- assertThat(containerClusterController.getPid(),is(25020));
- assertThat(containerClusterController.getState(),is("RUNNING"));
+ assertThat(containerClusterController.isAlive(),is(true));
+ assertThat(containerClusterController.getPid(),is(25020));
+ assertThat(containerClusterController.getState(),is("RUNNING"));
+ }
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockConfigSentinelClient.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockConfigSentinelClient.java
index 4c660711c5d..55702b4dc45 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockConfigSentinelClient.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockConfigSentinelClient.java
@@ -1,10 +1,6 @@
// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.service;
-import com.yahoo.log.LogLevel;
-
-import java.util.ArrayList;
-import java.util.List;
import java.util.logging.Logger;
/**
@@ -12,7 +8,7 @@ import java.util.logging.Logger;
*
* @author hmusum
*/
-public class MockConfigSentinelClient extends ConfigSentinelClient {
+public class MockConfigSentinelClient extends ConfigSentinelClient implements AutoCloseable {
private final ConfigSentinelDummy configSentinel;
private final static Logger log = Logger.getLogger(MockConfigSentinelClient.class.getPackage().getName());
@@ -25,4 +21,9 @@ public class MockConfigSentinelClient extends ConfigSentinelClient {
String sentinelLs() {
return configSentinel.getServiceList();
}
+
+ @Override
+ public void close() {
+ super.deconstruct();
+ }
}