diff options
author | gjoranv <gv@yahoo-inc.com> | 2017-04-05 16:53:25 +0200 |
---|---|---|
committer | gjoranv <gv@yahoo-inc.com> | 2017-04-05 16:53:25 +0200 |
commit | e2e9596bba4b063472b9999a04b93f528c76225e (patch) | |
tree | b6001cbfb5fbfda879278c9840ed9f0f93006417 /configserver | |
parent | 3ef67afdbdd9c8a3e0e26f60fefee54fbcd36d76 (diff) |
Add flavor to ZK, so it will be picked up by StaticProvisioner.
Diffstat (limited to 'configserver')
4 files changed, 43 insertions, 13 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSessionFactory.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSessionFactory.java index c44436740be..f87c6525a64 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSessionFactory.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSessionFactory.java @@ -37,7 +37,12 @@ public class RemoteSessionFactory { public RemoteSession createSession(long sessionId) { Path sessionPath = sessionDirPath.append(String.valueOf(sessionId)); - SessionZooKeeperClient sessionZKClient = new SessionZooKeeperClient(curator, configCurator, sessionPath, defRepo, configserverConfig.serverId()); + SessionZooKeeperClient sessionZKClient = new SessionZooKeeperClient(curator, + configCurator, + sessionPath, + defRepo, + configserverConfig.serverId(), + componentRegistry.getZone().nodeFlavors()); return new RemoteSession(tenant, sessionId, componentRegistry, sessionZKClient); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionFactoryImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionFactoryImpl.java index 652f27ddaf4..e7380708d47 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionFactoryImpl.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionFactoryImpl.java @@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.application.provider.*; import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.config.provision.NodeFlavors; import com.yahoo.io.IOUtils; import com.yahoo.log.LogLevel; import com.yahoo.path.Path; @@ -22,6 +23,7 @@ import com.yahoo.vespa.curator.Curator; import java.io.File; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; @@ -49,6 +51,7 @@ public class SessionFactoryImpl implements SessionFactory, LocalSessionLoader { private final ConfigDefinitionRepo defRepo; private final TenantName tenant; private final String serverId; + private final Optional<NodeFlavors> nodeFlavors; public SessionFactoryImpl(GlobalComponentRegistry globalComponentRegistry, SessionCounter sessionCounter, @@ -67,6 +70,7 @@ public class SessionFactoryImpl implements SessionFactory, LocalSessionLoader { this.superModelGenerationCounter = globalComponentRegistry.getSuperModelGenerationCounter(); this.defRepo = globalComponentRegistry.getConfigDefinitionRepo(); this.serverId = globalComponentRegistry.getConfigserverConfig().serverId(); + this.nodeFlavors = globalComponentRegistry.getZone().nodeFlavors(); } @Override @@ -131,7 +135,12 @@ public class SessionFactoryImpl implements SessionFactory, LocalSessionLoader { log.log(LogLevel.DEBUG, Tenants.logPre(tenant) + "Next session id is " + sessionId + " , sessionIdPath=" + sessionIdPath.getAbsolute()); try { ensureZKPathDoesNotExist(sessionIdPath); - SessionZooKeeperClient sessionZooKeeperClient = new SessionZooKeeperClient(curator, configCurator, sessionIdPath, defRepo, serverId); + SessionZooKeeperClient sessionZooKeeperClient = new SessionZooKeeperClient(curator, + configCurator, + sessionIdPath, + defRepo, + serverId, + nodeFlavors); File userApplicationDir = tenantFileSystemDirs.getUserApplicationDir(sessionId); IOUtils.copyDirectory(applicationFile, userApplicationDir); ApplicationPackage applicationPackage = createApplication(applicationFile, userApplicationDir, applicationName, sessionId, currentlyActiveSession); @@ -155,7 +164,12 @@ public class SessionFactoryImpl implements SessionFactory, LocalSessionLoader { File sessionDir = getSessionAppDir(sessionId); ApplicationPackage applicationPackage = FilesApplicationPackage.fromFile(sessionDir); Path sessionIdPath = sessionsPath.append(String.valueOf(sessionId)); - SessionZooKeeperClient sessionZKClient = new SessionZooKeeperClient(curator, configCurator, sessionIdPath, defRepo, serverId); + SessionZooKeeperClient sessionZKClient = new SessionZooKeeperClient(curator, + configCurator, + sessionIdPath, + defRepo, + serverId, + nodeFlavors); SessionContext context = new SessionContext(applicationPackage, sessionZKClient, sessionDir, applicationRepo, hostRegistry, superModelGenerationCounter); return new LocalSession(tenant, sessionId, sessionPreparer, context); } 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 ecb5d0980bb..c29a00057a2 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 @@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server.session; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.ProvisionInfo; import com.yahoo.config.provision.TenantName; import com.yahoo.transaction.Transaction; @@ -21,6 +22,7 @@ import com.yahoo.vespa.curator.transaction.CuratorOperations; import com.yahoo.vespa.curator.transaction.CuratorTransaction; import com.yahoo.vespa.config.server.zookeeper.ConfigCurator; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -41,17 +43,24 @@ public class SessionZooKeeperClient { private final Path sessionStatusPath; private final String serverId; private final ServerCacheLoader cacheLoader; + private final Optional<NodeFlavors> nodeFlavors; // Only for testing when cache loader does not need cache entries. public SessionZooKeeperClient(Curator curator, Path rootPath) { - this(curator, ConfigCurator.create(curator), rootPath, new StaticConfigDefinitionRepo(), ""); + this(curator, ConfigCurator.create(curator), rootPath, new StaticConfigDefinitionRepo(), "", Optional.empty()); } - public SessionZooKeeperClient(Curator curator, ConfigCurator configCurator, Path rootPath, ConfigDefinitionRepo definitionRepo, String serverId) { + public SessionZooKeeperClient(Curator curator, + ConfigCurator configCurator, + Path rootPath, + ConfigDefinitionRepo definitionRepo, + String serverId, + Optional<NodeFlavors> nodeFlavors) { this.curator = curator; this.configCurator = configCurator; this.rootPath = rootPath; this.serverId = serverId; + this.nodeFlavors = nodeFlavors; this.sessionStatusPath = rootPath.append(ConfigCurator.SESSIONSTATE_ZK_SUBPATH); this.cacheLoader = new ServerCacheLoader(configCurator, rootPath, definitionRepo); } @@ -130,7 +139,7 @@ public class SessionZooKeeperClient { } public ApplicationPackage loadApplicationPackage() { - return new ZKApplicationPackage(configCurator, rootPath); + return new ZKApplicationPackage(configCurator, rootPath, nodeFlavors); } public ServerCache loadServerCache() { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java index 40f50be2b7f..946e70c715a 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java @@ -10,6 +10,7 @@ import com.yahoo.config.codegen.DefParser; import com.yahoo.config.application.api.ApplicationFile; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.application.provider.*; +import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.ProvisionInfo; import com.yahoo.config.provision.Version; import com.yahoo.io.IOUtils; @@ -42,33 +43,34 @@ public class ZKApplicationPackage implements ApplicationPackage { public static final String allocatedHostsNode = "allocatedHosts"; private final ApplicationMetaData metaData; - public ZKApplicationPackage(ConfigCurator zk, Path appPath) { + public ZKApplicationPackage(ConfigCurator zk, Path appPath, Optional<NodeFlavors> nodeFlavors) { verifyAppPath(zk, appPath); liveApp = new ZKLiveApp(zk, appPath); metaData = readMetaDataFromLiveApp(liveApp); importFileRegistries(fileRegistryNode); - importProvisionInfos(allocatedHostsNode); + importProvisionInfos(allocatedHostsNode, nodeFlavors); } - private void importProvisionInfos(String allocatedHostsNode) { + private void importProvisionInfos(String allocatedHostsNode, Optional<NodeFlavors> nodeFlavors) { List<String> provisionInfoNodes = liveApp.getChildren(allocatedHostsNode); if (provisionInfoNodes.isEmpty()) { - Optional<ProvisionInfo> provisionInfo = importProvisionInfo(allocatedHostsNode); + Optional<ProvisionInfo> provisionInfo = importProvisionInfo(allocatedHostsNode, nodeFlavors); provisionInfo.ifPresent(info -> provisionInfoMap.put(legacyVersion, info)); } else { provisionInfoNodes.stream() .forEach(versionStr -> { Version version = Version.fromString(versionStr); - Optional<ProvisionInfo> provisionInfo = importProvisionInfo(Joiner.on("/").join(allocatedHostsNode, versionStr)); + Optional<ProvisionInfo> provisionInfo = importProvisionInfo(Joiner.on("/").join(allocatedHostsNode, versionStr), + nodeFlavors); provisionInfo.ifPresent(info -> provisionInfoMap.put(version, info)); }); } } - private Optional<ProvisionInfo> importProvisionInfo(String provisionInfoNode) { + private Optional<ProvisionInfo> importProvisionInfo(String provisionInfoNode, Optional<NodeFlavors> nodeFlavors) { try { if (liveApp.exists(provisionInfoNode)) { - return Optional.of(ProvisionInfo.fromJson(liveApp.getBytes(provisionInfoNode))); + return Optional.of(ProvisionInfo.fromJson(liveApp.getBytes(provisionInfoNode), nodeFlavors)); } else { return Optional.empty(); } |