diff options
Diffstat (limited to 'config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java')
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java | 119 |
1 files changed, 92 insertions, 27 deletions
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 4ce7119f5f7..73bbd6ee464 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 @@ -38,6 +38,7 @@ import com.yahoo.vespa.model.routing.DocumentProtocol; import com.yahoo.vespa.model.routing.Routing; import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; +import com.yahoo.yolean.Exceptions; import org.junit.jupiter.api.Test; import java.util.Arrays; @@ -470,7 +471,8 @@ public class ContentClusterTest extends ContentBaseTest { new VespaModelCreatorWithMockPkg(getHosts(), xml, sds).create(); fail("Deploying without redundancy should fail"); } catch (IllegalArgumentException e) { - assertTrue(e.getMessage().contains("Either <redundancy> or <min-redundancy> must be set"), e.getMessage()); + assertEquals("In content cluster 'bar': Either <redundancy> or <min-redundancy> must be set", + Exceptions.toMessageString(e)); } } @@ -478,12 +480,13 @@ public class ContentClusterTest extends ContentBaseTest { void testRedundancyFinalLessThanInitial() { try { parse( - "<content version=\"1.0\" id=\"storage\">\n" + - " <redundancy reply-after=\"4\">2</redundancy>\n" + - " <group>" + - " <node hostalias='node0' distribution-key='0' />" + - " </group>" + - "</content>" + """ + <content version="1.0" id="storage"> + <redundancy reply-after="4">2</redundancy> + <group> + <node hostalias='node0' distribution-key='0' /> + </group> + </content>""" ); fail("no exception thrown"); } catch (Exception e) { /* ignore */ @@ -494,17 +497,18 @@ public class ContentClusterTest extends ContentBaseTest { void testReadyTooHigh() { try { parse( - "<content version=\"1.0\" id=\"storage\">\n" + - " <engine>" + - " <proton>" + - " <searchable-copies>3</searchable-copies>" + - " </proton>" + - " </engine>" + - " <redundancy>2</redundancy>\n" + - " <group>" + - " <node hostalias='node0' distribution-key='0' />" + - " </group>" + - "</content>" + """ + <content version="1.0" id="storage"> + <engine> + <proton> + <searchable-copies>3</searchable-copies> + </proton> + </engine> + <redundancy>2</redundancy> + <group> + <node hostalias='node0' distribution-key='0' /> + </group> + </content>""" ); fail("no exception thrown"); } catch (Exception e) { /* ignore */ @@ -972,15 +976,17 @@ public class ContentClusterTest extends ContentBaseTest { @Test void reserved_document_name_throws_exception() { - String xml = "<content version=\"1.0\" id=\"storage\">" + - " <redundancy>1</redundancy>" + - " <documents>" + - " <document type=\"true\" mode=\"index\"/>" + - " </documents>" + - " <group>" + - " <node distribution-key=\"0\" hostalias=\"mockhost\"/>" + - " </group>" + - "</content>"; + String xml = """ + <content version="1.0" id="storage"> + <redundancy>1</redundancy> + <documents> + <document type="true" mode="index"/> + </documents> + <group> + <node distribution-key="0" hostalias="mockhost"/> + </group> + </content> + """; List<String> sds = ApplicationPackageUtils.generateSchemas("true"); try { @@ -991,6 +997,65 @@ public class ContentClusterTest extends ContentBaseTest { } } + @Test + void default_searchable_copies_indexing() { + String services = """ + <content version="1.0" id="storage"> + <redundancy>3</redundancy> + <documents> + <document type="music" mode="index"/> + </documents> + <group> + <node distribution-key="0" hostalias="mockhost"/> + <node distribution-key="1" hostalias="mockhost"/> + <node distribution-key="2" hostalias="mockhost"/> + </group> + </content> + """; + var model = new VespaModelCreatorWithMockPkg(null, services, ApplicationPackageUtils.generateSchemas("music")).create(); + assertEquals(2, model.getContentClusters().get("storage").getRedundancy().readyCopies()); + } + + @Test + void default_searchable_copies_streaming() { + String services = """ + <content version="1.0" id="storage"> + <redundancy>3</redundancy> + <documents> + <document type="mail" mode="streaming"/> + </documents> + <group> + <node distribution-key="0" hostalias="mockhost"/> + <node distribution-key="1" hostalias="mockhost"/> + <node distribution-key="2" hostalias="mockhost"/> + </group> + </content> + """; + var model = new VespaModelCreatorWithMockPkg(null, services, ApplicationPackageUtils.generateSchemas("mail")).create(); + assertEquals(3, model.getContentClusters().get("storage").getRedundancy().readyCopies()); + } + + /** Here there is no good choice. */ + @Test + void default_searchable_copies_mixed() { + String services = """ + <content version="1.0" id="storage"> + <redundancy>3</redundancy> + <documents> + <document type="music" mode="index"/> + <document type="mail" mode="streaming"/> + </documents> + <group> + <node distribution-key="0" hostalias="mockhost"/> + <node distribution-key="1" hostalias="mockhost"/> + <node distribution-key="2" hostalias="mockhost"/> + </group> + </content> + """; + var model = new VespaModelCreatorWithMockPkg(null, services, ApplicationPackageUtils.generateSchemas("music", "mail")).create(); + assertEquals(2, model.getContentClusters().get("storage").getRedundancy().readyCopies()); + } + private void assertClusterHasBucketSpaceMappings(AllClustersBucketSpacesConfig config, String clusterId, List<String> defaultSpaceTypes, List<String> globalSpaceTypes) { AllClustersBucketSpacesConfig.Cluster cluster = config.cluster(clusterId); |