diff options
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.java | 28 |
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); |