diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-09-09 21:04:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-09 21:04:06 +0200 |
commit | d61eb7de6d4070293684dce5b6ea55138604b668 (patch) | |
tree | eed83f2b27a3983646a4e883a66e5e050f97bfc3 | |
parent | 133963eaed9c695eeb8488450c234f7a20d70074 (diff) | |
parent | bf9e239b7ad941027f34d0d395e03de8525a9a56 (diff) |
Merge pull request #14350 from vespa-engine/revert-14331-hmusum/add-force-param-to-PrepareParams
Revert "Add force request property to PrepareParams" MERGEOK
7 files changed, 42 insertions, 43 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index fb07bf626f3..eb13baf3e6b 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -285,11 +285,12 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye } } - public PrepareResult deploy(CompressedApplicationInputStream in, PrepareParams prepareParams, Instant now) { + public PrepareResult deploy(CompressedApplicationInputStream in, PrepareParams prepareParams, + boolean ignoreSessionStaleFailure, Instant now) { File tempDir = uncheck(() -> Files.createTempDirectory("deploy")).toFile(); PrepareResult prepareResult; try { - prepareResult = deploy(decompressApplication(in, tempDir), prepareParams, now); + prepareResult = deploy(decompressApplication(in, tempDir), prepareParams, ignoreSessionStaleFailure, now); } finally { cleanupTempDirectory(tempDir); } @@ -297,15 +298,16 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye } public PrepareResult deploy(File applicationPackage, PrepareParams prepareParams) { - return deploy(applicationPackage, prepareParams, Instant.now()); + return deploy(applicationPackage, prepareParams, false, Instant.now()); } - public PrepareResult deploy(File applicationPackage, PrepareParams prepareParams, Instant now) { + public PrepareResult deploy(File applicationPackage, PrepareParams prepareParams, + boolean ignoreSessionStaleFailure, Instant now) { ApplicationId applicationId = prepareParams.getApplicationId(); long sessionId = createSession(applicationId, prepareParams.getTimeoutBudget(), applicationPackage); Tenant tenant = getTenant(applicationId); PrepareResult result = prepare(tenant, sessionId, prepareParams, now); - activate(tenant, sessionId, prepareParams.getTimeoutBudget(), prepareParams.force()); + activate(tenant, sessionId, prepareParams.getTimeoutBudget(), ignoreSessionStaleFailure); return result; } @@ -384,22 +386,23 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye public ApplicationId activate(Tenant tenant, long sessionId, TimeoutBudget timeoutBudget, - boolean force) { + boolean ignoreSessionStaleFailure) { LocalSession localSession = getLocalSession(tenant, sessionId); - Deployment deployment = deployment(localSession, tenant, timeoutBudget.timeLeft(), force); + Deployment deployment = deployFromPreparedSession(localSession, tenant, timeoutBudget.timeLeft()); + deployment.setIgnoreSessionStaleFailure(ignoreSessionStaleFailure); deployment.activate(); return localSession.getApplicationId(); } - private Deployment deployment(LocalSession session, Tenant tenant, Duration timeout, boolean force) { - return Deployment.prepared(session, this, hostProvisioner, tenant, timeout, clock, false, force); + private Deployment deployFromPreparedSession(LocalSession session, Tenant tenant, Duration timeout) { + return Deployment.prepared(session, this, hostProvisioner, tenant, timeout, clock, false); } - public Transaction deactivateCurrentActivateNew(Session active, LocalSession prepared, boolean force) { + public Transaction deactivateCurrentActivateNew(Session active, LocalSession prepared, boolean ignoreStaleSessionFailure) { Tenant tenant = tenantRepository.getTenant(prepared.getTenantName()); Transaction transaction = tenant.getSessionRepository().createActivateTransaction(prepared); if (active != null) { - checkIfActiveHasChanged(prepared, active, force); + checkIfActiveHasChanged(prepared, active, ignoreStaleSessionFailure); checkIfActiveIsNewerThanSessionToBeActivated(prepared.getSessionId(), active.getSessionId()); transaction.add(active.createDeactivateTransaction().operations()); } @@ -739,10 +742,10 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye - public CompletionWaiter activate(LocalSession session, Session previousActiveSession, ApplicationId applicationId, boolean force) { + public CompletionWaiter activate(LocalSession session, Session previousActiveSession, ApplicationId applicationId, boolean ignoreSessionStaleFailure) { CompletionWaiter waiter = session.getSessionZooKeeperClient().createActiveWaiter(); NestedTransaction transaction = new NestedTransaction(); - transaction.add(deactivateCurrentActivateNew(previousActiveSession, session, force)); + transaction.add(deactivateCurrentActivateNew(previousActiveSession, session, ignoreSessionStaleFailure)); hostProvisioner.ifPresent(provisioner -> provisioner.activate(transaction, applicationId, session.getAllocatedHosts().getHosts())); transaction.commit(); return waiter; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java index 6ce17f859b5..11ce659625d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java @@ -67,12 +67,11 @@ public class Deployment implements com.yahoo.config.provision.Deployment { /** Whether this model should be validated (only takes effect if prepared=false) */ private final boolean validate; - /** Whether activation of this model should be forced */ - private final boolean force; + private boolean ignoreSessionStaleFailure = false; private Deployment(LocalSession session, ApplicationRepository applicationRepository, Optional<Provisioner> hostProvisioner, Tenant tenant, Duration timeout, - Clock clock, boolean prepared, boolean validate, boolean isBootstrap, boolean force) { + Clock clock, boolean prepared, boolean validate, boolean isBootstrap) { this.session = session; this.applicationRepository = applicationRepository; this.hostProvisioner = hostProvisioner; @@ -85,21 +84,24 @@ public class Deployment implements com.yahoo.config.provision.Deployment { this.version = session.getVespaVersion(); this.isBootstrap = isBootstrap; this.athenzDomain = session.getAthenzDomain(); - this.force = force; } public static Deployment unprepared(LocalSession session, ApplicationRepository applicationRepository, Optional<Provisioner> hostProvisioner, Tenant tenant, Duration timeout, Clock clock, boolean validate, boolean isBootstrap) { return new Deployment(session, applicationRepository, hostProvisioner, tenant, timeout, clock, false, - validate, isBootstrap, false); + validate, isBootstrap); } public static Deployment prepared(LocalSession session, ApplicationRepository applicationRepository, Optional<Provisioner> hostProvisioner, Tenant tenant, - Duration timeout, Clock clock, boolean isBootstrap, boolean force) { + Duration timeout, Clock clock, boolean isBootstrap) { return new Deployment(session, applicationRepository, hostProvisioner, tenant, - timeout, clock, true, true, isBootstrap, force); + timeout, clock, true, true, isBootstrap); + } + + public void setIgnoreSessionStaleFailure(boolean ignoreSessionStaleFailure) { + this.ignoreSessionStaleFailure = ignoreSessionStaleFailure; } /** Prepares this. This does nothing if this is already prepared */ @@ -140,7 +142,7 @@ public class Deployment implements com.yahoo.config.provision.Deployment { CompletionWaiter waiter; try (Lock lock = tenant.getApplicationRepo().lock(applicationId)) { previousActiveSession = applicationRepository.getActiveSession(applicationId); - waiter = applicationRepository.activate(session, previousActiveSession, applicationId, force); + waiter = applicationRepository.activate(session, previousActiveSession, applicationId, ignoreSessionStaleFailure); } catch (RuntimeException e) { throw e; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java index d6badb8a9a2..dedd96da6f3 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java @@ -53,10 +53,13 @@ public class ApplicationApiHandler extends SessionHandler { @Override protected HttpResponse handlePOST(HttpRequest request) { validateDataAndHeader(request); - TenantName tenantName = validateTenant(request); - PrepareParams prepareParams = PrepareParams.fromHttpRequest(request, tenantName, zookeeperBarrierTimeout); + Tenant tenant = validateTenant(request); + PrepareParams prepareParams = PrepareParams.fromHttpRequest(request, tenant.getName(), zookeeperBarrierTimeout); CompressedApplicationInputStream compressedStream = createFromCompressedStream(request.getData(), request.getHeader(contentTypeHeader)); - PrepareResult result = applicationRepository.deploy(compressedStream, prepareParams, Instant.now()); + PrepareResult result = applicationRepository.deploy(compressedStream, + prepareParams, + shouldIgnoreSessionStaleFailure(request), + Instant.now()); return new SessionPrepareAndActivateResponse(result, request, prepareParams.getApplicationId(), zone); } @@ -65,10 +68,10 @@ public class ApplicationApiHandler extends SessionHandler { return zookeeperBarrierTimeout.plus(Duration.ofSeconds(10)); } - private TenantName validateTenant(HttpRequest request) { + private Tenant validateTenant(HttpRequest request) { TenantName tenantName = getTenantNameFromRequest(request); checkThatTenantExists(tenantRepository, tenantName); - return tenantName; + return tenantRepository.getTenant(tenantName); } public static TenantName getTenantNameFromRequest(HttpRequest request) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java index d962218b63a..1fea966503b 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java @@ -44,7 +44,6 @@ public final class PrepareParams { static final String APPLICATION_HOST_ROLE = "applicationHostRole"; static final String APPLICATION_CONTAINER_ROLE = "applicationContainerRole"; static final String QUOTA_PARAM_NAME = "quota"; - static final String FORCE_PARAM_NAME = "force"; private final ApplicationId applicationId; private final TimeoutBudget timeoutBudget; @@ -52,7 +51,6 @@ public final class PrepareParams { private final boolean dryRun; private final boolean verbose; private final boolean isBootstrap; - private final boolean force; private final Optional<Version> vespaVersion; private final List<ContainerEndpoint> containerEndpoints; private final Optional<String> tlsSecretsKeyName; @@ -67,7 +65,7 @@ public final class PrepareParams { List<ContainerEndpoint> containerEndpoints, Optional<String> tlsSecretsKeyName, Optional<EndpointCertificateMetadata> endpointCertificateMetadata, Optional<DockerImage> dockerImageRepository, Optional<AthenzDomain> athenzDomain, - Optional<ApplicationRoles> applicationRoles, Optional<Quota> quota, boolean force) { + Optional<ApplicationRoles> applicationRoles, Optional<Quota> quota) { this.timeoutBudget = timeoutBudget; this.applicationId = Objects.requireNonNull(applicationId); this.ignoreValidationErrors = ignoreValidationErrors; @@ -82,7 +80,6 @@ public final class PrepareParams { this.athenzDomain = athenzDomain; this.applicationRoles = applicationRoles; this.quota = quota; - this.force = force; } public static class Builder { @@ -91,7 +88,6 @@ public final class PrepareParams { private boolean dryRun = false; private boolean verbose = false; private boolean isBootstrap = false; - private boolean force = false; private ApplicationId applicationId = null; private TimeoutBudget timeoutBudget = new TimeoutBudget(Clock.systemUTC(), Duration.ofSeconds(60)); private Optional<Version> vespaVersion = Optional.empty(); @@ -203,16 +199,11 @@ public final class PrepareParams { return this; } - public Builder force(boolean force) { - this.force = force; - return this; - } - public PrepareParams build() { return new PrepareParams(applicationId, timeoutBudget, ignoreValidationErrors, dryRun, verbose, isBootstrap, vespaVersion, containerEndpoints, tlsSecretsKeyName, endpointCertificateMetadata, dockerImageRepository, athenzDomain, - applicationRoles, quota, force); + applicationRoles, quota); } } @@ -230,7 +221,6 @@ public final class PrepareParams { .athenzDomain(request.getProperty(ATHENZ_DOMAIN)) .applicationRoles(ApplicationRoles.fromString(request.getProperty(APPLICATION_HOST_ROLE), request.getProperty(APPLICATION_CONTAINER_ROLE))) .quota(request.getProperty(QUOTA_PARAM_NAME)) - .force(request.getBooleanProperty(FORCE_PARAM_NAME)) .build(); } @@ -280,8 +270,6 @@ public final class PrepareParams { public boolean isBootstrap() { return isBootstrap; } - public boolean force() { return force; } - public TimeoutBudget getTimeoutBudget() { return timeoutBudget; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java index 4770b0797eb..f879f6c2a2a 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java @@ -704,7 +704,7 @@ public class ApplicationRepositoryTest { } private PrepareResult prepareAndActivate(File application) { - return applicationRepository.deploy(application, prepareParams(), Instant.now()); + return applicationRepository.deploy(application, prepareParams(), false, Instant.now()); } private PrepareResult deployApp(File applicationPackage) { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java index d92245bf5c1..e69fe21dd92 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java @@ -215,7 +215,7 @@ public class DeployTester { paramsBuilder.applicationId(applicationId) .timeoutBudget(new TimeoutBudget(clock, Duration.ofSeconds(60))); - return applicationRepository.deploy(new File(applicationPath), paramsBuilder.build(), now); + return applicationRepository.deploy(new File(applicationPath), paramsBuilder.build(), false, now); } public AllocatedHosts getAllocatedHostsOf(ApplicationId applicationId) { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java index 78d69b75d59..7999f9280c0 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java @@ -67,7 +67,10 @@ class MaintainerTester { } void deployApp(File applicationPath, PrepareParams.Builder prepareParams) { - applicationRepository.deploy(applicationPath, prepareParams.ignoreValidationErrors(true).build(), clock.instant()); + applicationRepository.deploy(applicationPath, + prepareParams.ignoreValidationErrors(true).build(), + false, + clock.instant()); } Curator curator() { return curator; } |