summaryrefslogtreecommitdiffstats
path: root/service-monitor
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2017-09-07 16:52:56 +0200
committerHåkon Hallingstad <hakon@oath.com>2017-09-07 16:52:56 +0200
commit991703cdd5846c0767a3c6bdb5d6bd300900b627 (patch)
tree8cc66b3a1ba6dc89852cd6014adbb1f01a32b717 /service-monitor
parent64c4f16151d121414f2b3c5e44eda8f06ba033e6 (diff)
Move SlobrokMonitor to Java
Diffstat (limited to 'service-monitor')
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/JavaSlobrokMonitor.java48
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SingleClusterServiceMonitor.java68
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SlobrokMonitor.java99
-rw-r--r--service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokAndConfigIntersector.scala2
-rw-r--r--service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokMonitor.scala46
5 files changed, 100 insertions, 163 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/JavaSlobrokMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/JavaSlobrokMonitor.java
deleted file mode 100644
index 9b5cb64d0c2..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/JavaSlobrokMonitor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor;
-
-import com.yahoo.jrt.Supervisor;
-import com.yahoo.jrt.Transport;
-import com.yahoo.jrt.slobrok.api.Mirror;
-import com.yahoo.jrt.slobrok.api.SlobrokList;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * Thin wrapper around {@link Mirror} class, that is a bit nicer to work with.
- *
- * @author bakksjo
- */
-public class JavaSlobrokMonitor {
- private final Mirror mirror;
-
- public JavaSlobrokMonitor(final List<String> slobroks) {
- final Supervisor supervisor = new Supervisor(new Transport());
- final SlobrokList slobrokList = new SlobrokList();
- slobrokList.setup(slobroks.toArray(new String[0]));
- mirror = new Mirror(supervisor, slobrokList);
- }
-
- public Map<String, String> getRegisteredServices() throws ServiceTemporarilyUnavailableException {
- if (!mirror.ready()) {
- throw new ServiceTemporarilyUnavailableException("Slobrok mirror not ready");
- }
- // TODO: Get _all_ services without resorting to a hack like this.
- return Stream.iterate("*", pattern -> pattern + "/*").limit(10)
- .flatMap(pattern -> Stream.of(mirror.lookup(pattern)))
- .collect(Collectors.toMap(Mirror.Entry::getName, Mirror.Entry::getSpec));
- }
-
- public void shutdown() {
- mirror.shutdown();
- }
-
- public static class ServiceTemporarilyUnavailableException extends Exception {
- public ServiceTemporarilyUnavailableException(final String msg) {
- super(msg);
- }
- }
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SingleClusterServiceMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SingleClusterServiceMonitor.java
deleted file mode 100644
index f8f89c89f97..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SingleClusterServiceMonitor.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor;
-
-import com.yahoo.cloud.config.SlobroksConfig;
-import com.yahoo.component.AbstractComponent;
-
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-
-/**
- * This class can be used as a component, and will regularly dump known slobrok entries to the log. It will use
- * the slobrok service configured for the current application.
- *
- * It is quite noisy and not useful for anything but testing.
- *
- * @author bakksjo
- */
-public class SingleClusterServiceMonitor extends AbstractComponent {
- private static final Logger logger = Logger.getLogger(SingleClusterServiceMonitor.class.getName());
-
- private volatile JavaSlobrokMonitor slobrokMonitor;
-
- public SingleClusterServiceMonitor(final SlobroksConfig slobroksConfig) {
- this.slobrokMonitor = new JavaSlobrokMonitor(getSlobrokSpecs(slobroksConfig));
-
- new Thread(() -> {
- while (true) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- final JavaSlobrokMonitor slobrok = slobrokMonitor;
- if (slobrok == null) {
- return;
- }
- final Map<String, String> services;
- try {
- services = slobrok.getRegisteredServices();
- } catch (JavaSlobrokMonitor.ServiceTemporarilyUnavailableException e) {
- logger.info("Slobrok monitor temporarily unavailable");
- continue;
- }
- if (services.isEmpty()) {
- logger.info("Slobrok lookup returned no entries");
- }
- services.forEach((serviceName, serviceSpec) ->
- logger.info("Slobrok entry: " + serviceName + " => " + serviceSpec));
- }
- }).start();
- }
-
- @Override
- public void deconstruct() {
- final JavaSlobrokMonitor slobrok = slobrokMonitor;
- slobrokMonitor = null;
- // Nothing prevents the mirror from being in use while we are shutting down, but so be it (for now at least).
- slobrok.shutdown();
- }
-
- private static List<String> getSlobrokSpecs(final SlobroksConfig slobroksConfig) {
- return slobroksConfig.slobrok().stream()
- .map(SlobroksConfig.Slobrok::connectionspec)
- .collect(Collectors.toList());
- }
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SlobrokMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SlobrokMonitor.java
new file mode 100644
index 00000000000..f1a8672e963
--- /dev/null
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SlobrokMonitor.java
@@ -0,0 +1,99 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.vespa.service.monitor;
+
+import com.yahoo.jrt.Supervisor;
+import com.yahoo.jrt.Transport;
+import com.yahoo.jrt.slobrok.api.Mirror;
+import com.yahoo.jrt.slobrok.api.SlobrokList;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class SlobrokMonitor {
+ private final Supervisor supervisor = new Supervisor(new Transport());
+ private final SlobrokList slobrokList = new SlobrokList();
+ private final Mirror mirror = new Mirror(supervisor, slobrokList);
+
+ void setSlobrokConnectionSpecs(List<String> slobroks) {
+ slobrokList.setup(slobroks.toArray(new String[0]));
+ }
+
+ Map<SlobrokServiceName, SlobrokServiceSpec> getRegisteredServices() {
+ if (!mirror.ready()) {
+ return new HashMap<>();
+ }
+
+ Mirror.Entry[] mirrorEntries = mirror.lookup("**");
+ return Arrays.asList(mirrorEntries).stream().collect(Collectors.toMap(
+ entry -> new SlobrokServiceName(entry.getName()),
+ entry -> new SlobrokServiceSpec(entry.getSpec())));
+ }
+
+ boolean isRegistered(SlobrokServiceName serviceName) {
+ return mirror.lookup(serviceName.s()).length != 0;
+ }
+
+ void shutdown() {
+ mirror.shutdown();
+ }
+
+ public static class SlobrokServiceName {
+ private final String name;
+
+ SlobrokServiceName(String name) {
+ this.name = name;
+ }
+
+ // TODO: Fix spec
+ public String s() {
+ return name;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SlobrokServiceName that = (SlobrokServiceName) o;
+
+ return name.equals(that.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+ }
+
+ public static class SlobrokServiceSpec {
+ private final String spec;
+
+ SlobrokServiceSpec(String spec) {
+ this.spec = spec;
+ }
+
+ // TODO: Fix name
+ public String s() {
+ return spec;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SlobrokServiceSpec that = (SlobrokServiceSpec) o;
+
+ return spec.equals(that.spec);
+ }
+
+ @Override
+ public int hashCode() {
+ return spec.hashCode();
+ }
+ }
+}
diff --git a/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokAndConfigIntersector.scala b/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokAndConfigIntersector.scala
index 958a9bc462c..5ee19dda0a6 100644
--- a/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokAndConfigIntersector.scala
+++ b/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokAndConfigIntersector.scala
@@ -99,7 +99,7 @@ class SlobrokAndConfigIntersector(
instancesObservables.slobroksPerInstance.subscribe { slobrokServiceMap =>
val nextSlobrokMonitorMap = slobrokServiceMap.map { case (instanceReference, slobrokServices) =>
val slobrokMonitor = latestSlobrokMonitorMap.getOrElse(instanceReference, new SlobrokMonitor())
- slobrokMonitor.setSlobrokConnectionSpecs(asConnectionSpecs(slobrokServices))
+ slobrokMonitor.setSlobrokConnectionSpecs(asConnectionSpecs(slobrokServices).toList.asJava)
(instanceReference, slobrokMonitor)
}
val removedSlobrokMonitors = (latestSlobrokMonitorMap -- nextSlobrokMonitorMap.keySet).values
diff --git a/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokMonitor.scala b/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokMonitor.scala
deleted file mode 100644
index f5ae2eeb510..00000000000
--- a/service-monitor/src/main/scala/com/yahoo/vespa/service/monitor/SlobrokMonitor.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor
-
-import com.yahoo.jrt.slobrok.api.Mirror.Entry
-import com.yahoo.jrt.slobrok.api.{Mirror, SlobrokList}
-import com.yahoo.jrt.{Supervisor, Transport}
-import com.yahoo.vespa.service.monitor.SlobrokMonitor._
-
-import scala.collection.JavaConverters._
-
-/**
- * @author bakksjo
- */
-class SlobrokMonitor {
- private val supervisor: Supervisor = new Supervisor(new Transport())
- private val slobrokList = new SlobrokList()
- private val mirror = new Mirror(supervisor, slobrokList)
-
- def setSlobrokConnectionSpecs(slobrokConnectionSpecs: Traversable[String]): Unit = {
- val slobrokConnectionSpecsJavaList: java.util.List[String] = slobrokConnectionSpecs.toList.asJava
- slobrokList.setup(slobrokConnectionSpecsJavaList.toArray(new Array[java.lang.String](0)))
- }
-
- def getRegisteredServices(): Map[SlobrokServiceName, SlobrokServiceSpec] = {
- if (!mirror.ready()) {
- return Map()
- }
- val mirrorEntries: Array[Entry] = mirror.lookup("**")
- mirrorEntries.map { mirrorEntry =>
- (SlobrokServiceName(mirrorEntry.getName), SlobrokServiceSpec(mirrorEntry.getSpec))
- }.toMap
- }
-
- def isRegistered(serviceName: SlobrokServiceName): Boolean = {
- mirror.lookup(serviceName.s).length != 0
- }
-
- def shutdown(): Unit = {
- mirror.shutdown()
- }
-}
-
-object SlobrokMonitor {
- case class SlobrokServiceName(s: String)
- case class SlobrokServiceSpec(s: String)
-}