diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2021-05-03 15:50:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-03 15:50:22 +0200 |
commit | 896785b1a3b069ed13d8b51e7d35d7d333d80d02 (patch) | |
tree | f3b096ea87c091911fed90bdb639f778dcd5c608 | |
parent | 873dad89ac47f3c09763806cebcb376323fc37c2 (diff) | |
parent | e071fc034b578542f38c0c3638b7201b855bf8b1 (diff) |
Merge pull request #17714 from vespa-engine/jonmv/shut-down-transport
Jonmv/shut down transport
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() { |