summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-02-11 12:08:49 +0100
committerJon Marius Venstad <venstad@gmail.com>2019-02-11 12:08:49 +0100
commit11396b2c05a8ee029443481ff4f0f606a101c389 (patch)
tree98325904c52d2dad31a56c82c89285cf1a754537
parent884d2897fa24c5642a0bf8b53f9665f9d23f5c85 (diff)
Put accessors back inside MutableStatusRegistry
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java14
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java3
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/model/ApplicationApiImpl.java8
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaPolicy.java5
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/Policy.java3
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/MutableStatusRegistry.java17
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusService.java15
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java2
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java6
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusServiceTest.java4
10 files changed, 48 insertions, 29 deletions
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java
index ff0299bdc17..bd8e31cd283 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java
@@ -143,15 +143,15 @@ public class OrchestratorImpl implements Orchestrator {
OrchestratorContext context = OrchestratorContext.createContextForSingleAppOp(clock);
try (MutableStatusRegistry statusRegistry = statusService
.lockApplicationInstance_forCurrentThreadOnly(context, appInstance.reference())) {
- HostStatus currentHostState = statusService.getHostStatus(appInstance.reference(), hostName);
+ HostStatus currentHostState = statusRegistry.getHostStatus(hostName);
if (HostStatus.NO_REMARKS == currentHostState) {
return;
}
- ApplicationInstanceStatus appStatus = statusService.getApplicationInstanceStatus(appInstance.reference());
+ ApplicationInstanceStatus appStatus = statusRegistry.getStatus();
if (appStatus == ApplicationInstanceStatus.NO_REMARKS) {
- policy.releaseSuspensionGrant(context.createSubcontextWithinLock(), appInstance, hostName, statusRegistry, statusService);
+ policy.releaseSuspensionGrant(context.createSubcontextWithinLock(), appInstance, hostName, statusRegistry);
}
}
}
@@ -174,7 +174,6 @@ public class OrchestratorImpl implements Orchestrator {
ApplicationApi applicationApi = new ApplicationApiImpl(
nodeGroup,
statusRegistry,
- statusService,
clusterControllerClientFactory);
policy.acquirePermissionToRemove(context.createSubcontextWithinLock(), applicationApi);
@@ -192,14 +191,13 @@ public class OrchestratorImpl implements Orchestrator {
try (MutableStatusRegistry hostStatusRegistry =
statusService.lockApplicationInstance_forCurrentThreadOnly(context, applicationReference)) {
- ApplicationInstanceStatus appStatus = statusService.getApplicationInstanceStatus(applicationReference);
+ ApplicationInstanceStatus appStatus = hostStatusRegistry.getStatus();
if (appStatus == ApplicationInstanceStatus.ALLOWED_TO_BE_DOWN) {
return;
}
ApplicationApi applicationApi = new ApplicationApiImpl(nodeGroup,
hostStatusRegistry,
- statusService,
clusterControllerClientFactory);
policy.grantSuspensionRequest(context.createSubcontextWithinLock(), applicationApi);
}
@@ -207,7 +205,7 @@ public class OrchestratorImpl implements Orchestrator {
@Override
public ApplicationInstanceStatus getApplicationInstanceStatus(ApplicationId appId) throws ApplicationIdNotFoundException {
- ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId,instanceLookupService);
+ ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId, instanceLookupService);
return statusService.getApplicationInstanceStatus(appRef);
}
@@ -328,7 +326,7 @@ public class OrchestratorImpl implements Orchestrator {
statusService.lockApplicationInstance_forCurrentThreadOnly(context, appRef)) {
// Short-circuit if already in wanted state
- if (status == statusService.getApplicationInstanceStatus(appRef)) return;
+ if (status == statusRegistry.getStatus()) return;
// Set content clusters for this application in maintenance on suspend
if (status == ApplicationInstanceStatus.ALLOWED_TO_BE_DOWN) {
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java
index a4a6baf1669..91da046840d 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java
@@ -15,15 +15,12 @@ import com.yahoo.vespa.applicationmodel.TenantId;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;
/**
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/model/ApplicationApiImpl.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/model/ApplicationApiImpl.java
index 3343849dad5..db2fb9b4a18 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/model/ApplicationApiImpl.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/model/ApplicationApiImpl.java
@@ -31,22 +31,18 @@ public class ApplicationApiImpl implements ApplicationApi {
private final ApplicationInstance applicationInstance;
private final NodeGroup nodeGroup;
private final MutableStatusRegistry hostStatusService;
- private final StatusService statusService;
private final List<ClusterApi> clusterInOrder;
private final Map<HostName, HostStatus> hostStatusMap;
public ApplicationApiImpl(NodeGroup nodeGroup,
MutableStatusRegistry hostStatusService,
- StatusService statusService,
ClusterControllerClientFactory clusterControllerClientFactory) {
this.applicationInstance = nodeGroup.getApplication();
this.nodeGroup = nodeGroup;
this.hostStatusService = hostStatusService;
- this.statusService = statusService;
Collection<HostName> hosts = getHostsUsedByApplicationInstance(applicationInstance);
- Collection<HostName> suspendedHosts = statusService.getSuspendedHostsByApplication().apply(nodeGroup.getApplicationReference());
this.hostStatusMap = hosts.stream().collect(Collectors.toMap(Function.identity(),
- hostName -> suspendedHosts.contains(hostName)
+ hostName -> hostStatusService.getSuspendedHosts().contains(hostName)
? HostStatus.ALLOWED_TO_BE_DOWN : HostStatus.NO_REMARKS));
this.clusterInOrder = makeClustersInOrder(nodeGroup, hostStatusMap, clusterControllerClientFactory);
}
@@ -98,7 +94,7 @@ public class ApplicationApiImpl implements ApplicationApi {
@Override
public ApplicationInstanceStatus getApplicationStatus() {
- return statusService.getApplicationInstanceStatus(nodeGroup.getApplicationReference());
+ return hostStatusService.getStatus();
}
@Override
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaPolicy.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaPolicy.java
index e761991ac1a..96930c1cda2 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaPolicy.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaPolicy.java
@@ -105,10 +105,9 @@ public class HostedVespaPolicy implements Policy {
OrchestratorContext context,
ApplicationInstance applicationInstance,
HostName hostName,
- MutableStatusRegistry hostStatusService,
- StatusService statusService) throws HostStateChangeDeniedException {
+ MutableStatusRegistry hostStatusService) throws HostStateChangeDeniedException {
NodeGroup nodeGroup = new NodeGroup(applicationInstance, hostName);
- ApplicationApi applicationApi = new ApplicationApiImpl(nodeGroup, hostStatusService, statusService, clusterControllerClientFactory);
+ ApplicationApi applicationApi = new ApplicationApiImpl(nodeGroup, hostStatusService, clusterControllerClientFactory);
releaseSuspensionGrant(context, applicationApi);
}
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/Policy.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/Policy.java
index 7744d75681b..aa7636227c8 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/Policy.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/Policy.java
@@ -33,7 +33,6 @@ public interface Policy {
void releaseSuspensionGrant(
OrchestratorContext context, ApplicationInstance applicationInstance,
HostName hostName,
- MutableStatusRegistry hostStatusService,
- StatusService statusService) throws HostStateChangeDeniedException;
+ MutableStatusRegistry hostStatusService) throws HostStateChangeDeniedException;
}
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/MutableStatusRegistry.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/MutableStatusRegistry.java
index 7e0fe5241a0..e36f0f70bbd 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/MutableStatusRegistry.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/MutableStatusRegistry.java
@@ -3,6 +3,8 @@ package com.yahoo.vespa.orchestrator.status;
import com.yahoo.vespa.applicationmodel.HostName;
+import java.util.Set;
+
/**
* Registry of the suspension and host statuses for an application instance.
*
@@ -13,6 +15,21 @@ import com.yahoo.vespa.applicationmodel.HostName;
public interface MutableStatusRegistry extends AutoCloseable {
/**
+ * Returns the status of this application.
+ */
+ ApplicationInstanceStatus getStatus();
+
+ /**
+ * Returns the status of the given host.
+ */
+ HostStatus getHostStatus(HostName hostName);
+
+ /**
+ * Returns the set of all suspended hosts for this application.
+ */
+ Set<HostName> getSuspendedHosts();
+
+ /**
* Sets the state for the given host.
*/
void setHostState(HostName hostName, HostStatus status);
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusService.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusService.java
index 6cad3dafb48..f6e01a49ce8 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusService.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusService.java
@@ -246,6 +246,21 @@ public class ZookeeperStatusService implements StatusService {
}
@Override
+ public ApplicationInstanceStatus getStatus() {
+ return getApplicationInstanceStatus(applicationInstanceReference);
+ }
+
+ @Override
+ public HostStatus getHostStatus(HostName hostName) {
+ return ZookeeperStatusService.this.getHostStatus(applicationInstanceReference, hostName);
+ }
+
+ @Override
+ public Set<HostName> getSuspendedHosts() {
+ return getValidCache().computeIfAbsent(applicationInstanceReference, ZookeeperStatusService.this::hostsDownFor);
+ }
+
+ @Override
public void setHostState(final HostName hostName, final HostStatus status) {
if (probe) return;
log.log(LogLevel.INFO, "Setting host " + hostName + " to status " + status);
diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java
index f9a6dc5b237..78f50dbfc3f 100644
--- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java
+++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java
@@ -74,7 +74,7 @@ class ModelTestUtils {
MutableStatusRegistry registry = statusService.lockApplicationInstance_forCurrentThreadOnly(
OrchestratorContext.createContextForSingleAppOp(Clock.systemUTC()),
applicationInstance.reference());
- return new ApplicationApiImpl(nodeGroup, registry, statusService, clusterControllerClientFactory);
+ return new ApplicationApiImpl(nodeGroup, registry, clusterControllerClientFactory);
}
ApplicationInstance createApplicationInstance(
diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java
index 2a8fdc8290c..55ac65c036c 100644
--- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java
+++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java
@@ -119,8 +119,7 @@ public class HostResourceTest {
public void releaseSuspensionGrant(
OrchestratorContext context, ApplicationInstance applicationInstance,
HostName hostName,
- MutableStatusRegistry hostStatusRegistry,
- StatusService statusService) {
+ MutableStatusRegistry hostStatusRegistry) {
}
}
@@ -221,8 +220,7 @@ public class HostResourceTest {
public void releaseSuspensionGrant(
OrchestratorContext context, ApplicationInstance applicationInstance,
HostName hostName,
- MutableStatusRegistry hostStatusRegistry,
- StatusService statusService) throws HostStateChangeDeniedException {
+ MutableStatusRegistry hostStatusRegistry) throws HostStateChangeDeniedException {
doThrow();
}
diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusServiceTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusServiceTest.java
index 809ca7e5c97..9b1be12121d 100644
--- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusServiceTest.java
+++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/status/ZookeeperStatusServiceTest.java
@@ -91,7 +91,7 @@ public class ZookeeperStatusServiceTest {
TestIds.HOST_NAME1,
hostStatus);
- assertThat(zookeeperStatusService.getHostStatus(TestIds.APPLICATION_INSTANCE_REFERENCE, TestIds.HOST_NAME1),
+ assertThat(statusRegistry.getHostStatus(TestIds.HOST_NAME1),
is(hostStatus));
}
}
@@ -141,7 +141,7 @@ public class ZookeeperStatusServiceTest {
killSession(curator.framework(), testingServer);
//Throws SessionFailedException if the SessionFailRetryLoop has not been closed.
- zookeeperStatusService2.getHostStatus(TestIds.APPLICATION_INSTANCE_REFERENCE, TestIds.HOST_NAME1);
+ statusRegistry.getHostStatus(TestIds.HOST_NAME1);
});
assertThat(resultOfZkOperationAfterLockFailure, notHoldsException());