summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2021-05-03 15:50:22 +0200
committerGitHub <noreply@github.com>2021-05-03 15:50:22 +0200
commit896785b1a3b069ed13d8b51e7d35d7d333d80d02 (patch)
treef3b096ea87c091911fed90bdb639f778dcd5c608
parent873dad89ac47f3c09763806cebcb376323fc37c2 (diff)
parente071fc034b578542f38c0c3638b7201b855bf8b1 (diff)
Merge pull request #17714 from vespa-engine/jonmv/shut-down-transport
Jonmv/shut down transport
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java1
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java1
-rw-r--r--jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java1
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java19
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java29
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImplTest.java3
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorTest.java4
7 files changed, 38 insertions, 20 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java
index 8649e7cc11a..e180016f286 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java
@@ -53,6 +53,7 @@ public class SlobrokClient implements NodeLookup {
this.connectionSpecs = slobrokConnectionSpecs;
shutdown();
supervisor = new Supervisor(new Transport("slobrok-client"));
+ supervisor.useSmallBuffers();
SlobrokList slist = new SlobrokList();
slist.setup(slobrokConnectionSpecs);
mirror = new Mirror(supervisor, slist);
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
index 030a0d2588c..94dfabb2c4f 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
@@ -59,6 +59,7 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy {
pattern = args[1];
session = pattern.substring(pos);
orb = new Supervisor(new Transport("externpolicy"));
+ orb.useSmallBuffers();
mirror = new Mirror(orb, slobroks);
error = null;
}
diff --git a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java
index 6e39e2a3dbd..996459dc5db 100644
--- a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java
+++ b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java
@@ -58,7 +58,6 @@ public class Mirror implements IMirror {
**/
public Mirror(Supervisor orb, SlobrokList slobroks, BackOffPolicy bop) {
this.orb = orb;
- orb.useSmallBuffers();
this.slobroks = slobroks;
this.backOff = bop;
transportThread = orb.transport().selectThread();
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java
index 976aab7f732..3ba505d0ab4 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java
@@ -24,21 +24,19 @@ public class SlobrokMonitor implements AutoCloseable {
private final SlobrokList slobrokList;
private final Mirror mirror;
- private final Transport transport;
- SlobrokMonitor() {
- this(new SlobrokList(), new Transport("slobrok-monitor"));
+ SlobrokMonitor(Supervisor supervisor) {
+ this(new SlobrokList(), supervisor);
+ }
+
+ private SlobrokMonitor(SlobrokList slobrokList, Supervisor supervisor) {
+ this(slobrokList, new Mirror(supervisor, slobrokList));
}
// Package-private for testing.
- SlobrokMonitor(SlobrokList slobrokList, Mirror mirror, Transport transport) {
+ SlobrokMonitor(SlobrokList slobrokList, Mirror mirror) {
this.slobrokList = slobrokList;
this.mirror = mirror;
- this.transport = transport;
- }
-
- private SlobrokMonitor(SlobrokList slobrokList, Transport transport) {
- this(slobrokList, new Mirror(new Supervisor(transport), slobrokList), transport);
}
void updateSlobrokList(ApplicationInfo application) {
@@ -74,9 +72,6 @@ public class SlobrokMonitor implements AutoCloseable {
@Override
public void close() {
mirror.shutdown();
- transport.sync() // Wait for mirror shutdown.
- .shutdown() // Signal shutdown of transport threads.
- .join(); // Wait for shutdown of transport threads.
}
boolean registeredInSlobrok(String slobrokServiceName) {
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java
index 2cc3359d449..0c9148ad834 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java
@@ -2,8 +2,11 @@
package com.yahoo.vespa.service.slobrok;
import com.google.inject.Inject;
+import com.yahoo.component.AbstractComponent;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.jrt.Supervisor;
+import com.yahoo.jrt.Transport;
import com.yahoo.jrt.slobrok.api.Mirror;
import java.util.logging.Level;
import com.yahoo.vespa.applicationmodel.ClusterId;
@@ -21,7 +24,7 @@ import java.util.Optional;
import java.util.function.Supplier;
import java.util.logging.Logger;
-public class SlobrokMonitorManagerImpl implements SlobrokApi, MonitorManager {
+public class SlobrokMonitorManagerImpl extends AbstractComponent implements SlobrokApi, MonitorManager {
private static final Logger logger =
Logger.getLogger(SlobrokMonitorManagerImpl.class.getName());
@@ -30,14 +33,29 @@ public class SlobrokMonitorManagerImpl implements SlobrokApi, MonitorManager {
private final Object monitor = new Object();
private final HashMap<ApplicationId, SlobrokMonitor> slobrokMonitors = new HashMap<>();
private final DuperModelManager duperModel;
+ private final Transport transport;
+
+ private static int getTransportThreadCount() {
+ return Math.max(4, Runtime.getRuntime().availableProcessors());
+ }
@Inject
public SlobrokMonitorManagerImpl(DuperModelManager duperModel) {
- this(SlobrokMonitor::new, duperModel);
+ this(new Transport("slobrok-monitor", getTransportThreadCount() / 4), duperModel);
}
- SlobrokMonitorManagerImpl(Supplier<SlobrokMonitor> slobrokMonitorFactory, DuperModelManager duperModel) {
+ private SlobrokMonitorManagerImpl(Transport transport, DuperModelManager duperModel) {
+ this(transport, new Supervisor(transport), duperModel);
+ }
+
+ private SlobrokMonitorManagerImpl(Transport transport, Supervisor orb, DuperModelManager duperModel) {
+ this(() -> new SlobrokMonitor(orb), transport, duperModel);
+ orb.useSmallBuffers();
+ }
+
+ SlobrokMonitorManagerImpl(Supplier<SlobrokMonitor> slobrokMonitorFactory, Transport transport, DuperModelManager duperModel) {
this.slobrokMonitorFactory = slobrokMonitorFactory;
+ this.transport = transport;
this.duperModel = duperModel;
}
@@ -77,6 +95,11 @@ public class SlobrokMonitorManagerImpl implements SlobrokApi, MonitorManager {
}
@Override
+ public void deconstruct() {
+ transport.shutdown().join();
+ }
+
+ @Override
public List<Mirror.Entry> lookup(ApplicationId id, String pattern) {
synchronized (monitor) {
SlobrokMonitor slobrokMonitor = slobrokMonitors.get(id);
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImplTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImplTest.java
index eca7d695be6..8fabb385bb2 100644
--- a/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImplTest.java
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImplTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.service.slobrok;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.jrt.Transport;
import com.yahoo.vespa.applicationmodel.ClusterId;
import com.yahoo.vespa.applicationmodel.ConfigId;
import com.yahoo.vespa.applicationmodel.ServiceStatus;
@@ -28,7 +29,7 @@ public class SlobrokMonitorManagerImplTest {
private final DuperModelManager duperModelManager = mock(DuperModelManager.class);
private final SlobrokMonitorManagerImpl slobrokMonitorManager =
- new SlobrokMonitorManagerImpl(slobrokMonitorFactory, duperModelManager);
+ new SlobrokMonitorManagerImpl(slobrokMonitorFactory, mock(Transport.class), duperModelManager);
private final SlobrokMonitor slobrokMonitor = mock(SlobrokMonitor.class);
private final ApplicationId applicationId = ApplicationId.from("tenant", "app", "instance");
private final ApplicationInfo application = mock(ApplicationInfo.class);
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorTest.java
index 3297823a0be..7757aed8ac7 100644
--- a/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorTest.java
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorTest.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.service.slobrok;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.model.api.SuperModel;
-import com.yahoo.jrt.Transport;
import com.yahoo.jrt.slobrok.api.Mirror;
import com.yahoo.jrt.slobrok.api.SlobrokList;
import com.yahoo.vespa.service.model.ExampleModel;
@@ -15,8 +14,7 @@ import static org.mockito.Mockito.verify;
public class SlobrokMonitorTest {
private final SlobrokList slobrokList = mock(SlobrokList.class);
private final Mirror mirror = mock(Mirror.class);
- private final Transport transport = mock(Transport.class);
- private final SlobrokMonitor slobrokMonitor = new SlobrokMonitor(slobrokList, mirror, transport);
+ private final SlobrokMonitor slobrokMonitor = new SlobrokMonitor(slobrokList, mirror);
@Test
public void testUpdateSlobrokList() {