diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2021-01-28 14:19:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 14:19:12 +0100 |
commit | e5459aafc13a5114b853fc372b014843a2c2d922 (patch) | |
tree | 847eee9e808a5984c7760e32cd50d5883525bfb1 /config-model | |
parent | 2ae42f68257689846c9066d9cf10adbede82d96b (diff) | |
parent | 04436e6600aa66d6ef500565d799083aa652412f (diff) |
Merge pull request #16270 from vespa-engine/jonmv/reapply-docprot-config
Jonmv/reapply docprot config [run-systemtest]
Diffstat (limited to 'config-model')
15 files changed, 256 insertions, 33 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java index 1cc5c93c28a..061ad42e028 100644 --- a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java +++ b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java @@ -4,22 +4,24 @@ package com.yahoo.config.model; import com.yahoo.cloud.config.ApplicationIdConfig; import com.yahoo.cloud.config.ClusterListConfig; import com.yahoo.cloud.config.ModelConfig; -import com.yahoo.cloud.config.SlobroksConfig; -import com.yahoo.cloud.config.ZookeepersConfig; -import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.config.provision.ApplicationId; -import com.yahoo.component.Version; -import com.yahoo.vespa.config.content.LoadTypeConfig; import com.yahoo.cloud.config.ModelConfig.Hosts; import com.yahoo.cloud.config.ModelConfig.Hosts.Services; import com.yahoo.cloud.config.ModelConfig.Hosts.Services.Ports; +import com.yahoo.cloud.config.SlobroksConfig; +import com.yahoo.cloud.config.ZookeepersConfig; import com.yahoo.cloud.config.log.LogdConfig; +import com.yahoo.component.Version; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.document.DocumenttypesConfig; import com.yahoo.document.config.DocumentmanagerConfig; import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; import com.yahoo.messagebus.MessagebusConfig; import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig; +import com.yahoo.vespa.config.content.DistributionConfig; +import com.yahoo.vespa.config.content.LoadTypeConfig; import com.yahoo.vespa.configmodel.producers.DocumentManager; import com.yahoo.vespa.configmodel.producers.DocumentTypes; import com.yahoo.vespa.documentmodel.DocumentModel; @@ -165,6 +167,13 @@ public class ApplicationConfigProducerRoot extends AbstractConfigProducer<Abstra } @Override + public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) { + if (routing != null) { + routing.getConfig(builder); + } + } + + @Override public void getConfig(MessagebusConfig.Builder builder) { if (routing != null) { routing.getConfig(builder); @@ -213,6 +222,13 @@ public class ApplicationConfigProducerRoot extends AbstractConfigProducer<Abstra } @Override + public void getConfig(DistributionConfig.Builder builder) { + for (ContentCluster cluster : ((VespaModel) getRoot()).getContentClusters().values()) { + cluster.getConfig(builder); + } + } + + @Override public void getConfig(AllClustersBucketSpacesConfig.Builder builder) { VespaModel model = (VespaModel) getRoot(); for (ContentCluster cluster : model.getContentClusters().values()) { diff --git a/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java b/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java index 9dcd94bf455..312890aac13 100644 --- a/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java +++ b/config-model/src/main/java/com/yahoo/config/model/CommonConfigsProducer.java @@ -2,6 +2,8 @@ package com.yahoo.config.model; import com.yahoo.cloud.config.ApplicationIdConfig; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; +import com.yahoo.vespa.config.content.DistributionConfig; import com.yahoo.vespa.config.content.LoadTypeConfig; import com.yahoo.cloud.config.log.LogdConfig; import com.yahoo.cloud.config.SlobroksConfig; @@ -25,11 +27,13 @@ public interface CommonConfigsProducer extends DocumentmanagerConfig.Producer, DocumenttypesConfig.Producer, MessagebusConfig.Producer, DocumentrouteselectorpolicyConfig.Producer, + DocumentProtocolPoliciesConfig.Producer, LogdConfig.Producer, SlobroksConfig.Producer, ZookeepersConfig.Producer, LoadTypeConfig.Producer, ClusterListConfig.Producer, + DistributionConfig.Producer, AllClustersBucketSpacesConfig.Producer, ModelConfig.Producer, ApplicationIdConfig.Producer { diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java index d6cccc9f2be..0cfe35a51b5 100644 --- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java +++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java @@ -10,7 +10,6 @@ import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.ProvisionLogger; import com.yahoo.net.HostName; -import com.yahoo.vespa.config.content.StorDistributionConfig; import java.util.ArrayList; import java.util.List; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java index 7ec2dc67cf2..a627e030156 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java @@ -15,6 +15,7 @@ import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.metrics.MetricsmanagerConfig; import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig; +import com.yahoo.vespa.config.content.DistributionConfig; import com.yahoo.vespa.config.content.FleetcontrollerConfig; import com.yahoo.vespa.config.content.MessagetyperouteselectorpolicyConfig; import com.yahoo.vespa.config.content.StorDistributionConfig; @@ -67,6 +68,8 @@ import java.util.TreeMap; import java.util.logging.Level; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; + /** * A content cluster. * @@ -74,6 +77,7 @@ import java.util.stream.Collectors; * @author bratseth */ public class ContentCluster extends AbstractConfigProducer implements + DistributionConfig.Producer, StorDistributionConfig.Producer, StorDistributormanagerConfig.Producer, FleetcontrollerConfig.Producer, @@ -748,6 +752,39 @@ public class ContentCluster extends AbstractConfigProducer implements } } + @Override + public void getConfig(DistributionConfig.Builder builder) { + DistributionConfig.Cluster.Builder clusterBuilder = new DistributionConfig.Cluster.Builder(); + StorDistributionConfig.Builder storDistributionBuilder = new StorDistributionConfig.Builder(); + getConfig(storDistributionBuilder); + StorDistributionConfig config = storDistributionBuilder.build(); + + clusterBuilder.active_per_leaf_group(config.active_per_leaf_group()); + clusterBuilder.ready_copies(config.ready_copies()); + clusterBuilder.redundancy(config.redundancy()); + clusterBuilder.initial_redundancy(config.initial_redundancy()); + + for (StorDistributionConfig.Group group : config.group()) { + DistributionConfig.Cluster.Group.Builder groupBuilder = new DistributionConfig.Cluster.Group.Builder(); + groupBuilder.index(group.index()) + .name(group.name()) + .capacity(group.capacity()) + .partitions(group.partitions()); + + for (var node : group.nodes()) { + DistributionConfig.Cluster.Group.Nodes.Builder nodesBuilder = new DistributionConfig.Cluster.Group.Nodes.Builder(); + nodesBuilder.index(node.index()) + .retired(node.retired()); + + groupBuilder.nodes(nodesBuilder); + } + + clusterBuilder.group(groupBuilder); + } + + builder.cluster(getConfigId(), clusterBuilder); + } + /** * Mark whether the config emitted by this cluster currently should be applied by clients already running with * a previous generation of it only by restarting the consuming processes. diff --git a/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java b/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java index e6f4969f593..15e6c5993b3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/routing/DocumentProtocol.java @@ -2,8 +2,9 @@ package com.yahoo.vespa.model.routing; import com.yahoo.config.model.ConfigModelRepo; -import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig; import com.yahoo.document.select.DocumentSelector; +import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; import com.yahoo.messagebus.routing.ApplicationSpec; import com.yahoo.messagebus.routing.HopSpec; import com.yahoo.messagebus.routing.RouteSpec; @@ -12,9 +13,9 @@ import com.yahoo.vespa.model.container.Container; import com.yahoo.vespa.model.container.ContainerCluster; import com.yahoo.vespa.model.container.ContainerModel; import com.yahoo.vespa.model.container.docproc.ContainerDocproc; -import com.yahoo.vespa.model.content.cluster.ContentCluster; -import com.yahoo.vespa.model.content.Content; import com.yahoo.vespa.model.container.docproc.DocprocChain; +import com.yahoo.vespa.model.content.Content; +import com.yahoo.vespa.model.content.cluster.ContentCluster; import java.util.ArrayList; import java.util.Collection; @@ -31,7 +32,9 @@ import java.util.TreeMap; * * @author Simon Thoresen Hult */ -public final class DocumentProtocol implements Protocol, DocumentrouteselectorpolicyConfig.Producer { +public final class DocumentProtocol implements Protocol, + DocumentrouteselectorpolicyConfig.Producer, + DocumentProtocolPoliciesConfig.Producer { private static final String NAME = "document"; private final ApplicationSpec application; @@ -101,6 +104,42 @@ public final class DocumentProtocol implements Protocol, Documentrouteselectorpo } } + @Override + public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) { + for (ContentCluster cluster : Content.getContentClusters(repo)) { + DocumentProtocolPoliciesConfig.Cluster.Builder clusterBuilder = new DocumentProtocolPoliciesConfig.Cluster.Builder(); + addSelector(cluster.getConfigId(), cluster.getRoutingSelector(), clusterBuilder); + if (cluster.getSearch().hasIndexedCluster()) + addRoutes(getDirectRouteName(cluster.getConfigId()), getIndexedRouteName(cluster.getConfigId()), clusterBuilder); + + builder.cluster(cluster.getConfigId(), clusterBuilder); + } + } + + private static void addRoutes(String directRoute, String indexedRoute, DocumentProtocolPoliciesConfig.Cluster.Builder builder) { + builder.defaultRoute(directRoute) + .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder() + .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_PUTDOCUMENT) + .name(indexedRoute)) + .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder() + .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_REMOVEDOCUMENT) + .name(indexedRoute)) + .route(new DocumentProtocolPoliciesConfig.Cluster.Route.Builder() + .messageType(com.yahoo.documentapi.messagebus.protocol.DocumentProtocol.MESSAGE_UPDATEDOCUMENT) + .name(indexedRoute)); + } + + private static void addSelector(String clusterConfigId, String selector, DocumentProtocolPoliciesConfig.Cluster.Builder builder) { + try { + new DocumentSelector(selector); + } catch (com.yahoo.document.select.parser.ParseException e) { + throw new IllegalArgumentException("Failed to parse selector '" + selector + + "' for route '" + clusterConfigId + + "' in policy 'DocumentRouteSelector'."); + } + builder.selector(selector); + } + private static void addRoute(String clusterConfigId, String selector, DocumentrouteselectorpolicyConfig.Builder builder) { try { new DocumentSelector(selector); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java b/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java index 36beb766f5b..6637c84df10 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/routing/Routing.java @@ -4,10 +4,20 @@ package com.yahoo.vespa.model.routing; import com.yahoo.config.model.ConfigModel; import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.model.ConfigModelRepo; -import com.yahoo.messagebus.routing.*; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; import com.yahoo.messagebus.MessagebusConfig; import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig; -import java.util.*; +import com.yahoo.messagebus.routing.ApplicationSpec; +import com.yahoo.messagebus.routing.HopSpec; +import com.yahoo.messagebus.routing.RouteSpec; +import com.yahoo.messagebus.routing.RoutingSpec; +import com.yahoo.messagebus.routing.RoutingTableSpec; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * This is the routing plugin of the Vespa model. This class is responsible for parsing all routing information given @@ -82,6 +92,14 @@ public class Routing extends ConfigModel { } } + public void getConfig(DocumentProtocolPoliciesConfig.Builder builder) { + for (Protocol protocol : protocols) { + if (protocol instanceof DocumentProtocol) { + ((DocumentProtocol) protocol).getConfig(builder); + } + } + } + public void getConfig(DocumentrouteselectorpolicyConfig.Builder builder) { for (Protocol protocol : protocols) { if (protocol instanceof DocumentProtocol) { diff --git a/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/config-model/src/test/cfg/routing/defaultconfig/document-protocol-policies.cfg @@ -0,0 +1 @@ + diff --git a/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/config-model/src/test/cfg/routing/hopconfig/document-protocol-policies.cfg @@ -0,0 +1 @@ + diff --git a/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg new file mode 100644 index 00000000000..68659362350 --- /dev/null +++ b/config-model/src/test/cfg/routing/replacehop/document-protocol-policies.cfg @@ -0,0 +1,8 @@ +cluster{music}.defaultRoute "music-direct" +cluster{music}.route[0].name "music-index" +cluster{music}.route[0].messageType 100004 +cluster{music}.route[1].name "music-index" +cluster{music}.route[1].messageType 100005 +cluster{music}.route[2].name "music-index" +cluster{music}.route[2].messageType 100006 +cluster{music}.selector "(music)" diff --git a/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg new file mode 100644 index 00000000000..68659362350 --- /dev/null +++ b/config-model/src/test/cfg/routing/replaceroute/document-protocol-policies.cfg @@ -0,0 +1,8 @@ +cluster{music}.defaultRoute "music-direct" +cluster{music}.route[0].name "music-index" +cluster{music}.route[0].messageType 100004 +cluster{music}.route[1].name "music-index" +cluster{music}.route[1].messageType 100005 +cluster{music}.route[2].name "music-index" +cluster{music}.route[2].messageType 100006 +cluster{music}.selector "(music)" diff --git a/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg b/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/config-model/src/test/cfg/routing/routeconfig/document-protocol-policies.cfg @@ -0,0 +1 @@ + diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java index 9f17a1c4142..095434c8e04 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java @@ -14,6 +14,7 @@ import com.yahoo.container.ComponentsConfig; import com.yahoo.messagebus.routing.RoutingTableSpec; import com.yahoo.metrics.MetricsmanagerConfig; import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig; +import com.yahoo.vespa.config.content.DistributionConfig; import com.yahoo.vespa.config.content.FleetcontrollerConfig; import com.yahoo.vespa.config.content.StorDistributionConfig; import com.yahoo.vespa.config.content.StorFilestorConfig; @@ -99,12 +100,22 @@ public class ContentClusterTest extends ContentBaseTest { " </group>" + "</content>" ); + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cc.getConfig(distributionBuilder); + DistributionConfig distributionConfig = distributionBuilder.build(); + assertEquals(3, distributionConfig.cluster("storage").ready_copies()); + assertEquals(15, distributionConfig.cluster("storage").initial_redundancy()); + assertEquals(15, distributionConfig.cluster("storage").redundancy()); + assertEquals(4, distributionConfig.cluster("storage").group().size()); + assertEquals(1, distributionConfig.cluster().size()); + StorDistributionConfig.Builder storBuilder = new StorDistributionConfig.Builder(); cc.getConfig(storBuilder); StorDistributionConfig storConfig = new StorDistributionConfig(storBuilder); assertEquals(15, storConfig.initial_redundancy()); assertEquals(15, storConfig.redundancy()); assertEquals(3, storConfig.ready_copies()); + ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder(); cc.getSearch().getConfig(protonBuilder); ProtonConfig protonConfig = new ProtonConfig(protonBuilder); @@ -132,12 +143,20 @@ public class ContentClusterTest extends ContentBaseTest { " </group>" + "</content>" ); + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cc.getConfig(distributionBuilder); + DistributionConfig distributionConfig = distributionBuilder.build(); + assertEquals(3, distributionConfig.cluster("storage").ready_copies()); + assertEquals(4, distributionConfig.cluster("storage").initial_redundancy()); + assertEquals(5, distributionConfig.cluster("storage").redundancy()); + StorDistributionConfig.Builder storBuilder = new StorDistributionConfig.Builder(); cc.getConfig(storBuilder); StorDistributionConfig storConfig = new StorDistributionConfig(storBuilder); assertEquals(4, storConfig.initial_redundancy()); assertEquals(5, storConfig.redundancy()); assertEquals(3, storConfig.ready_copies()); + ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder(); cc.getSearch().getConfig(protonBuilder); ProtonConfig protonConfig = new ProtonConfig(protonBuilder); @@ -163,8 +182,7 @@ public class ContentClusterTest extends ContentBaseTest { @Test public void testRedundancyDefaults() { - StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); - parse( + ContentCluster cc = parse( "<content version=\"1.0\" id=\"storage\">\n" + " <documents/>" + " <group>" + @@ -173,8 +191,15 @@ public class ContentClusterTest extends ContentBaseTest { " <node hostalias=\"mockhost\" distribution-key=\"2\"/>\"" + " </group>" + "</content>" - ).getConfig(builder); + ); + + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cc.getConfig(distributionBuilder); + DistributionConfig distributionConfig = distributionBuilder.build(); + assertEquals(3, distributionConfig.cluster("storage").redundancy()); + StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); + cc.getConfig(builder); StorDistributionConfig config = new StorDistributionConfig(builder); assertEquals(2, config.initial_redundancy()); assertEquals(3, config.redundancy()); @@ -548,6 +573,13 @@ public class ContentClusterTest extends ContentBaseTest { "</content>" ); + DistributionConfig.Builder bob = new DistributionConfig.Builder(); + cluster.getConfig(bob); + DistributionConfig.Cluster.Group group = bob.build().cluster("test").group(0); + assertEquals("invalid", group.name()); + assertEquals("invalid", group.index()); + assertEquals(2, group.nodes().size()); + StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); cluster.getConfig(builder); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java index d290d4ec953..80ab6745b79 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java @@ -2,10 +2,6 @@ package com.yahoo.vespa.model.content; import com.yahoo.vespa.config.content.StorDistributionConfig; -import com.yahoo.config.model.test.MockRoot; -import com.yahoo.vespa.model.Host; -import com.yahoo.vespa.model.HostResource; -import com.yahoo.vespa.model.SimpleConfigProducer; import com.yahoo.vespa.model.content.cluster.ContentCluster; import com.yahoo.vespa.model.search.DispatchGroup; import com.yahoo.vespa.model.search.SearchInterface; @@ -17,9 +13,9 @@ import java.util.List; import java.util.Optional; import static com.yahoo.config.model.test.TestUtil.joinLines; -import static org.hamcrest.Matchers.containsString; import static com.yahoo.vespa.model.content.utils.ContentClusterUtils.createCluster; import static com.yahoo.vespa.model.content.utils.ContentClusterUtils.createClusterXml; +import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java index cb457cabf6c..b9495d45e08 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageGroupTest.java @@ -2,13 +2,14 @@ package com.yahoo.vespa.model.content; import com.yahoo.config.model.test.MockRoot; +import com.yahoo.vespa.config.content.DistributionConfig; import com.yahoo.vespa.config.content.StorDistributionConfig; import com.yahoo.vespa.model.content.cluster.ContentCluster; import com.yahoo.vespa.model.content.utils.ContentClusterUtils; import org.junit.Test; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * Test for storage groups. @@ -21,7 +22,6 @@ public class StorageGroupTest { @Test public void testSingleGroup() throws Exception { - StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); ContentCluster cluster = parse( "<content id=\"storage\">\n" + " <documents/>" + @@ -32,8 +32,6 @@ public class StorageGroupTest { "</content>" ); - cluster.getConfig(builder); - assertEquals("content", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("clustertype")); assertEquals("storage", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("clustername")); assertEquals("0", cluster.getStorageNodes().getChildren().get("0").getServicePropertyString("index")); @@ -42,6 +40,8 @@ public class StorageGroupTest { assertEquals("storage", cluster.getDistributorNodes().getChildren().get("0").getServicePropertyString("clustername")); assertEquals("0", cluster.getDistributorNodes().getChildren().get("0").getServicePropertyString("index")); + StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); + cluster.getConfig(builder); StorDistributionConfig config = new StorDistributionConfig(builder); assertEquals(1, config.group().size()); @@ -51,6 +51,17 @@ public class StorageGroupTest { assertEquals(0, config.group(0).nodes(0).index()); assertEquals(1, config.group(0).nodes(1).index()); //assertNotNull(cluster.getRootGroup().getNodes().get(0).getHost()); + + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cluster.getConfig(distributionBuilder); + DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage"); + + assertEquals(1, clusterConfig.group().size()); + assertEquals("invalid", clusterConfig.group(0).index()); + assertEquals("invalid", clusterConfig.group(0).name()); + assertEquals(2, clusterConfig.group(0).nodes().size()); + assertEquals(0, clusterConfig.group(0).nodes(0).index()); + assertEquals(1, clusterConfig.group(0).nodes(1).index()); } @Test @@ -70,15 +81,14 @@ public class StorageGroupTest { " </group>\n" + "</cluster>" ); - assertTrue(false); + fail(); } catch (Exception e) { } } @Test public void testNestedGroups() throws Exception { - StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); - parse( + ContentCluster cluster = parse( "<content version=\"1.0\" id=\"storage\">\n" + " <redundancy>4</redundancy>" + " <documents/>" + @@ -101,8 +111,10 @@ public class StorageGroupTest { " </group>\n" + " </group>\n" + "</content>" - ).getConfig(builder); + ); + StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); + cluster.getConfig(builder); StorDistributionConfig config = new StorDistributionConfig(builder); assertEquals(5, config.group().size()); @@ -128,12 +140,39 @@ public class StorageGroupTest { assertEquals(5, config.group(4).nodes(1).index()); assertEquals("1|*", config.group(0).partitions()); + + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cluster.getConfig(distributionBuilder); + DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage"); + + assertEquals(5, clusterConfig.group().size()); + assertEquals("invalid", clusterConfig.group(0).index()); + assertEquals("0", clusterConfig.group(1).index()); + assertEquals("1", clusterConfig.group(2).index()); + assertEquals("1.0", clusterConfig.group(3).index()); + assertEquals("1.1", clusterConfig.group(4).index()); + assertEquals("invalid", clusterConfig.group(0).name()); + assertEquals("sub1", clusterConfig.group(1).name()); + assertEquals("sub2", clusterConfig.group(2).name()); + assertEquals("sub3", clusterConfig.group(3).name()); + assertEquals("sub4", clusterConfig.group(4).name()); + assertEquals(2, clusterConfig.group(1).nodes().size()); + assertEquals(0, clusterConfig.group(1).nodes(0).index()); + assertEquals(1, clusterConfig.group(1).nodes(1).index()); + assertEquals(0, clusterConfig.group(2).nodes().size()); + assertEquals(2, clusterConfig.group(3).nodes().size()); + assertEquals(2, clusterConfig.group(3).nodes(0).index()); + assertEquals(3, clusterConfig.group(3).nodes(1).index()); + assertEquals(2, clusterConfig.group(4).nodes().size()); + assertEquals(4, clusterConfig.group(4).nodes(0).index()); + assertEquals(5, clusterConfig.group(4).nodes(1).index()); + + assertEquals("1|*", clusterConfig.group(0).partitions()); } @Test public void testGroupCapacity() throws Exception { - StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); - parse( + ContentCluster cluster = parse( "<content version=\"1.0\" id=\"storage\">\n" + " <redundancy>2</redundancy>" + " <documents/>" + @@ -149,13 +188,25 @@ public class StorageGroupTest { " </group>\n" + " </group>\n" + "</content>" - ).getConfig(builder); + ); + StorDistributionConfig.Builder builder = new StorDistributionConfig.Builder(); + cluster.getConfig(builder); StorDistributionConfig config = new StorDistributionConfig(builder); assertEquals(3, config.group().size()); assertEquals(5.5, config.group(0).capacity(), 0.001); assertEquals(2, config.group(1).capacity(), 0.001); assertEquals(3.5, config.group(2).capacity(), 0.001); + + DistributionConfig.Builder distributionBuilder = new DistributionConfig.Builder(); + cluster.getConfig(distributionBuilder); + DistributionConfig.Cluster clusterConfig = distributionBuilder.build().cluster("storage"); + + assertEquals(3, clusterConfig.group().size()); + assertEquals(5.5, clusterConfig.group(0).capacity(), 0.001); + assertEquals(2, clusterConfig.group(1).capacity(), 0.001); + assertEquals(3.5, clusterConfig.group(2).capacity(), 0.001); } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java index 9e7370a933c..2663ad1f348 100755 --- a/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/routing/test/RoutingTestCase.java @@ -5,12 +5,20 @@ import com.yahoo.config.ConfigInstance; import com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig; import com.yahoo.io.IOUtils; import com.yahoo.messagebus.MessagebusConfig; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg; import org.junit.Ignore; import org.junit.Test; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -96,6 +104,10 @@ public class RoutingTestCase { model.getConfig(drB, ""); DocumentrouteselectorpolicyConfig dr = new DocumentrouteselectorpolicyConfig(drB); assertConfigFileContains(application, files, "documentrouteselectorpolicy.cfg", dr); + + DocumentProtocolPoliciesConfig.Builder policies = new DocumentProtocolPoliciesConfig.Builder(); + model.getConfig(policies, ""); + assertConfigFileContains(application, files, "document-protocol-policies.cfg", policies.build()); } else { StringBuilder msg = new StringBuilder(); for (String error : errors) { |