diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2023-06-23 13:31:06 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2023-06-23 13:31:06 +0200 |
commit | 05557feb18e0e3ae7040235c48a531ef6c5224ae (patch) | |
tree | c3e4471fa56456368227fd127beffa7e0cc6e661 /config-model/src/test/java/com/yahoo/vespa/model/content | |
parent | 19186471396cb886e726f6c35f0031c6fad33b54 (diff) |
Set the recommended searchable copies with streaming
With streaming it is better to make all copies ready.
This does it automatically so we can avoid documenting
that users need to make sure of this by themselves.
Diffstat (limited to 'config-model/src/test/java/com/yahoo/vespa/model/content')
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java | 120 |
1 files changed, 93 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..a22fbb4d308 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,9 @@ 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()); + System.out.println("Ya, the message is '" + Exceptions.toMessageString(e) + "'"); + assertEquals("In content cluster 'bar': Either <redundancy> or <min-redundancy> must be set", + Exceptions.toMessageString(e)); } } @@ -478,12 +481,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 +498,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 +977,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 +998,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); |