summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-09-09 21:04:06 +0200
committerGitHub <noreply@github.com>2020-09-09 21:04:06 +0200
commitd61eb7de6d4070293684dce5b6ea55138604b668 (patch)
treeeed83f2b27a3983646a4e883a66e5e050f97bfc3
parent133963eaed9c695eeb8488450c234f7a20d70074 (diff)
parentbf9e239b7ad941027f34d0d395e03de8525a9a56 (diff)
Merge pull request #14350 from vespa-engine/revert-14331-hmusum/add-force-param-to-PrepareParams
Revert "Add force request property to PrepareParams" MERGEOK
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java29
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java5
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; }