aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorgjoranv <gv@yahoo-inc.com>2017-04-05 16:53:25 +0200
committergjoranv <gv@yahoo-inc.com>2017-04-05 16:53:25 +0200
commite2e9596bba4b063472b9999a04b93f528c76225e (patch)
treeb6001cbfb5fbfda879278c9840ed9f0f93006417 /configserver
parent3ef67afdbdd9c8a3e0e26f60fefee54fbcd36d76 (diff)
Add flavor to ZK, so it will be picked up by StaticProvisioner.
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSessionFactory.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionFactoryImpl.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java15
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java16
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();
}