summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-04-18 15:53:19 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-04-18 15:53:19 +0200
commit352b828e91711ab1384213ad7f741d423688eeca (patch)
tree55094ccb785eeca6156f8445cd45a1c5e868bbba /configserver
parent76497a12e6ec76d82527b2bd2fbe3de8bba6eb63 (diff)
parentbd5edd2681f6b0a3282cd053acb98d4b0ee126c4 (diff)
Merge branch 'master' into bratseth/receive-wanted-version
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java1
-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
-rw-r--r--configserver/src/test/apps/zkapp/services.xml61
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java12
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java15
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java21
12 files changed, 112 insertions, 70 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
index 9291e6030e2..650958c61dc 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java
@@ -5,6 +5,7 @@ import com.google.inject.Inject;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.Version;
import com.yahoo.config.provision.Zone;
import com.yahoo.log.LogLevel;
@@ -48,13 +49,13 @@ public class SuperModelRequestHandler implements RequestHandler {
* Creates a supermodel controller
*/
@Inject
- public SuperModelRequestHandler(GenerationCounter generationCounter, ConfigDefinitionRepo configDefinitionRepo,
- ConfigserverConfig configserverConfig) {
+ public SuperModelRequestHandler(GenerationCounter generationCounter, ConfigDefinitionRepo configDefinitionRepo,
+ ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors) {
this.generationCounter = generationCounter;
this.configDefinitionRepo = configDefinitionRepo;
this.masterGeneration = configserverConfig.masterGeneration();
this.responseFactory = ConfigResponseFactoryFactory.createFactory(configserverConfig);
- this.zone = new Zone(configserverConfig);
+ this.zone = new Zone(configserverConfig, nodeFlavors);
this.handler = createNewHandler(Collections.emptyMap());
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
index 74b4eea2ee0..2816ef9dc1c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
@@ -24,6 +24,7 @@ import java.util.concurrent.Executor;
* @since 5.1.14
*/
public class SessionHandler extends HttpHandler {
+
protected final ApplicationRepository applicationRepository;
public SessionHandler(Executor executor, AccessLog accessLog, ApplicationRepository applicationRepository) {
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 461019439e0..729472051fd 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 9fbd8d539fb..dd74270c817 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
@@ -5,6 +5,7 @@ import com.yahoo.component.Version;
import com.yahoo.component.Vtag;
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;
@@ -23,6 +24,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;
/**
@@ -44,17 +46,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);
}
@@ -133,7 +142,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();
}
diff --git a/configserver/src/test/apps/zkapp/services.xml b/configserver/src/test/apps/zkapp/services.xml
index aee18cc450a..9549bc2d063 100644
--- a/configserver/src/test/apps/zkapp/services.xml
+++ b/configserver/src/test/apps/zkapp/services.xml
@@ -10,51 +10,22 @@
</slobroks>
</admin>
- <clients version="2.0">
- <gateways protocols="http">
- <gateway hostalias="node1" />
- </gateways>
- </clients>
+ <jdisc version="1.0">
+ <documentapi/>
+ <search/>
+ <nodes>
+ <node hostalias="node1"/>
+ </nodes>
+ </jdisc>
- <search version="2.0">
- <qrservers>
- <qrserver hostalias="node1" />
- </qrservers>
- <cluster name="music" indexingmode="realtime">
- <searchdefinitions>
- <searchdefinition name="music" />
- </searchdefinitions>
- <clustercontrollers>
- <clustercontroller hostalias="node1" />
- </clustercontrollers>
- <topleveldispatchers>
- <topleveldispatcher hostalias="node1" />
- </topleveldispatchers>
- <row index="0">
- <searchnodes>
- <searchnode hostalias="node1" index="0" />
- </searchnodes>
- </row>
- </cluster>
- </search>
-
- <storage version="3.0">
- <cluster redundancy="1">
-<!--
-Do not reshuffle nodes or change index values - this will cause
-massive document redistribution.
-
-If you want to discontinue use of a node, set it in the 'retired' state,
-this will rebalance the documents out of the node. Once node is empty,
-you can stop it and delete the reference to it in vespa-services and
-vespa-hosts files.
--->
- <group index="0" name="mycluster">
- <node hostalias="node1" index="0"/>
- </group>
-
- <fleetcontroller hostalias="node1" />
- </cluster>
- </storage>
+ <content version="1.0">
+ <redundancy>1</redundancy>
+ <documents>
+ <document name="music" mode="index"/>
+ </documents>
+ <nodes>
+ <node hostalias="node1" distribution-key="0"/>
+ </nodes>
+ </content>
</services>
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
index a2b0b4e7d22..9bf86b4aa0a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
@@ -3,7 +3,9 @@ package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.Version;
+import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.config.server.application.Application;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
@@ -43,7 +45,8 @@ public class SuperModelRequestHandlerTest {
counter = new SuperModelGenerationCounter(new MockCurator());
controller = new SuperModelRequestHandler(counter,
new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder()));
+ new ConfigserverConfig(new ConfigserverConfig.Builder()),
+ emptyNodeFlavors());
}
@Test
@@ -94,7 +97,8 @@ public class SuperModelRequestHandlerTest {
long masterGen = 10;
controller = new SuperModelRequestHandler(counter,
new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen)));
+ new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen)),
+ emptyNodeFlavors());
long gen = counter.increment();
controller.reloadConfig(tenantA, createApp(tenantA, "foo", 3L, 1));
@@ -127,4 +131,8 @@ public class SuperModelRequestHandlerTest {
}
}
+ public static NodeFlavors emptyNodeFlavors() {
+ return new NodeFlavors(new FlavorsConfig(new FlavorsConfig.Builder()));
+ }
+
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
index efd8b2f843b..87f94fc4d1d 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
@@ -26,6 +26,8 @@ import com.yahoo.vespa.model.VespaModelFactory;
import java.util.Collections;
import java.util.Optional;
+import static com.yahoo.vespa.config.server.SuperModelRequestHandlerTest.emptyNodeFlavors;
+
/**
* @author lulf
* @since 5.1
@@ -141,7 +143,8 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
HostProvisionerProvider.empty();
SessionPreparer sessionPreparer = new SessionPreparer(modelFactoryRegistry, fileDistributionFactory,
hostProvisionerProvider, permApp,
- configserverConfig, defRepo, curator, new Zone(configserverConfig));
+ configserverConfig, defRepo, curator,
+ new Zone(configserverConfig, emptyNodeFlavors()));
return new TestComponentRegistry(curator, configCurator.orElse(ConfigCurator.create(curator)),
metrics, modelFactoryRegistry,
permApp,
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
index 8f1754357b2..df1bb7f4f62 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/TestWithRpc.java
@@ -27,6 +27,7 @@ import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
+import static com.yahoo.vespa.config.server.SuperModelRequestHandlerTest.emptyNodeFlavors;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -84,7 +85,8 @@ public class TestWithRpc {
rpcServer = new RpcServer(new ConfigserverConfig(new ConfigserverConfig.Builder().rpcport(port).numthreads(1).maxgetconfigclients(1).hostedVespa(hostedVespa)),
new SuperModelRequestHandler(generationCounter,
new TestConfigDefinitionRepo(),
- new ConfigserverConfig(new ConfigserverConfig.Builder())),
+ new ConfigserverConfig(new ConfigserverConfig.Builder()),
+ emptyNodeFlavors()),
Metrics.createTestMetrics(), new HostRegistries(),
hostLivenessTracker);
rpcServer.onTenantCreate(TenantName.from("default"), tenantProvider);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
index fc0dc52dc01..bd8c764353f 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandlerTest.java
@@ -85,7 +85,10 @@ public class TenantRequestHandlerTest extends TestWithCurator {
}
private void feedApp(File appDir, long sessionId, ApplicationId appId) throws IOException {
- SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator, new PathProvider(Path.createRoot()).getSessionDir(sessionId), new TestConfigDefinitionRepo(), "");
+ SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator,
+ new PathProvider(Path.createRoot()).getSessionDir(sessionId),
+ new TestConfigDefinitionRepo(),
+ "", Optional.empty());
zkc.writeApplicationId(appId);
File app = tempFolder.newFolder();
IOUtils.copyDirectory(appDir, app);
@@ -98,7 +101,10 @@ public class TenantRequestHandlerTest extends TestWithCurator {
}
private ApplicationSet reloadConfig(long id, String application) {
- SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator, new PathProvider(Path.createRoot()).getSessionDir(id), new TestConfigDefinitionRepo(), "");
+ SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator,
+ new PathProvider(Path.createRoot()).getSessionDir(id),
+ new TestConfigDefinitionRepo(),
+ "", Optional.empty());
zkc.writeApplicationId(new ApplicationId.Builder().tenant(tenant).applicationName(application).build());
RemoteSession session = new RemoteSession(tenant, id, componentRegistry, zkc);
return session.ensureApplicationLoaded();
@@ -176,7 +182,10 @@ public class TenantRequestHandlerTest extends TestWithCurator {
@Test
public void testResolveForAppId() {
long id = 1l;
- SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator, new PathProvider(Path.createRoot()).getSessionDir(id), new TestConfigDefinitionRepo(), "");
+ SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, configCurator,
+ new PathProvider(Path.createRoot()).getSessionDir(id),
+ new TestConfigDefinitionRepo(),
+ "", Optional.empty());
ApplicationId appId = new ApplicationId.Builder()
.tenant(tenant)
.applicationName("myapp").instanceName("myinst").build();
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
index 217e2a04f9b..f6b00aa7e88 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
@@ -8,13 +8,17 @@ import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.util.Collections;
+import java.util.Optional;
import java.util.regex.Pattern;
import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.ProvisionInfo;
import com.yahoo.config.provision.Version;
+import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
import com.yahoo.vespa.config.server.TestWithCurator;
@@ -27,8 +31,10 @@ import com.yahoo.io.IOUtils;
public class ZKApplicationPackageTest extends TestWithCurator {
private static final String APP = "src/test/apps/zkapp";
+ private static final String TEST_FLAVOR_NAME = "test-flavor";
+ private static final Optional<Flavor> TEST_FLAVOR = new MockNodeFlavors().getFlavor(TEST_FLAVOR_NAME);
private static final ProvisionInfo provisionInfo = ProvisionInfo.withHosts(
- Collections.singleton(new HostSpec("foo.yahoo.com", Collections.emptyList())));
+ Collections.singleton(new HostSpec("foo.yahoo.com", Collections.emptyList(), TEST_FLAVOR, Optional.empty())));
@Rule
public TemporaryFolder tmpDir = new TemporaryFolder();
@@ -36,7 +42,7 @@ public class ZKApplicationPackageTest extends TestWithCurator {
@Test
public void testBasicZKFeed() throws IOException {
feed(configCurator, new File(APP));
- ZKApplicationPackage zkApp = new ZKApplicationPackage(configCurator, Path.fromString("/0"));
+ ZKApplicationPackage zkApp = new ZKApplicationPackage(configCurator, Path.fromString("/0"), Optional.of(new MockNodeFlavors()));
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getServices())).matches());
assertTrue(Pattern.compile(".*<alias>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getHosts())).matches());
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getFile(Path.fromString("services.xml")).createReader())).matches());
@@ -61,6 +67,7 @@ public class ZKApplicationPackageTest extends TestWithCurator {
assertTrue(zkApp.getProvisionInfoMap().containsKey(goodVersion));
ProvisionInfo readInfo = zkApp.getProvisionInfoMap().get(goodVersion);
assertThat(Utf8.toString(readInfo.toJson()), is(Utf8.toString(provisionInfo.toJson())));
+ assertThat(readInfo.getHosts().iterator().next().flavor(), is(TEST_FLAVOR));
assertTrue(zkApp.getDeployment().isPresent());
assertThat(DeploymentSpec.fromXml(zkApp.getDeployment().get()).globalServiceId().get(), is("mydisc"));
}
@@ -74,4 +81,14 @@ public class ZKApplicationPackageTest extends TestWithCurator {
zk.putData("/0/" + ZKApplicationPackage.allocatedHostsNode + "/3.0.0", provisionInfo.toJson());
}
+ private static class MockNodeFlavors extends NodeFlavors{
+
+ MockNodeFlavors() { super(flavorsConfig()); }
+
+ private static FlavorsConfig flavorsConfig() {
+ return new FlavorsConfig(new FlavorsConfig.Builder()
+ .flavor(new FlavorsConfig.Flavor.Builder().name(TEST_FLAVOR_NAME))
+ );
+ }
+ }
}