aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-05-09 13:26:58 +0200
committerGitHub <noreply@github.com>2023-05-09 13:26:58 +0200
commit828af840b006fd34e3d0ad84b35471ef212e8703 (patch)
treedb31f53c63d21c602a0d2387d45bf9031bf23733 /config-model/src/test/java/com
parent9a41de7b23dce838df8a8ebac42fc41da3478bb9 (diff)
parent8ad54b6ae9cf8aa7017dcf2d2a69874ebc1340a7 (diff)
Merge pull request #27044 from vespa-engine/bratseth/default-deadline
Bratseth/default deadline
Diffstat (limited to 'config-model/src/test/java/com')
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java144
1 files changed, 139 insertions, 5 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
index 0abb153696c..82baed07997 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
@@ -5,10 +5,14 @@ import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.deploy.TestProperties;
import com.yahoo.config.model.provision.InMemoryProvisioner;
import com.yahoo.config.model.test.MockApplicationPackage;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import org.junit.jupiter.api.Test;
@@ -41,29 +45,158 @@ public class ClusterInfoTest {
<prod>
<region>us-west-1</region>
<region>us-east-1</region>
+ <region>eu-west-1</region>
</prod>
- <bcp>
+ <bcp deadline='48h'>
<group deadline='30m'>
<region fraction='0.5'>us-east-1</region>
<region>us-west-1</region>
</group>
- <group>
+ <group deadline='0m'>
<region fraction='0.5'>us-east-1</region>
</group>
+ <group>
+ <region>eu-west-1</region>
+ </group>
</bcp>
</deployment>
""";
- var requestedInUsEast1 = requestedCapacityIn("us-east-1", servicesXml, deploymentXml);
+ var requestedInUsEast1 = requestedCapacityIn("default", "us-east-1", servicesXml, deploymentXml);
assertEquals(Duration.ofMinutes(0), requestedInUsEast1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
assertEquals(Duration.ofMinutes(0), requestedInUsEast1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
- var requestedInUsWest1 = requestedCapacityIn("us-west-1", servicesXml, deploymentXml);
+ var requestedInUsWest1 = requestedCapacityIn("default", "us-west-1", servicesXml, deploymentXml);
assertEquals(Duration.ofMinutes(30), requestedInUsWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
assertEquals(Duration.ofMinutes(30), requestedInUsWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInEuWest1 = requestedCapacityIn("default", "eu-west-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInEuWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInEuWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+ }
+
+ /** A high default deadline only will cause no resources to be set aside for BCP. */
+ @Test
+ void specifying_only_default_deadline_is_possible() throws Exception {
+ var servicesXml = """
+ <services version='1.0'>
+ <container id='testcontainer' version='1.0'>
+ <nodes count='3'/>
+ </container>
+ <content id='testcontent' version='1.0'>
+ <redundancy>2</redundancy>
+ <documents/>
+ </content>
+ </services>
+ """;
+
+ var deploymentXml = """
+ <deployment version='1.0'>
+ <instance id='default'>
+ <prod>
+ <region>us-east-1</region>
+ <region>us-west-1</region>
+ </prod>
+ </instance>
+ <bcp deadline='2d'/>
+ </deployment>
+ """;
+
+ var requestedInUsEast1 = requestedCapacityIn("default", "us-east-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInUsEast1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInUsEast1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInUsWest1 = requestedCapacityIn("default", "us-west-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInUsWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInUsWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+ }
+
+ /** This implicitly creates one BCP group (which gives the same result as above). */
+ @Test
+ void specifying_bcp_without_explicit_groups() throws Exception {
+ var servicesXml = """
+ <services version='1.0'>
+ <container id='testcontainer' version='1.0'>
+ <nodes count='3'/>
+ </container>
+ <content id='testcontent' version='1.0'>
+ <redundancy>2</redundancy>
+ <documents/>
+ </content>
+ </services>
+ """;
+
+ var deploymentXml = """
+ <deployment version='1.0'>
+ <instance id='default'>
+ <prod>
+ <region>us-east-1</region>
+ <region>us-west-1</region>
+ </prod>
+ <bcp deadline='48h'/>
+ </instance>
+ </deployment>
+ """;
+
+ var requestedInUsEast1 = requestedCapacityIn("default", "us-east-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInUsEast1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInUsEast1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInUsWest1 = requestedCapacityIn("default", "us-west-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInUsWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInUsWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+ }
+
+ @Test
+ void default_bcp_with_multiple_instances() throws Exception {
+ var servicesXml = """
+ <services version='1.0'>
+ <container id='testcontainer' version='1.0'>
+ <nodes count='3'/>
+ </container>
+ <content id='testcontent' version='1.0'>
+ <redundancy>2</redundancy>
+ <documents/>
+ </content>
+ </services>
+ """;
+
+ var deploymentXml = """
+ <deployment version='1.0'>
+ <instance id='i1'>
+ <prod>
+ <region>us-east-1</region>
+ <region>us-west-1</region>
+ </prod>
+ </instance>
+ <instance id='i2'>
+ <prod>
+ <region>us-east-1</region>
+ <region>eu-west-1</region>
+ </prod>
+ </instance>
+ <bcp deadline='48h'/>
+ </deployment>
+ """;
+
+ var requestedInI1UsEast1 = requestedCapacityIn("i1", "us-east-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInI1UsEast1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInI1UsEast1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInI1UsWest1 = requestedCapacityIn("i1", "us-west-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInI1UsWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInI1UsWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInI2UsEast1 = requestedCapacityIn("i2", "us-east-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInI2UsEast1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInI2UsEast1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
+
+ var requestedInI2UsWest1 = requestedCapacityIn("i2", "eu-west-1", servicesXml, deploymentXml);
+ assertEquals(Duration.ofHours(48), requestedInI2UsWest1.get(new ClusterSpec.Id("testcontainer")).clusterInfo().bcpDeadline());
+ assertEquals(Duration.ofHours(48), requestedInI2UsWest1.get(new ClusterSpec.Id("testcontent")).clusterInfo().bcpDeadline());
}
- private Map<ClusterSpec.Id, Capacity> requestedCapacityIn(String region, String servicesXml, String deploymentXml) throws Exception {
+ private Map<ClusterSpec.Id, Capacity> requestedCapacityIn(String instance, String region, String servicesXml, String deploymentXml) throws Exception {
var applicationPackage = new MockApplicationPackage.Builder()
.withServices(servicesXml)
.withDeploymentSpec(deploymentXml)
@@ -74,6 +207,7 @@ public class ClusterInfoTest {
.applicationPackage(applicationPackage)
.zone(new Zone(Environment.prod, RegionName.from(region)))
.properties(new TestProperties().setHostedVespa(true)
+ .setApplicationId(ApplicationId.from(TenantName.defaultName(), ApplicationName.defaultName(), InstanceName.from(instance)))
.setZone(new Zone(Environment.prod, RegionName.from(region))))
.modelHostProvisioner(provisioner)
.provisioned(provisioner.provisioned())