diff options
author | Harald Musum <musum@verizonmedia.com> | 2022-12-05 12:38:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-05 12:38:23 +0100 |
commit | 74ccd2b55870b17a10ee1513476aac73e2e228e2 (patch) | |
tree | 829c75d2f05907efd349921e3ffa6c33ae352004 /configserver | |
parent | 8890a936e4fddea023fcb94b2841f5b4208ad908 (diff) |
Revert "Write session parameters to ZooKeeper in one place [run-systemtest]"
Diffstat (limited to 'configserver')
4 files changed, 105 insertions, 64 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 bfa3dbb966c..903323fcd58 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,6 +117,46 @@ 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() @@ -151,7 +191,7 @@ public abstract class Session implements Comparable<Session> { } public Transaction createDeactivateTransaction() { - return sessionZooKeeperClient.createWriteStatusTransaction(Status.DEACTIVATE); + return createSetStatusTransaction(Status.DEACTIVATE); } public List<TenantSecretStore> getTenantSecretStores() { @@ -166,6 +206,10 @@ 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; } @@ -186,7 +230,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 da812b9be7d..6589d9d721a 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,9 +17,12 @@ 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; @@ -47,11 +50,13 @@ 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; @@ -337,16 +342,23 @@ 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, - fileReference, + preprocessedApplicationPackage, + applicationId, + tags, + filereference, dockerImageRepository, vespaVersion, logger, prepareResult.getFileRegistries(), prepareResult.allocatedHosts(), - athenzDomain); + athenzDomain, + params.quota(), + params.tenantSecretStores(), + params.operatorCertificates(), + params.cloudAccount()); checkTimeout("write state to zookeeper"); } @@ -372,34 +384,41 @@ public class SessionPreparer { return List.copyOf(endpoints); } + } - 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); - } + 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); } - } /** 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 1fc4b0f6edc..ac33927bad9 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); - 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()); + // 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()); 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 4ea3212e098..9218b03af1e 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,28 +199,6 @@ 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); } |