summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java149
1 files changed, 149 insertions, 0 deletions
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
new file mode 100644
index 00000000000..6c9cbadd21a
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java
@@ -0,0 +1,149 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.content.storagecluster;
+
+import com.yahoo.vespa.config.content.core.StorIntegritycheckerConfig;
+import com.yahoo.vespa.config.storage.StorMemfilepersistenceConfig;
+import com.yahoo.vespa.config.content.core.StorBucketmoverConfig;
+import com.yahoo.vespa.config.content.core.StorVisitorConfig;
+import com.yahoo.vespa.config.content.StorFilestorConfig;
+import com.yahoo.vespa.config.content.core.StorServerConfig;
+import com.yahoo.vespa.config.content.PersistenceConfig;
+import com.yahoo.metrics.MetricsmanagerConfig;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
+import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder;
+import com.yahoo.vespa.model.content.cluster.ContentCluster;
+import com.yahoo.vespa.model.builder.xml.dom.ModelElement;
+import com.yahoo.vespa.model.content.StorageNode;
+import org.w3c.dom.Element;
+
+/**
+ * Represents configuration that is common to all storage nodes.
+ */
+public class StorageCluster extends AbstractConfigProducer<StorageNode>
+ implements StorServerConfig.Producer,
+ StorBucketmoverConfig.Producer,
+ StorMemfilepersistenceConfig.Producer,
+ StorIntegritycheckerConfig.Producer,
+ StorFilestorConfig.Producer,
+ StorVisitorConfig.Producer,
+ PersistenceConfig.Producer,
+ MetricsmanagerConfig.Producer
+{
+ public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<StorageCluster> {
+ @Override
+ protected StorageCluster doBuild(AbstractConfigProducer ancestor, Element producerSpec) {
+ ModelElement clusterElem = new ModelElement(producerSpec);
+
+ return new StorageCluster(ancestor,
+ ContentCluster.getClusterName(clusterElem),
+ new FileStorProducer.Builder().build(((ContentCluster)ancestor), clusterElem),
+ new IntegrityCheckerProducer.Builder().build(clusterElem),
+ new StorServerProducer.Builder().build(clusterElem),
+ new StorVisitorProducer.Builder().build(clusterElem),
+ new PersistenceProducer.Builder().build(clusterElem));
+ }
+ }
+
+ private Integer bucketMoverMaxFillAboveAverage = null;
+ private Long cacheSize = null;
+ private Double diskFullPercentage = null;
+
+ private String clusterName;
+ private FileStorProducer fileStorProducer;
+ private IntegrityCheckerProducer integrityCheckerProducer;
+ private StorServerProducer storServerProducer;
+ private StorVisitorProducer storVisitorProducer;
+ private PersistenceProducer persistenceProducer;
+
+ StorageCluster(AbstractConfigProducer parent,
+ String clusterName,
+ FileStorProducer fileStorProducer,
+ IntegrityCheckerProducer integrityCheckerProducer,
+ StorServerProducer storServerProducer,
+ StorVisitorProducer storVisitorProducer,
+ PersistenceProducer persistenceProducer) {
+ super(parent, "storage");
+ this.clusterName = clusterName;
+ this.fileStorProducer = fileStorProducer;
+ this.integrityCheckerProducer = integrityCheckerProducer;
+ this.storServerProducer = storServerProducer;
+ this.storVisitorProducer = storVisitorProducer;
+ this.persistenceProducer = persistenceProducer;
+ }
+
+ @Override
+ public void getConfig(StorBucketmoverConfig.Builder builder) {
+ if (bucketMoverMaxFillAboveAverage != null) {
+ builder.max_target_fill_rate_above_average(bucketMoverMaxFillAboveAverage);
+ }
+ }
+
+ @Override
+ public void getConfig(StorMemfilepersistenceConfig.Builder builder) {
+ if (cacheSize != null) {
+ builder.cache_size(cacheSize);
+ }
+
+ if (diskFullPercentage != null) {
+ builder.disk_full_factor(diskFullPercentage / 100.0);
+ builder.disk_full_factor_move(diskFullPercentage / 100.0 * 0.9);
+ }
+ }
+
+ @Override
+ public void getConfig(MetricsmanagerConfig.Builder builder) {
+ ContentCluster.getMetricBuilder("fleetcontroller", builder).
+ addedmetrics("vds.filestor.*.allthreads.put.sum").
+ addedmetrics("vds.filestor.*.allthreads.get.sum").
+ addedmetrics("vds.filestor.*.allthreads.multi.sum").
+ addedmetrics("vds.filestor.*.allthreads.update.sum").
+ addedmetrics("vds.filestor.*.allthreads.remove.sum").
+ addedmetrics("vds.filestor.*.allthreads.operations").
+ addedmetrics("vds.datastored.alldisks.docs").
+ addedmetrics("vds.datastored.alldisks.bytes").
+ addedmetrics("vds.datastored.alldisks.buckets");
+
+ ContentCluster.getMetricBuilder("log", builder).
+ addedmetrics("vds.filestor.alldisks.allthreads.put.sum").
+ addedmetrics("vds.filestor.alldisks.allthreads.get.sum").
+ addedmetrics("vds.filestor.alldisks.allthreads.remove.sum").
+ addedmetrics("vds.filestor.alldisks.allthreads.update.sum").
+ addedmetrics("vds.datastored.alldisks.docs").
+ addedmetrics("vds.datastored.alldisks.bytes").
+ addedmetrics("vds.filestor.alldisks.queuesize").
+ addedmetrics("vds.filestor.alldisks.averagequeuewait.sum").
+ addedmetrics("vds.visitor.cv_queuewaittime").
+ addedmetrics("vds.visitor.allthreads.averagequeuewait").
+ addedmetrics("vds.visitor.allthreads.averagevisitorlifetime").
+ addedmetrics("vds.visitor.allthreads.created.sum");
+ }
+
+ public String getClusterName() {
+ return clusterName;
+ }
+
+ @Override
+ public void getConfig(StorIntegritycheckerConfig.Builder builder) {
+ integrityCheckerProducer.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(StorServerConfig.Builder builder) {
+ storServerProducer.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(StorVisitorConfig.Builder builder) {
+ storVisitorProducer.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(PersistenceConfig.Builder builder) {
+ persistenceProducer.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(StorFilestorConfig.Builder builder) {
+ fileStorProducer.getConfig(builder);
+ }
+}