aboutsummaryrefslogtreecommitdiffstats
path: root/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java')
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitorManagerImpl.java28
1 files changed, 25 insertions, 3 deletions
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..6a7e2dea084 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,28 @@ 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);
+ }
+
+ SlobrokMonitorManagerImpl(Supplier<SlobrokMonitor> slobrokMonitorFactory, Transport transport, DuperModelManager duperModel) {
this.slobrokMonitorFactory = slobrokMonitorFactory;
+ this.transport = transport;
this.duperModel = duperModel;
}
@@ -77,6 +94,11 @@ public class SlobrokMonitorManagerImpl implements SlobrokApi, MonitorManager {
}
@Override
+ public void deconstruct() {
+ transport.sync().shutdown().join();
+ }
+
+ @Override
public List<Mirror.Entry> lookup(ApplicationId id, String pattern) {
synchronized (monitor) {
SlobrokMonitor slobrokMonitor = slobrokMonitors.get(id);