aboutsummaryrefslogtreecommitdiffstats
path: root/service-monitor
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-12-07 01:59:58 +0100
committerHåkon Hallingstad <hakon@oath.com>2018-12-07 01:59:58 +0100
commit14ed5595c31fc1f803c5ae3bdcd50b0f743ee5d2 (patch)
treecedb157d5241dba54036e33e4bbd7156b4a40c7e /service-monitor
parent1c5812260aa8a49e7d25d26ade15008d81b49374 (diff)
Remove infra app from duper model only if it is supposed to be in duper model
Diffstat (limited to 'service-monitor')
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java7
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java6
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java10
3 files changed, 15 insertions, 8 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java
index c90b37a4c2a..024282d3d21 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java
@@ -3,12 +3,14 @@ package com.yahoo.vespa.service.duper;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.log.LogLevel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import java.util.logging.Logger;
/**
* A non-thread-safe mutable container of ApplicationInfo in the DuperModel, also taking care of listeners on changes.
@@ -16,6 +18,8 @@ import java.util.TreeMap;
* @author hakonhall
*/
public class DuperModel {
+ private static Logger logger = Logger.getLogger(DuperModel.class.getName());
+
private final Map<ApplicationId, ApplicationInfo> applications = new TreeMap<>();
private final List<DuperModelListener> listeners = new ArrayList<>();
@@ -30,16 +34,19 @@ public class DuperModel {
public void add(ApplicationInfo applicationInfo) {
applications.put(applicationInfo.getApplicationId(), applicationInfo);
+ logger.log(LogLevel.DEBUG, "Added " + applicationInfo.getApplicationId());
listeners.forEach(listener -> listener.applicationActivated(applicationInfo));
}
public void remove(ApplicationId applicationId) {
if (applications.remove(applicationId) != null) {
+ logger.log(LogLevel.DEBUG, "Removed " + applicationId);
listeners.forEach(listener -> listener.applicationRemoved(applicationId));
}
}
public List<ApplicationInfo> getApplicationInfos() {
+ logger.log(LogLevel.DEBUG, "Applications in duper model: " + applications.values().size());
return Collections.unmodifiableList(new ArrayList<>(applications.values()));
}
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java
index 1f8fa35d1cf..ed99d2e3166 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java
@@ -174,7 +174,7 @@ public class DuperModelManager implements DuperModelInfraApi {
public void infraApplicationRemoved(ApplicationId applicationId) {
synchronized (monitor) {
activeInfraInfos.remove(applicationId);
- if (duperModel.contains(applicationId)) {
+ if (infraApplicationBelongsInDuperModel(applicationId)) {
duperModel.remove(applicationId);
}
}
@@ -204,7 +204,7 @@ public class DuperModelManager implements DuperModelInfraApi {
if (isConfigServerFromConfigInDuperModel()) return false;
if (!multitenant) return false;
if (duperModel.contains(configServerApplication.getApplicationId())) {
- logger.log(LogLevel.WARNING, "Refusing to add controller application to duper model " +
+ logger.log(LogLevel.ERROR, "Refusing to add controller application to duper model " +
"since it already contains config server");
return false;
}
@@ -213,7 +213,7 @@ public class DuperModelManager implements DuperModelInfraApi {
if (isConfigServerFromConfigInDuperModel()) return false;
if (!multitenant) return false;
if (duperModel.contains(controllerApplication.getApplicationId())) {
- logger.log(LogLevel.WARNING, "Refusing to add config server application to duper model " +
+ logger.log(LogLevel.ERROR, "Refusing to add config server application to duper model " +
"since it already contains controller");
return false;
}
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java
index da693df77ce..ba38b99617b 100644
--- a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java
@@ -149,15 +149,15 @@ public class DuperModelManagerTest {
manager.infraApplicationActivated(secondId, hostnames2);
verify(duperModel, times(1)).add(any());
+ // Removing the second config server like application cannot be removed since it wasn't added
+ verify(duperModel, times(0)).remove(any());
+ manager.infraApplicationRemoved(secondId);
+ verify(duperModel, times(0)).remove(any());
+
verify(duperModel, times(0)).remove(any());
manager.infraApplicationRemoved(firstId);
verify(duperModel, times(1)).remove(any());
when(duperModel.contains(firstId)).thenReturn(false);
-
- // Removing the second config server like application cannot be removed since it wasn't added
- verify(duperModel, times(1)).remove(any());
- manager.infraApplicationRemoved(secondId);
- verify(duperModel, times(1)).remove(any());
}
@Test