summaryrefslogtreecommitdiffstats
path: root/service-monitor
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2017-10-10 11:57:49 +0200
committerHåkon Hallingstad <hakon@oath.com>2017-10-10 11:57:49 +0200
commitaa0aa1d61dfc120bd8de0b87fb0a4f4b171ede93 (patch)
treecbf33951cfac16b6fc61259fff0dedc48d07fa0f /service-monitor
parent4e0d00861a9c284d11814b18cf848eedf33ec105 (diff)
Activate applications from new SuperModel snapshot
Diffstat (limited to 'service-monitor')
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java5
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SuperModelListenerImpl.java13
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SuperModelListenerImplTest.java50
3 files changed, 62 insertions, 6 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java
index 0eaccf50e29..c6fe584c30a 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java
@@ -33,7 +33,10 @@ public class ServiceMonitorImpl implements ServiceMonitor {
this.zone = superModelProvider.getZone();
this.configServerHosts = toConfigServerList(configserverConfig);
ServiceMonitorMetrics metrics = new ServiceMonitorMetrics(metric, timer);
- this.superModelListener = new SuperModelListenerImpl(slobrokMonitorManager, metrics);
+ this.superModelListener = new SuperModelListenerImpl(
+ slobrokMonitorManager,
+ metrics,
+ new ModelGenerator());
superModelListener.start(superModelProvider);
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SuperModelListenerImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SuperModelListenerImpl.java
index a1dd6d5a265..56b42a80a79 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SuperModelListenerImpl.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/SuperModelListenerImpl.java
@@ -17,6 +17,7 @@ public class SuperModelListenerImpl implements SuperModelListener {
private static final Logger logger = Logger.getLogger(SuperModelListenerImpl.class.getName());
private final ServiceMonitorMetrics metrics;
+ private final ModelGenerator modelGenerator;
// superModel and slobrokMonitorManager are always updated together
// and atomically using this monitor.
@@ -25,9 +26,11 @@ public class SuperModelListenerImpl implements SuperModelListener {
private SuperModel superModel;
SuperModelListenerImpl(SlobrokMonitorManager slobrokMonitorManager,
- ServiceMonitorMetrics metrics) {
+ ServiceMonitorMetrics metrics,
+ ModelGenerator modelGenerator) {
this.slobrokMonitorManager = slobrokMonitorManager;
this.metrics = metrics;
+ this.modelGenerator = modelGenerator;
}
void start(SuperModelProvider superModelProvider) {
@@ -38,7 +41,7 @@ public class SuperModelListenerImpl implements SuperModelListener {
SuperModel snapshot = superModelProvider.snapshot(this);
snapshot.getAllApplicationInfos().stream().forEach(application ->
- applicationActivated(superModel, application));
+ applicationActivated(snapshot, application));
}
}
@@ -59,13 +62,11 @@ public class SuperModelListenerImpl implements SuperModelListener {
}
ServiceModel createServiceModelSnapshot(Zone zone, List<String> configServerHostnames) {
- ModelGenerator modelGenerator = new ModelGenerator();
-
try (LatencyMeasurement measurement = metrics.startServiceModelSnapshotLatencyMeasurement()) {
// Reference 'measurement' in a dummy statement, otherwise the compiler
// complains about "auto-closeable resource is never referenced in body of
// corresponding try statement". Why hasn't javac fixed this!?
- measurement.hashCode();
+ dummy(measurement);
// WARNING: The slobrok monitor manager may be out-of-sync with super model (no locking)
return modelGenerator.toServiceModel(
@@ -75,4 +76,6 @@ public class SuperModelListenerImpl implements SuperModelListener {
slobrokMonitorManager);
}
}
+
+ private void dummy(LatencyMeasurement measurement) {}
} \ No newline at end of file
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SuperModelListenerImplTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SuperModelListenerImplTest.java
new file mode 100644
index 00000000000..0451785f34d
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SuperModelListenerImplTest.java
@@ -0,0 +1,50 @@
+// 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.config.model.api.ApplicationInfo;
+import com.yahoo.config.model.api.SuperModel;
+import com.yahoo.config.model.api.SuperModelProvider;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.service.monitor.internal.ServiceMonitorMetrics;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class SuperModelListenerImplTest {
+ @Test
+ public void sanityCheck() {
+ SlobrokMonitorManager slobrokMonitorManager = mock(SlobrokMonitorManager.class);
+ ServiceMonitorMetrics metrics = mock(ServiceMonitorMetrics.class);
+ ModelGenerator modelGenerator = mock(ModelGenerator.class);
+ SuperModelListenerImpl listener = new SuperModelListenerImpl(
+ slobrokMonitorManager,
+ metrics,
+ modelGenerator);
+
+ SuperModelProvider superModelProvider = mock(SuperModelProvider.class);
+ SuperModel superModel = mock(SuperModel.class);
+ when(superModelProvider.snapshot(listener)).thenReturn(superModel);
+
+ ApplicationInfo application1 = mock(ApplicationInfo.class);
+ ApplicationInfo application2 = mock(ApplicationInfo.class);
+ List<ApplicationInfo> applications = Stream.of(application1, application2)
+ .collect(Collectors.toList());
+ when(superModel.getAllApplicationInfos()).thenReturn(applications);
+
+ listener.start(superModelProvider);
+ verify(slobrokMonitorManager).applicationActivated(superModel, application1);
+ verify(slobrokMonitorManager).applicationActivated(superModel, application2);
+
+ Zone zone = mock(Zone.class);
+ List<String> configServers = new ArrayList<>();
+ ServiceModel serviceModel = listener.createServiceModelSnapshot(zone, configServers);
+ verify(modelGenerator).toServiceModel(superModel, zone, configServers, slobrokMonitorManager);
+ }
+} \ No newline at end of file