diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2019-02-11 12:08:49 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2019-02-11 12:08:49 +0100 |
commit | 11396b2c05a8ee029443481ff4f0f606a101c389 (patch) | |
tree | 98325904c52d2dad31a56c82c89285cf1a754537 | |
parent | 884d2897fa24c5642a0bf8b53f9665f9d23f5c85 (diff) |
Put accessors back inside MutableStatusRegistry
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()); |