diff options
4 files changed, 64 insertions, 105 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java index 903323fcd58..bfa3dbb966c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java @@ -117,46 +117,6 @@ public abstract class Session implements Comparable<Session> { return sessionZooKeeperClient.readActivatedTime(); } - public void setApplicationId(ApplicationId applicationId) { - sessionZooKeeperClient.writeApplicationId(applicationId); - } - - public void setTags(Tags tags) { - sessionZooKeeperClient.writeTags(tags); - } - - void setApplicationPackageReference(FileReference applicationPackageReference) { - sessionZooKeeperClient.writeApplicationPackageReference(Optional.ofNullable(applicationPackageReference)); - } - - public void setVespaVersion(Version version) { - sessionZooKeeperClient.writeVespaVersion(version); - } - - public void setDockerImageRepository(Optional<DockerImage> dockerImageRepository) { - sessionZooKeeperClient.writeDockerImageRepository(dockerImageRepository); - } - - public void setAthenzDomain(Optional<AthenzDomain> athenzDomain) { - sessionZooKeeperClient.writeAthenzDomain(athenzDomain); - } - - public void setQuota(Optional<Quota> quota) { - sessionZooKeeperClient.writeQuota(quota); - } - - public void setTenantSecretStores(List<TenantSecretStore> tenantSecretStores) { - sessionZooKeeperClient.writeTenantSecretStores(tenantSecretStores); - } - - public void setOperatorCertificates(List<X509Certificate> operatorCertificates) { - sessionZooKeeperClient.writeOperatorCertificates(operatorCertificates); - } - - public void setCloudAccount(Optional<CloudAccount> cloudAccount) { - sessionZooKeeperClient.writeCloudAccount(cloudAccount); - } - /** Returns application id read from ZooKeeper. Will throw RuntimeException if not found */ public ApplicationId getApplicationId() { return sessionZooKeeperClient.readApplicationId() @@ -191,7 +151,7 @@ public abstract class Session implements Comparable<Session> { } public Transaction createDeactivateTransaction() { - return createSetStatusTransaction(Status.DEACTIVATE); + return sessionZooKeeperClient.createWriteStatusTransaction(Status.DEACTIVATE); } public List<TenantSecretStore> getTenantSecretStores() { @@ -206,10 +166,6 @@ public abstract class Session implements Comparable<Session> { return sessionZooKeeperClient.readCloudAccount(); } - private Transaction createSetStatusTransaction(Status status) { - return sessionZooKeeperClient.createWriteStatusTransaction(status); - } - // Note: Assumes monotonically increasing session ids public boolean isNewerThan(long sessionId) { return getSessionId() > sessionId; } @@ -230,7 +186,7 @@ public abstract class Session implements Comparable<Session> { return getApplicationPackage().getFile(relativePath); } - Optional<ApplicationSet> applicationSet() { return Optional.empty(); }; + Optional<ApplicationSet> applicationSet() { return Optional.empty(); } private void markSessionEdited() { setStatus(Session.Status.NEW); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java index 6589d9d721a..da812b9be7d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java @@ -17,12 +17,9 @@ import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.EndpointCertificateMetadata; import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.model.api.FileDistribution; -import com.yahoo.config.model.api.Quota; -import com.yahoo.config.model.api.TenantSecretStore; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.AthenzDomain; -import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.Tags; import com.yahoo.config.provision.Zone; @@ -50,13 +47,11 @@ import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.model.application.validation.BundleValidator; import org.xml.sax.SAXException; - import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.security.cert.X509Certificate; import java.time.Instant; import java.util.Collection; import java.util.List; @@ -342,23 +337,16 @@ public class SessionPreparer { checkTimeout("making result from models"); } - void writeStateZK(FileReference filereference) { + void writeStateZK(FileReference fileReference) { log.log(Level.FINE, "Writing application package state to zookeeper"); writeStateToZooKeeper(sessionZooKeeperClient, - preprocessedApplicationPackage, - applicationId, - tags, - filereference, + fileReference, dockerImageRepository, vespaVersion, logger, prepareResult.getFileRegistries(), prepareResult.allocatedHosts(), - athenzDomain, - params.quota(), - params.tenantSecretStores(), - params.operatorCertificates(), - params.cloudAccount()); + athenzDomain); checkTimeout("write state to zookeeper"); } @@ -384,41 +372,34 @@ public class SessionPreparer { return List.copyOf(endpoints); } - } - private void writeStateToZooKeeper(SessionZooKeeperClient zooKeeperClient, - ApplicationPackage applicationPackage, - ApplicationId applicationId, - Tags tags, - FileReference fileReference, - Optional<DockerImage> dockerImageRepository, - Version vespaVersion, - DeployLogger deployLogger, - Map<Version, FileRegistry> fileRegistryMap, - AllocatedHosts allocatedHosts, - Optional<AthenzDomain> athenzDomain, - Optional<Quota> quota, - List<TenantSecretStore> tenantSecretStores, - List<X509Certificate> operatorCertificates, - Optional<CloudAccount> cloudAccount) { - ZooKeeperDeployer zkDeployer = zooKeeperClient.createDeployer(deployLogger); - try { - zkDeployer.deploy(applicationPackage, fileRegistryMap, allocatedHosts); - // Note: When changing the below you need to also change similar calls in SessionRepository.createSessionFromExisting() - zooKeeperClient.writeApplicationId(applicationId); - zooKeeperClient.writeTags(tags); - zooKeeperClient.writeApplicationPackageReference(Optional.of(fileReference)); - zooKeeperClient.writeVespaVersion(vespaVersion); - zooKeeperClient.writeDockerImageRepository(dockerImageRepository); - zooKeeperClient.writeAthenzDomain(athenzDomain); - zooKeeperClient.writeQuota(quota); - zooKeeperClient.writeTenantSecretStores(tenantSecretStores); - zooKeeperClient.writeOperatorCertificates(operatorCertificates); - zooKeeperClient.writeCloudAccount(cloudAccount); - } catch (RuntimeException | IOException e) { - zkDeployer.cleanup(); - throw new RuntimeException("Error preparing session", e); + private void writeStateToZooKeeper(SessionZooKeeperClient zooKeeperClient, + FileReference fileReference, + Optional<DockerImage> dockerImageRepository, + Version vespaVersion, + DeployLogger deployLogger, + Map<Version, FileRegistry> fileRegistryMap, + AllocatedHosts allocatedHosts, + Optional<AthenzDomain> athenzDomain) { + ZooKeeperDeployer zkDeployer = zooKeeperClient.createDeployer(deployLogger); + try { + zkDeployer.deploy(applicationPackage, fileRegistryMap, allocatedHosts); + zooKeeperClient.writeSessionParameters(applicationId, + tags, + fileReference, + dockerImageRepository, + vespaVersion, + athenzDomain, + params.quota(), + params.tenantSecretStores(), + params.operatorCertificates(), + params.cloudAccount()); + } catch (RuntimeException | IOException e) { + zkDeployer.cleanup(); + throw new RuntimeException("Error preparing session", e); + } } + } /** The result of preparation over all model versions */ diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java index ac33927bad9..1fc4b0f6edc 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java @@ -274,17 +274,17 @@ public class SessionRepository { internalRedeploy, timeoutBudget, deployLogger); - // Note: Setters below need to be kept in sync with calls in SessionPreparer.writeStateToZooKeeper() - session.setApplicationId(existingApplicationId); - session.setTags(existingTags); - session.setApplicationPackageReference(existingSession.getApplicationPackageReference()); - session.setVespaVersion(existingSession.getVespaVersion()); - session.setDockerImageRepository(existingSession.getDockerImageRepository()); - session.setAthenzDomain(existingSession.getAthenzDomain()); - session.setQuota(existingSession.getQuota()); - session.setTenantSecretStores(existingSession.getTenantSecretStores()); - session.setOperatorCertificates(existingSession.getOperatorCertificates()); - session.setCloudAccount(existingSession.getCloudAccount()); + SessionZooKeeperClient sessionZooKeeperClient = createSessionZooKeeperClient(session.getSessionId()); + sessionZooKeeperClient.writeSessionParameters(existingApplicationId, + existingTags, + existingSession.getApplicationPackageReference(), + existingSession.getDockerImageRepository(), + existingSession.getVespaVersion(), + existingSession.getAthenzDomain(), + existingSession.getQuota(), + existingSession.getTenantSecretStores(), + existingSession.getOperatorCertificates(), + existingSession.getCloudAccount()); return session; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java index 9218b03af1e..4ea3212e098 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java @@ -199,6 +199,28 @@ public class SessionZooKeeperClient { return new FileReference(Utf8.toString(data.get())); } + void writeSessionParameters(ApplicationId applicationId, + Tags tags, + FileReference fileReference, + Optional<DockerImage> dockerImageRepository, + Version vespaVersion, + Optional<AthenzDomain> athenzDomain, + Optional<Quota> quota, + List<TenantSecretStore> tenantSecretStores, + List<X509Certificate> operatorCertificates, + Optional<CloudAccount> cloudAccount) { + writeApplicationId(applicationId); + writeTags(tags); + writeApplicationPackageReference(Optional.of(fileReference)); + writeVespaVersion(vespaVersion); + writeDockerImageRepository(dockerImageRepository); + writeAthenzDomain(athenzDomain); + writeQuota(quota); + writeTenantSecretStores(tenantSecretStores); + writeOperatorCertificates(operatorCertificates); + writeCloudAccount(cloudAccount); + } + private Path applicationPackageReferencePath() { return sessionPath.append(APPLICATION_PACKAGE_REFERENCE_PATH); } |