summaryrefslogtreecommitdiffstats
path: root/clustercontroller-core/src/main
diff options
context:
space:
mode:
authorArnstein Ressem <aressem@gmail.com>2021-03-12 13:58:06 +0100
committerGitHub <noreply@github.com>2021-03-12 13:58:06 +0100
commit0394a2a4430ee34ea7cafe03c98592199eda492f (patch)
tree65acd8c44c09f0e00c03e85751fff733d95bccb9 /clustercontroller-core/src/main
parent5fc288ac15612f400879f7278d588541fe8257a4 (diff)
Revert "GC unused DiskState"
Diffstat (limited to 'clustercontroller-core/src/main')
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/ClusterControllerStateRestAPI.java12
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Id.java12
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Response.java5
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/UnitPathResolver.java14
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java69
5 files changed, 105 insertions, 7 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/ClusterControllerStateRestAPI.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/ClusterControllerStateRestAPI.java
index 6c80973c4af..169684aa742 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/ClusterControllerStateRestAPI.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/ClusterControllerStateRestAPI.java
@@ -2,12 +2,7 @@
package com.yahoo.vespa.clustercontroller.core.restapiv2;
import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTaskScheduler;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.ClusterListRequest;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.ClusterStateRequest;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.NodeStateRequest;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.ServiceStateRequest;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.SetNodeStateRequest;
-import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.SetNodeStatesForClusterRequest;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.requests.*;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.StateRestAPI;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.InternalFailure;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.OtherMasterException;
@@ -17,6 +12,7 @@ import com.yahoo.vespa.clustercontroller.utils.staterestapi.requests.UnitStateRe
import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.SetResponse;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.UnitResponse;
+import java.util.EnumSet;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Logger;
@@ -90,6 +86,10 @@ public class ClusterControllerStateRestAPI implements StateRestAPI {
public Request<? extends UnitResponse> visitNode(Id.Node id) {
return new NodeStateRequest(id);
}
+ @Override
+ public Request<? extends UnitResponse> visitPartition(Id.Partition id) {
+ return new PartitionStateRequest(id, EnumSet.of(VerboseReport.STATISTICS));
+ }
});
if (req instanceof ClusterListRequest) {
log.fine("Got cluster list request");
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Id.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Id.java
index 1a0fe6cdf8e..ed5af93d7fb 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Id.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Id.java
@@ -52,4 +52,16 @@ public class Id {
public String toString() { return super.toString() + "/" + id; }
}
+ public static class Partition extends Node {
+ private final int id;
+
+ public Partition(Node n, int partition) {
+ super(n, n.id);
+ this.id = partition;
+ }
+
+ public final int getPartitionIndex() { return id; }
+ public String toString() { return super.toString() + "/" + id; }
+ }
+
}
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Response.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Response.java
index 82512262b4a..17949b82365 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Response.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/Response.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.clustercontroller.core.restapiv2;
+import com.yahoo.vdslib.state.DiskState;
import com.yahoo.vdslib.state.NodeState;
import com.yahoo.vdslib.state.State;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.InternalFailure;
@@ -31,6 +32,10 @@ public class Response {
this.id = parseId(ns.getState());
this.reason = ns.getDescription();
}
+ public UnitStateImpl(DiskState ds) throws StateRestApiException {
+ this.id = parseId(ds.getState());
+ this.reason = ds.getDescription();
+ }
public String parseId(State id) throws StateRestApiException {
switch (id) {
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/UnitPathResolver.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/UnitPathResolver.java
index 04fd154ff6b..4dc73f4d0dd 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/UnitPathResolver.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/UnitPathResolver.java
@@ -6,6 +6,7 @@ import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTaskSchedul
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.MissingUnitException;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.OperationNotSupportedForUnitException;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.StateRestApiException;
+import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.UnitResponse;
import java.util.HashMap;
import java.util.Map;
@@ -18,6 +19,7 @@ public class UnitPathResolver<T> {
Request<? extends T> visitCluster(Id.Cluster id) throws StateRestApiException;
Request<? extends T> visitService(Id.Service id) throws StateRestApiException;
Request<? extends T> visitNode(Id.Node id) throws StateRestApiException;
+ Request<? extends T> visitPartition(Id.Partition id) throws StateRestApiException;
}
@@ -38,6 +40,7 @@ public class UnitPathResolver<T> {
public Request<? extends T> visitCluster(Id.Cluster id) throws StateRestApiException { return fail(); }
public Request<? extends T> visitService(Id.Service id) throws StateRestApiException { return fail(); }
public Request<? extends T> visitNode(Id.Node id) throws StateRestApiException { return fail(); }
+ public Request<? extends T> visitPartition(Id.Partition id) throws StateRestApiException { return fail(); }
}
@@ -84,7 +87,16 @@ public class UnitPathResolver<T> {
if (path.length == 3) {
return visitor.visitNode(node);
}
- throw new MissingUnitException(path, 3);
+ Id.Partition partition;
+ try{
+ partition = new Id.Partition(node, Integer.valueOf(path[3]));
+ } catch (NumberFormatException e) {
+ throw new MissingUnitException(path, 3);
+ }
+ if (path.length == 4) {
+ return visitor.visitPartition(partition);
+ }
+ throw new MissingUnitException(path, 4);
}
}
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java
new file mode 100644
index 00000000000..bb42af45ef3
--- /dev/null
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java
@@ -0,0 +1,69 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.clustercontroller.core.restapiv2.requests;
+
+import com.yahoo.vdslib.state.DiskState;
+import com.yahoo.vdslib.state.NodeState;
+import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTask;
+import com.yahoo.vespa.clustercontroller.core.hostinfo.Metrics;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Id;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Request;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Response;
+import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.StateRestApiException;
+
+import java.util.Set;
+import java.util.logging.Logger;
+
+public class PartitionStateRequest extends Request<Response.PartitionResponse> {
+ private static final Logger log = Logger.getLogger(PartitionStateRequest.class.getName());
+ private final Id.Partition id;
+ private final Set<VerboseReport> verboseReports;
+
+ public PartitionStateRequest(Id.Partition id, Set<VerboseReport> verboseReports) {
+ super(MasterState.MUST_BE_MASTER);
+ this.id = id;
+ this.verboseReports = verboseReports;
+ }
+
+ @Override
+ public Response.PartitionResponse calculateResult(RemoteClusterControllerTask.Context context)
+ throws StateRestApiException {
+ Response.PartitionResponse result = new Response.PartitionResponse();
+ if (verboseReports.contains(VerboseReport.STATISTICS)) {
+ fillInMetrics(context.cluster.getNodeInfo(id.getNode()).getHostInfo().getMetrics(), result);
+ }
+ NodeState nodeState = context.currentConsolidatedState.getNodeState(id.getNode());
+ DiskState diskState = new DiskState();
+ result.addState("generated", new Response.UnitStateImpl(diskState));
+
+ return result;
+ }
+
+ private static void fillInMetrics(Metrics metrics, Response.PartitionResponse result) {
+ for (Metrics.Metric metric: metrics.getMetrics()) {
+ fillInMetricValue(metric.getName(), metric.getValue(), result);
+ }
+ }
+
+ private static void fillInMetricValue(
+ String name, Metrics.Value value, Response.PartitionResponse result) {
+ if (name.equals("vds.datastored.alldisks.docs")) {
+ if (value.getLast() == null) {
+ log.warning("Proper doc count value did not exist in value set.");
+ return;
+ }
+ result.addMetric("unique-document-count", value.getLast());
+ } else if (name.equals("vds.datastored.alldisks.bytes")) {
+ if (value.getLast() == null) {
+ log.warning("Proper doc size value did not exist in value set.");
+ return;
+ }
+ result.addMetric("unique-document-total-size", value.getLast());
+ } else if (name.equals("vds.datastored.alldisks.buckets")) {
+ if (value.getLast() == null) {
+ log.warning("Proper bucket count value did not exist in value set.");
+ return;
+ }
+ result.addMetric("bucket-count", value.getLast());
+ }
+ }
+}