diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2016-09-05 17:23:14 +0200 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2016-09-05 17:23:14 +0200 |
commit | 987061913e6290f1d3684a5e89a63bb4723999a9 (patch) | |
tree | bb6198c3497fb8cc95e9809eb0b7a5fe2b69a5b5 /config-model | |
parent | 192ba0c1978b792e55c597f9a7ad4cd03b6326c4 (diff) |
Only schedule bucket integrity checker runs when on VDS
Non-VDS providers today do not implement explicit bucket integrity checking,
so no point in using CPU time on what's effectively a bunch of no-ops.
Diffstat (limited to 'config-model')
3 files changed, 56 insertions, 5 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/IntegrityCheckerProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/IntegrityCheckerProducer.java index 69bf29ca307..14138c6413d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/IntegrityCheckerProducer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/IntegrityCheckerProducer.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.content.storagecluster; import com.yahoo.vespa.config.content.core.StorIntegritycheckerConfig; import com.yahoo.config.model.ConfigModelUtils; import com.yahoo.vespa.model.builder.xml.dom.ModelElement; +import com.yahoo.vespa.model.content.cluster.ContentCluster; /** * Serves stor-integritychecker config for storage clusters. @@ -11,7 +12,11 @@ import com.yahoo.vespa.model.builder.xml.dom.ModelElement; public class IntegrityCheckerProducer implements StorIntegritycheckerConfig.Producer { public static class Builder { - protected IntegrityCheckerProducer build(ModelElement clusterElem) { + protected IntegrityCheckerProducer build(ContentCluster cluster, ModelElement clusterElem) { + if (!cluster.isMemfilePersistence()) { + return integrityCheckerDisabled(); + } + ModelElement tuning = clusterElem.getChild("tuning"); if (tuning == null) { @@ -63,6 +68,12 @@ public class IntegrityCheckerProducer implements StorIntegritycheckerConfig.Prod this.weeklyCycle = weeklyCycle; } + private static IntegrityCheckerProducer integrityCheckerDisabled() { + // Leave start/start times at default, but mark each day of the week as + // not allowing the integrity checker to be run. + return new IntegrityCheckerProducer(null, null, "-------"); + } + @Override public void getConfig(StorIntegritycheckerConfig.Builder builder) { if (startTime != null) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java index 6c9cbadd21a..4f332c88702 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java @@ -32,12 +32,13 @@ public class StorageCluster extends AbstractConfigProducer<StorageNode> public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<StorageCluster> { @Override protected StorageCluster doBuild(AbstractConfigProducer ancestor, Element producerSpec) { - ModelElement clusterElem = new ModelElement(producerSpec); + final ModelElement clusterElem = new ModelElement(producerSpec); + final ContentCluster cluster = (ContentCluster)ancestor; return new StorageCluster(ancestor, ContentCluster.getClusterName(clusterElem), - new FileStorProducer.Builder().build(((ContentCluster)ancestor), clusterElem), - new IntegrityCheckerProducer.Builder().build(clusterElem), + new FileStorProducer.Builder().build(cluster, clusterElem), + new IntegrityCheckerProducer.Builder().build(cluster, clusterElem), new StorServerProducer.Builder().build(clusterElem), new StorVisitorProducer.Builder().build(clusterElem), new PersistenceProducer.Builder().build(clusterElem)); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java index 990c0e10927..64ed53795b9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java @@ -151,11 +151,14 @@ public class StorageClusterTest { } @Test - public void testMaintenance() { + public void maintenance_tuning_is_honored_for_vds_provider() { StorIntegritycheckerConfig.Builder builder = new StorIntegritycheckerConfig.Builder(); parse( "<cluster id=\"bees\">\n" + " <documents/>" + + " <engine>\n" + + " <vds/>\n" + + " </engine>\n" + " <tuning>" + " <maintenance start=\"01:00\" stop=\"02:00\" high=\"tuesday\"/>\n" + " </tuning>" + @@ -172,6 +175,42 @@ public class StorageClusterTest { } @Test + public void integrity_checker_explicitly_disabled_when_not_running_with_vds_provider() { + StorIntegritycheckerConfig.Builder builder = new StorIntegritycheckerConfig.Builder(); + parse( + "<cluster id=\"bees\">\n" + + " <documents/>" + + " <group>" + + " <node distribution-key=\"0\" hostalias=\"mockhost\"/>" + + " </group>" + + "</cluster>" + ).getConfig(builder); + StorIntegritycheckerConfig config = new StorIntegritycheckerConfig(builder); + // '-' --> don't run on the given week day + assertEquals("-------", config.weeklycycle()); + } + + @Test + public void integrity_checker_not_explicitly_disabled_when_running_with_vds_provider() { + StorIntegritycheckerConfig.Builder builder = new StorIntegritycheckerConfig.Builder(); + parse( + "<cluster id=\"bees\">\n" + + " <documents/>" + + " <engine>\n" + + " <vds/>\n" + + " </engine>\n" + + " <group>" + + " <node distribution-key=\"0\" hostalias=\"mockhost\"/>" + + " </group>" + + "</cluster>" + ).getConfig(builder); + StorIntegritycheckerConfig config = new StorIntegritycheckerConfig(builder); + // No tuning element has been provided, but we should still get a default weeklycycle + // config generated since we're on VDS. + assertEquals("Rrrrrrr", config.weeklycycle()); + } + + @Test public void testCapacity() { Document doc = XML.getDocument( "<cluster id=\"storage\">\n" + |