diff options
33 files changed, 153 insertions, 526 deletions
diff --git a/documentapi/abi-spec.json b/documentapi/abi-spec.json index 663d04e3074..cbfe07eb93d 100644 --- a/documentapi/abi-spec.json +++ b/documentapi/abi-spec.json @@ -1421,8 +1421,7 @@ "public void <init>(java.lang.String)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, @@ -1472,8 +1471,6 @@ ], "methods": [ "public static java.util.Map parse(java.lang.String)", - "public void <init>(java.util.Map)", - "public void needAsynchronousInitialization()", "public abstract void init()", "public abstract void doSelect(com.yahoo.messagebus.routing.RoutingContext)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", @@ -1725,7 +1722,6 @@ "public byte[] encode(com.yahoo.component.Version, com.yahoo.messagebus.Routable)", "public com.yahoo.messagebus.Routable decode(com.yahoo.component.Version, byte[])", "public java.util.List getRoutableTypes(com.yahoo.component.Version)", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()", "public final com.yahoo.document.DocumentTypeManager getDocumentTypeManager()" ], "fields": [ @@ -1806,9 +1802,7 @@ "interface", "abstract" ], - "methods": [ - "public abstract com.yahoo.messagebus.metrics.MetricSet getMetrics()" - ], + "methods": [], "fields": [] }, "com.yahoo.documentapi.messagebus.protocol.DocumentReply": { @@ -1842,7 +1836,6 @@ "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()", "public bridge synthetic void configure(com.yahoo.config.ConfigInstance)" ], "fields": [] @@ -2010,8 +2003,7 @@ "public void <init>(java.lang.String)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, @@ -2029,8 +2021,7 @@ "public com.yahoo.jrt.slobrok.api.Mirror getMirror()", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, @@ -2177,17 +2168,6 @@ ], "fields": [] }, - "com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Metrics": { - "superClass": "com.yahoo.messagebus.metrics.MetricSet", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(java.lang.String)" - ], - "fields": [] - }, "com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Node": { "superClass": "java.lang.Object", "interfaces": [], @@ -2203,18 +2183,18 @@ ] }, "com.yahoo.documentapi.messagebus.protocol.LoadBalancer$NodeMetrics": { - "superClass": "com.yahoo.messagebus.metrics.MetricSet", + "superClass": "java.lang.Object", "interfaces": [], "attributes": [ "public" ], "methods": [ - "public void <init>(java.lang.String, com.yahoo.messagebus.metrics.MetricSet)" + "public void <init>()" ], "fields": [ - "public com.yahoo.messagebus.metrics.CountMetric sent", - "public com.yahoo.messagebus.metrics.CountMetric busy", - "public com.yahoo.messagebus.metrics.ValueMetric weight" + "public java.util.concurrent.atomic.AtomicLong sent", + "public java.util.concurrent.atomic.AtomicLong busy", + "public double weight" ] }, "com.yahoo.documentapi.messagebus.protocol.LoadBalancer": { @@ -2224,7 +2204,7 @@ "public" ], "methods": [ - "public void <init>(java.lang.String, java.lang.String, com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Metrics)", + "public void <init>(java.lang.String)", "public java.util.List getNodeWeights()", "public int getIndex(java.lang.String)", "public com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Node getRecipient(com.yahoo.jrt.slobrok.api.Mirror$Entry[])", @@ -2239,11 +2219,8 @@ "public" ], "methods": [ - "public void <init>(java.lang.String)", - "public void <init>(java.lang.String, java.util.Map)", "public void doSelect(com.yahoo.messagebus.routing.RoutingContext)", - "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void merge(com.yahoo.messagebus.routing.RoutingContext)" ], "fields": [] }, @@ -2256,11 +2233,9 @@ "public" ], "methods": [ - "public void <init>(java.lang.String)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, @@ -2290,11 +2265,9 @@ "public" ], "methods": [ - "public void <init>(java.lang.String)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()", "public void configure(com.yahoo.vespa.config.content.MessagetyperouteselectorpolicyConfig)", "public bridge synthetic void configure(com.yahoo.config.ConfigInstance)" ], @@ -2403,8 +2376,7 @@ "public void <init>()", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, @@ -3023,21 +2995,7 @@ "public" ], "methods": [ - "public void <init>()", - "public com.yahoo.document.BucketId handleBucketIdCalculation(com.yahoo.messagebus.routing.RoutingContext)" - ], - "fields": [] - }, - "com.yahoo.documentapi.messagebus.protocol.StoragePolicy$DistributorSelectionLogic$InstabilityChecker": { - "superClass": "java.lang.Object", - "interfaces": [], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>(int)", - "public boolean tooManyFailures(int)", - "public void addFailure(java.lang.Integer)" + "public void <init>()" ], "fields": [] }, @@ -3048,11 +3006,7 @@ "public" ], "methods": [ - "public void <init>(com.yahoo.documentapi.messagebus.protocol.StoragePolicy$Parameters, com.yahoo.documentapi.messagebus.protocol.ExternalSlobrokPolicy)", - "public void destroy()", - "public java.lang.String getTargetSpec(com.yahoo.messagebus.routing.RoutingContext, com.yahoo.document.BucketId)", - "public void handleWrongDistribution(com.yahoo.documentapi.messagebus.protocol.WrongDistributionReply, com.yahoo.messagebus.routing.RoutingContext)", - "public void handleErrorReply(com.yahoo.messagebus.Reply, java.lang.Object)" + "public void destroy()" ], "fields": [] }, @@ -3065,10 +3019,7 @@ ], "methods": [ "public void <init>()", - "public void setRequiredUpPercentageToSendToKnownGoodNodes(int)", - "public void updateValidTargets(com.yahoo.vdslib.state.ClusterState)", "public abstract java.lang.String getTargetSpec(java.lang.Integer, com.yahoo.messagebus.routing.RoutingContext)", - "public java.lang.String getRandomTargetSpec(com.yahoo.messagebus.routing.RoutingContext)", "public void close()" ], "fields": [ @@ -3087,15 +3038,12 @@ "public java.lang.String getClusterName()", "public com.yahoo.documentapi.messagebus.protocol.StoragePolicy$SlobrokHostPatternGenerator createPatternGenerator()", "public com.yahoo.documentapi.messagebus.protocol.StoragePolicy$HostFetcher createHostFetcher(com.yahoo.documentapi.messagebus.protocol.ExternalSlobrokPolicy)", - "public com.yahoo.vdslib.distribution.Distribution createDistribution(com.yahoo.documentapi.messagebus.protocol.ExternalSlobrokPolicy)", - "public int getAttemptRandomOnFailuresLimit()", - "public int maxOldClusterStatesSeenBeforeThrowingCachedState()", - "public int getRequiredUpPercentageToSendToKnownGoodNodes()" + "public com.yahoo.vdslib.distribution.Distribution createDistribution(com.yahoo.documentapi.messagebus.protocol.ExternalSlobrokPolicy)" ], "fields": [ - "protected java.lang.String clusterName", - "protected java.lang.String distributionConfigId", - "protected com.yahoo.documentapi.messagebus.protocol.StoragePolicy$SlobrokHostPatternGenerator slobrokHostPatternGenerator" + "protected final java.lang.String clusterName", + "protected final java.lang.String distributionConfigId", + "protected final com.yahoo.documentapi.messagebus.protocol.StoragePolicy$SlobrokHostPatternGenerator slobrokHostPatternGenerator" ] }, "com.yahoo.documentapi.messagebus.protocol.StoragePolicy$SlobrokHostFetcher": { @@ -3105,7 +3053,6 @@ "public" ], "methods": [ - "public void <init>(com.yahoo.documentapi.messagebus.protocol.StoragePolicy$SlobrokHostPatternGenerator, com.yahoo.documentapi.messagebus.protocol.ExternalSlobrokPolicy)", "public com.yahoo.jrt.slobrok.api.IMirror getMirror(com.yahoo.messagebus.routing.RoutingContext)", "public java.lang.String getTargetSpec(java.lang.Integer, com.yahoo.messagebus.routing.RoutingContext)" ], @@ -3118,7 +3065,6 @@ "public" ], "methods": [ - "public void <init>(java.lang.String)", "public java.lang.String getDistributorHostPattern(java.lang.Integer)" ], "fields": [] @@ -3136,12 +3082,10 @@ "public void init()", "public void doSelect(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [ - "public static final java.lang.String owningBucketStates", - "public static final java.lang.String upStates" + "public static final java.lang.String owningBucketStates" ] }, "com.yahoo.documentapi.messagebus.protocol.SubsetServicePolicy": { @@ -3153,11 +3097,9 @@ "public" ], "methods": [ - "public void <init>(java.lang.String)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", - "public void destroy()", - "public com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public void destroy()" ], "fields": [] }, diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ANDPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ANDPolicy.java index dbf68106e07..5e6aae46989 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ANDPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ANDPolicy.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi.messagebus.protocol; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Hop; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; @@ -60,8 +59,4 @@ public class ANDPolicy implements DocumentProtocolRoutingPolicy { public void destroy() { } - - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AsyncInitializationPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AsyncInitializationPolicy.java index cbcea4775b4..90fc6de57c7 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AsyncInitializationPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/AsyncInitializationPolicy.java @@ -2,13 +2,13 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.log.LogLevel; -import com.yahoo.messagebus.*; -import com.yahoo.messagebus.metrics.MetricSet; +import com.yahoo.messagebus.EmptyReply; +import com.yahoo.messagebus.ErrorCode; +import com.yahoo.messagebus.Reply; import com.yahoo.messagebus.routing.RoutingContext; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -26,17 +26,17 @@ public abstract class AsyncInitializationPolicy implements DocumentProtocolRouti NOT_STARTED, RUNNING, DONE - }; + } private static final Logger log = Logger.getLogger(AsyncInitializationPolicy.class.getName()); - InitState initState; - ScheduledThreadPoolExecutor executor; - Exception initException; - boolean syncInit = true; + private InitState initState; + private ScheduledThreadPoolExecutor executor; + private Exception initException; + private boolean syncInit = true; public static Map<String, String> parse(String param) { - Map<String, String> map = new TreeMap<String, String>(); + Map<String, String> map = new TreeMap<>(); if (param != null) { String[] p = param.split(";"); @@ -54,11 +54,11 @@ public abstract class AsyncInitializationPolicy implements DocumentProtocolRouti return map; } - public AsyncInitializationPolicy(Map<String, String> params) { + AsyncInitializationPolicy() { initState = InitState.NOT_STARTED; } - public void needAsynchronousInitialization() { + void needAsynchronousInitialization() { syncInit = false; } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java index e627316de30..16ab9a017d0 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java @@ -8,18 +8,15 @@ import com.yahoo.component.VersionSpecification; import com.yahoo.document.DocumentTypeManager; import com.yahoo.document.DocumentTypeManagerConfigurer; import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet; -import com.yahoo.documentapi.metrics.DocumentProtocolMetricSet; import com.yahoo.messagebus.ErrorCode; import com.yahoo.messagebus.Protocol; import com.yahoo.messagebus.Reply; import com.yahoo.messagebus.Routable; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.RoutingContext; import com.yahoo.messagebus.routing.RoutingNodeIterator; import com.yahoo.messagebus.routing.RoutingPolicy; import com.yahoo.text.Utf8String; -import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; @@ -35,8 +32,7 @@ import java.util.logging.Logger; public class DocumentProtocol implements Protocol { private static final Logger log = Logger.getLogger(DocumentProtocol.class.getName()); - private final DocumentProtocolMetricSet metrics = new DocumentProtocolMetricSet(); - private final RoutingPolicyRepository routingPolicyRepository = new RoutingPolicyRepository(metrics); + private final RoutingPolicyRepository routingPolicyRepository = new RoutingPolicyRepository(); private final RoutableRepository routableRepository; private final DocumentTypeManager docMan; @@ -233,7 +229,7 @@ public class DocumentProtocol implements Protocol { private final int val; - private Priority(int val) { + Priority(int val) { this.val = val; } @@ -563,9 +559,5 @@ public class DocumentProtocol implements Protocol { return routableRepository.getRoutableTypes(version); } - public MetricSet getMetrics() { - return metrics; - } - final public DocumentTypeManager getDocumentTypeManager() { return docMan; } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolRoutingPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolRoutingPolicy.java index 574370d14e8..77bc904ab12 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolRoutingPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolRoutingPolicy.java @@ -1,18 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi.messagebus.protocol; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.RoutingPolicy; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; /** * @author thomasg */ public interface DocumentProtocolRoutingPolicy extends RoutingPolicy { - - MetricSet getMetrics(); - } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java index c3204c7b5e2..bdb65b28de0 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java @@ -2,15 +2,11 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.config.subscription.ConfigSubscriber; -import com.yahoo.document.Document; import com.yahoo.document.DocumentGet; -import com.yahoo.document.DocumentPut; -import com.yahoo.document.DocumentType; import com.yahoo.document.select.DocumentSelector; import com.yahoo.document.select.Result; import com.yahoo.log.LogLevel; import com.yahoo.messagebus.Message; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; @@ -181,8 +177,4 @@ public class DocumentRouteSelectorPolicy } } - @Override - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ErrorPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ErrorPolicy.java index b0b662d1e70..f70128618c5 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ErrorPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ErrorPolicy.java @@ -2,7 +2,6 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.messagebus.EmptyReply; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.RoutingContext; /** @@ -36,9 +35,4 @@ public class ErrorPolicy implements DocumentProtocolRoutingPolicy { public void destroy() { } - - - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java index 051ec44dd07..312fd6e5964 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java @@ -6,7 +6,6 @@ import com.yahoo.jrt.Transport; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.jrt.slobrok.api.SlobrokList; import com.yahoo.messagebus.ErrorCode; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Hop; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; @@ -141,9 +140,4 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy { mirror.shutdown(); orb.transport().shutdown().join(); } - - @Override - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternalSlobrokPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternalSlobrokPolicy.java index 995c8579e00..3ebe5b7281e 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternalSlobrokPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternalSlobrokPolicy.java @@ -29,7 +29,7 @@ public abstract class ExternalSlobrokPolicy extends AsyncInitializationPolicy im public ExternalSlobrokPolicy(Map<String, String> param) { - super(param); + super(); String conf = param.get("config"); if (conf != null) { diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancer.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancer.java index 6a27546ce58..167a480e1aa 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancer.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancer.java @@ -2,12 +2,10 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.jrt.slobrok.api.Mirror; -import com.yahoo.messagebus.metrics.CountMetric; -import com.yahoo.messagebus.metrics.MetricSet; -import com.yahoo.messagebus.metrics.ValueMetric; -import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicLong; /** * Load balances over a set of nodes based on statistics gathered from those nodes. @@ -16,24 +14,10 @@ import java.util.List; */ public class LoadBalancer { - public static class NodeMetrics extends MetricSet { - public CountMetric sent = new CountMetric("sent", this); - public CountMetric busy = new CountMetric("busy", this); - public ValueMetric<Double> weight = new ValueMetric<Double>("weight", 1.0, this); - - public NodeMetrics(String name, MetricSet owner) { - super(name); - owner.addMetric(this); - } - } - - public static class Metrics extends MetricSet { - MetricSet targets = new MetricSet("nodes"); - - public Metrics(String name) { - super(name); - addMetric(targets); - } + public static class NodeMetrics { + public AtomicLong sent = new AtomicLong(); + public AtomicLong busy = new AtomicLong(); + public double weight = 1.0; } public static class Node { @@ -44,14 +28,12 @@ public class LoadBalancer { } /** Statistics on each node we are load balancing over. Populated lazily. */ - private List<NodeMetrics> nodeWeights = new ArrayList<NodeMetrics>(); + private List<NodeMetrics> nodeWeights = new CopyOnWriteArrayList<>(); - private Metrics metrics; private String cluster; private double position = 0.0; - public LoadBalancer(String cluster, String session, Metrics metrics) { - this.metrics = metrics; + public LoadBalancer(String cluster) { this.cluster = cluster; } @@ -88,7 +70,7 @@ public class LoadBalancer { for (Mirror.Entry entry : choices) { NodeMetrics nodeMetrics = getNodeMetrics(entry); - weightSum += nodeMetrics.weight.get(); + weightSum += nodeMetrics.weight; if (weightSum > position) { selectedNode = new Node(entry, nodeMetrics); @@ -100,7 +82,7 @@ public class LoadBalancer { selectedNode = new Node(choices[0], getNodeMetrics(choices[0])); } position += 1.0; - selectedNode.metrics.sent.inc(1); + selectedNode.metrics.sent.incrementAndGet(); return selectedNode; } @@ -116,7 +98,7 @@ public class LoadBalancer { NodeMetrics nodeMetrics = nodeWeights.get(index); if (nodeMetrics == null) { // initialize statistics for this node - nodeMetrics = new NodeMetrics("node_" + index, metrics.targets); + nodeMetrics = new NodeMetrics(); nodeWeights.set(index, nodeMetrics); } return nodeMetrics; @@ -126,25 +108,25 @@ public class LoadBalancer { private void increaseWeights() { for (NodeMetrics n : nodeWeights) { if (n == null) continue; - double want = n.weight.get() * 1.01010101010101010101; + double want = n.weight * 1.01010101010101010101; if (want >= 1.0) { - n.weight.set(want); + n.weight = want; } else { - n.weight.set(1.0); + n.weight = 1.0; } } } public void received(Node node, boolean busy) { if (busy) { - double wantWeight = node.metrics.weight.get() - 0.01; + double wantWeight = node.metrics.weight - 0.01; if (wantWeight < 1.0) { increaseWeights(); - node.metrics.weight.set(1.0); + node.metrics.weight = 1.0; } else { - node.metrics.weight.set(wantWeight); + node.metrics.weight = wantWeight; } - node.metrics.busy.inc(1); + node.metrics.busy.incrementAndGet(); } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerPolicy.java index 0be132c440c..7c5345351a8 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LoadBalancerPolicy.java @@ -1,25 +1,15 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi.messagebus.protocol; -import com.yahoo.config.subscription.ConfigSourceSet; -import com.yahoo.config.subscription.ConfigSubscriber; -import com.yahoo.jrt.Supervisor; -import com.yahoo.jrt.Transport; -import com.yahoo.jrt.slobrok.api.IMirror; -import com.yahoo.jrt.slobrok.api.SlobrokList; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.messagebus.ErrorCode; import com.yahoo.messagebus.Reply; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Hop; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; import com.yahoo.messagebus.routing.RoutingNodeIterator; -import com.yahoo.cloud.config.SlobroksConfig; import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; -import java.util.logging.Logger; /** * Routing policy to load balance between nodes in a randomly distributed cluster, such as a docproc cluster. @@ -33,37 +23,35 @@ import java.util.logging.Logger; * @author <a href="mailto:humbe@yahoo-inc.com">Haakon Humberset</a> */ public class LoadBalancerPolicy extends ExternalSlobrokPolicy { - String cluster = null; - String session = null; - private String pattern = null; + private final String session; + private final String pattern; - LoadBalancer.Metrics metrics; - LoadBalancer loadBalancer; + private LoadBalancer loadBalancer; - public LoadBalancerPolicy(String param) { - this(param, parse(param)); + LoadBalancerPolicy(String param) { + this(parse(param)); } - public LoadBalancerPolicy(String param, Map<String, String> params) { + private LoadBalancerPolicy(Map<String, String> params) { super(params); - cluster = params.get("cluster"); + String cluster = params.get("cluster"); session = params.get("session"); if (cluster == null) { error = "Required parameter pattern not set"; + pattern = null; return; } if (session == null) { error = "Required parameter session not set"; + pattern = null; return; } - metrics = new LoadBalancer.Metrics(param); - metrics.setXmlTagName("loadbalancer"); pattern = cluster + "/*/" + session; - loadBalancer = new LoadBalancer(cluster, session, metrics); + loadBalancer = new LoadBalancer(cluster); } @Override @@ -86,7 +74,7 @@ public class LoadBalancerPolicy extends ExternalSlobrokPolicy { @return Returns a hop representing the TCP address of the target, or null if none could be found. */ - LoadBalancer.Node getRecipient(RoutingContext context) { + private LoadBalancer.Node getRecipient(RoutingContext context) { Mirror.Entry [] lastLookup = lookup(context, pattern); return loadBalancer.getRecipient(lastLookup); } @@ -106,8 +94,4 @@ public class LoadBalancerPolicy extends ExternalSlobrokPolicy { context.setReply(reply); } - - public MetricSet getMetrics() { - return metrics; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LocalServicePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LocalServicePolicy.java index e27479a4995..eb56a85e378 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LocalServicePolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/LocalServicePolicy.java @@ -2,8 +2,10 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.jrt.slobrok.api.Mirror; -import com.yahoo.messagebus.metrics.MetricSet; -import com.yahoo.messagebus.routing.*; +import com.yahoo.messagebus.routing.Hop; +import com.yahoo.messagebus.routing.Route; +import com.yahoo.messagebus.routing.RoutingContext; +import com.yahoo.messagebus.routing.VerbatimDirective; import java.util.ArrayList; import java.util.HashMap; @@ -18,7 +20,7 @@ import java.util.Map; public class LocalServicePolicy implements DocumentProtocolRoutingPolicy { private final String localAddress; - private Map<String, CacheEntry> cache = new HashMap<String, CacheEntry>(); + private Map<String, CacheEntry> cache = new HashMap<>(); /** * Constructs a policy that will choose local services that match the slobrok pattern in which this policy occured. @@ -26,7 +28,7 @@ public class LocalServicePolicy implements DocumentProtocolRoutingPolicy { * * @param param The address to use for this, if empty this will resolve to hostname. */ - public LocalServicePolicy(String param) { + LocalServicePolicy(String param) { localAddress = (param != null && param.length() > 0) ? param : null; } @@ -107,7 +109,7 @@ public class LocalServicePolicy implements DocumentProtocolRoutingPolicy { * Defines the necessary cache data. */ private class CacheEntry { - private final List<Hop> recipients = new ArrayList<Hop>(); + private final List<Hop> recipients = new ArrayList<>(); private int generation = 0; private int offset = 0; } @@ -131,8 +133,4 @@ public class LocalServicePolicy implements DocumentProtocolRoutingPolicy { public void destroy() { } - - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java index a5b3accac68..4226c1e6cac 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java @@ -2,7 +2,6 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.config.subscription.ConfigSubscriber; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; import com.yahoo.vespa.config.content.MessagetyperouteselectorpolicyConfig; @@ -15,11 +14,11 @@ import java.util.concurrent.atomic.AtomicReference; */ public class MessageTypePolicy implements DocumentProtocolRoutingPolicy, ConfigSubscriber.SingleSubscriber<MessagetyperouteselectorpolicyConfig> { - private final AtomicReference<Map<Integer, Route>> configRef = new AtomicReference<Map<Integer, Route>>(); + private final AtomicReference<Map<Integer, Route>> configRef = new AtomicReference<>(); private ConfigSubscriber subscriber; private volatile Route defaultRoute; - public MessageTypePolicy(String configId) { + MessageTypePolicy(String configId) { subscriber = new ConfigSubscriber(); subscriber.subscribe(this, MessagetyperouteselectorpolicyConfig.class, configId); } @@ -45,11 +44,6 @@ public class MessageTypePolicy implements DocumentProtocolRoutingPolicy, ConfigS } @Override - public MetricSet getMetrics() { - return null; - } - - @Override public void configure(MessagetyperouteselectorpolicyConfig cfg) { Map<Integer, Route> h = new HashMap<>(); for (MessagetyperouteselectorpolicyConfig.Route selector : cfg.route()) { diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoundRobinPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoundRobinPolicy.java index 32becdb43fe..244d101b36f 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoundRobinPolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoundRobinPolicy.java @@ -6,7 +6,6 @@ import com.yahoo.messagebus.EmptyReply; import com.yahoo.messagebus.Error; import com.yahoo.messagebus.ErrorCode; import com.yahoo.messagebus.Reply; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.Hop; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; @@ -118,8 +117,4 @@ public class RoundRobinPolicy implements DocumentProtocolRoutingPolicy { public void destroy() { } - - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepository.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepository.java index 05bbb919805..098e0efc41c 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepository.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepository.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi.messagebus.protocol; -import com.yahoo.documentapi.metrics.DocumentProtocolMetricSet; import com.yahoo.messagebus.routing.RoutingPolicy; import com.yahoo.log.LogLevel; @@ -16,10 +15,8 @@ class RoutingPolicyRepository { private static final Logger log = Logger.getLogger(RoutingPolicyRepository.class.getName()); private final Map<String, RoutingPolicyFactory> factories = new ConcurrentHashMap<String, RoutingPolicyFactory>(); - private final DocumentProtocolMetricSet metrics; - RoutingPolicyRepository(DocumentProtocolMetricSet metrics) { - this.metrics = metrics; + RoutingPolicyRepository() { } /** @@ -38,7 +35,7 @@ class RoutingPolicyRepository { * @param name The name of the factory to return. * @return The routing policy factory matching the criteria, or null. */ - RoutingPolicyFactory getFactory(String name) { + private RoutingPolicyFactory getFactory(String name) { return factories.get(name); } @@ -55,7 +52,7 @@ class RoutingPolicyRepository { log.log(LogLevel.ERROR, "No routing policy factory found for name '" + name + "'."); return null; } - final DocumentProtocolRoutingPolicy ret = factory.createPolicy(param); + DocumentProtocolRoutingPolicy ret = factory.createPolicy(param); if (ret == null) { log.log(LogLevel.ERROR, "Routing policy factory " + factory.getClass().getName() + " failed to create a " + @@ -63,10 +60,6 @@ class RoutingPolicyRepository { return null; } - if (ret.getMetrics() != null) { - metrics.routingPolicyMetrics.addMetric(ret.getMetrics()); - } - return ret; } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java index 22f7a491056..341589643d2 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java @@ -8,10 +8,16 @@ import com.yahoo.document.BucketIdFactory; import com.yahoo.jrt.slobrok.api.IMirror; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.log.LogLevel; -import com.yahoo.messagebus.*; +import com.yahoo.messagebus.EmptyReply; import com.yahoo.messagebus.Error; -import com.yahoo.messagebus.metrics.MetricSet; -import com.yahoo.messagebus.routing.*; +import com.yahoo.messagebus.ErrorCode; +import com.yahoo.messagebus.Message; +import com.yahoo.messagebus.Reply; +import com.yahoo.messagebus.routing.Hop; +import com.yahoo.messagebus.routing.Route; +import com.yahoo.messagebus.routing.RoutingContext; +import com.yahoo.messagebus.routing.RoutingNodeIterator; +import com.yahoo.messagebus.routing.VerbatimDirective; import com.yahoo.vdslib.distribution.Distribution; import com.yahoo.vdslib.state.ClusterState; import com.yahoo.vdslib.state.Node; @@ -40,12 +46,12 @@ public class StoragePolicy extends ExternalSlobrokPolicy { private static final Logger log = Logger.getLogger(StoragePolicy.class.getName()); public static final String owningBucketStates = "uim"; - public static final String upStates = "ui"; + private static final String upStates = "ui"; /** This class merely generates slobrok a host pattern for a given distributor. */ public static class SlobrokHostPatternGenerator { private final String clusterName; - public SlobrokHostPatternGenerator(String clusterName) { this.clusterName = clusterName; } + SlobrokHostPatternGenerator(String clusterName) { this.clusterName = clusterName; } /** * Find host pattern of the hosts that are valid targets for this request. @@ -63,9 +69,9 @@ public class StoragePolicy extends ExternalSlobrokPolicy { private int totalTargets = 1; protected final Random randomizer = new Random(12345); // Use same randomizer each time to make unit testing easy. - public void setRequiredUpPercentageToSendToKnownGoodNodes(int percent) { this.requiredUpPercentageToSendToKnownGoodNodes = percent; } + void setRequiredUpPercentageToSendToKnownGoodNodes(int percent) { this.requiredUpPercentageToSendToKnownGoodNodes = percent; } - public void updateValidTargets(ClusterState state) { + void updateValidTargets(ClusterState state) { List<Integer> validRandomTargets = new ArrayList<>(); for (int i=0; i<state.getNodeCount(NodeType.DISTRIBUTOR); ++i) { if (state.getNodeState(new Node(NodeType.DISTRIBUTOR, i)).getState().oneOf(upStates)) validRandomTargets.add(i); @@ -74,7 +80,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { this.totalTargets = state.getNodeCount(NodeType.DISTRIBUTOR); } public abstract String getTargetSpec(Integer distributor, RoutingContext context); - public String getRandomTargetSpec(RoutingContext context) { + String getRandomTargetSpec(RoutingContext context) { // Try to use list of random targets, if at least X % of the nodes are up while (100 * validRandomTargets.size() / totalTargets >= requiredUpPercentageToSendToKnownGoodNodes) { int randIndex = randomizer.nextInt(validRandomTargets.size()); @@ -96,7 +102,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { private final SlobrokHostPatternGenerator patternGenerator; ExternalSlobrokPolicy policy; - public SlobrokHostFetcher(SlobrokHostPatternGenerator patternGenerator, ExternalSlobrokPolicy policy) { + SlobrokHostFetcher(SlobrokHostPatternGenerator patternGenerator, ExternalSlobrokPolicy policy) { this.patternGenerator = patternGenerator; this.policy = policy; } @@ -189,9 +195,9 @@ public class StoragePolicy extends ExternalSlobrokPolicy { /** Class parsing the semicolon separated parameter string and exposes the appropriate value to the policy. */ public static class Parameters { - protected String clusterName = null; - protected String distributionConfigId = null; - protected SlobrokHostPatternGenerator slobrokHostPatternGenerator = null; + protected final String clusterName; + protected final String distributionConfigId; + protected final SlobrokHostPatternGenerator slobrokHostPatternGenerator; public Parameters(Map<String, String> params) { clusterName = params.get("cluster"); @@ -222,26 +228,25 @@ public class StoragePolicy extends ExternalSlobrokPolicy { * When we have gotten this amount of failures from a node (Any kind of failures). We try to send to a random other node, just to see if the * failure was related to node being bad. (Hard to detect from failure) */ - public int getAttemptRandomOnFailuresLimit() { return 5; } + int getAttemptRandomOnFailuresLimit() { return 5; } /** * If we receive more than this number of wrong distribution replies with old cluster states, we throw the current cached state and takes the * old one. This guards us against version resets. */ - public int maxOldClusterStatesSeenBeforeThrowingCachedState() { return 20; } + int maxOldClusterStatesSeenBeforeThrowingCachedState() { return 20; } /** * When getting new cluster states we update good nodes. If we have more than this percentage of up nodes, we send to up nodes instead of totally random. * (To avoid hitting trashing bad nodes still in slobrok) */ - public int getRequiredUpPercentageToSendToKnownGoodNodes() { return 60; } + int getRequiredUpPercentageToSendToKnownGoodNodes() { return 60; } } /** Helper class to get the bucket identifier of a message. */ public static class BucketIdCalculator { private static final BucketIdFactory factory = new BucketIdFactory(); - @SuppressWarnings("deprecation") private BucketId getBucketId(Message msg) { switch (msg.getType()) { case DocumentProtocol.MESSAGE_PUTDOCUMENT: return factory.getBucketId(((PutDocumentMessage)msg).getDocumentPut().getDocument().getId()); @@ -258,7 +263,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { } } - public BucketId handleBucketIdCalculation(RoutingContext context) { + BucketId handleBucketIdCalculation(RoutingContext context) { BucketId id = getBucketId(context.getMessage()); if (id == null || id.getRawId() == 0) { Reply reply = new EmptyReply(); @@ -272,13 +277,13 @@ public class StoragePolicy extends ExternalSlobrokPolicy { /** Class handling the logic of picking a distributor */ public static class DistributorSelectionLogic { /** Class that tracks a failure of a given type per node. */ - public static class InstabilityChecker { + static class InstabilityChecker { private List<Integer> nodeFailures = new ArrayList<>(); private int failureLimit; - public InstabilityChecker(int failureLimit) { this.failureLimit = failureLimit; } + InstabilityChecker(int failureLimit) { this.failureLimit = failureLimit; } - public boolean tooManyFailures(int nodeIndex) { + boolean tooManyFailures(int nodeIndex) { if (nodeFailures.size() > nodeIndex && nodeFailures.get(nodeIndex) > failureLimit) { nodeFailures.set(nodeIndex, 0); return true; @@ -287,7 +292,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { } } - public void addFailure(Integer calculatedDistributor) { + void addFailure(Integer calculatedDistributor) { while (nodeFailures.size() <= calculatedDistributor) nodeFailures.add(0); nodeFailures.set(calculatedDistributor, nodeFailures.get(calculatedDistributor) + 1); } @@ -297,7 +302,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { Integer calculatedDistributor; ClusterState usedState; - public MessageContext(ClusterState usedState) { this.usedState = usedState; } + MessageContext(ClusterState usedState) { this.usedState = usedState; } public String toString() { return "Context(Distributor " + calculatedDistributor + @@ -312,7 +317,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { private int oldClusterVersionGottenCount = 0; private final int maxOldClusterVersionBeforeSendingRandom; // Reset cluster version protection - public DistributorSelectionLogic(Parameters params, ExternalSlobrokPolicy policy) { + DistributorSelectionLogic(Parameters params, ExternalSlobrokPolicy policy) { this.hostFetcher = params.createHostFetcher(policy); this.hostFetcher.setRequiredUpPercentageToSendToKnownGoodNodes(params.getRequiredUpPercentageToSendToKnownGoodNodes()); this.distribution = params.createDistribution(policy); @@ -325,7 +330,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { distribution.close(); } - public String getTargetSpec(RoutingContext context, BucketId bucketId) { + String getTargetSpec(RoutingContext context, BucketId bucketId) { String sendRandomReason = null; MessageContext messageContext = new MessageContext(cachedClusterState); context.setContext(messageContext); @@ -382,7 +387,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { } } - public void handleWrongDistribution(WrongDistributionReply reply, RoutingContext routingContext) { + void handleWrongDistribution(WrongDistributionReply reply, RoutingContext routingContext) { final MessageContext context = (MessageContext) routingContext.getContext(); final Optional<ClusterState> replyState = clusterStateFromReply(reply); if (!replyState.isPresent()) { @@ -479,7 +484,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { } } - public void handleErrorReply(Reply reply, Object untypedContext) { + void handleErrorReply(Reply reply, Object untypedContext) { MessageContext messageContext = (MessageContext) untypedContext; if (messageContext.calculatedDistributor != null) { persistentFailureChecker.addFailure(messageContext.calculatedDistributor); @@ -562,9 +567,4 @@ public class StoragePolicy extends ExternalSlobrokPolicy { public void destroy() { distributorSelectionLogic.destroy(); } - - @Override - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SubsetServicePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SubsetServicePolicy.java index d6499c196f4..31802f2872f 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SubsetServicePolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SubsetServicePolicy.java @@ -3,8 +3,10 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.log.LogLevel; -import com.yahoo.messagebus.metrics.MetricSet; -import com.yahoo.messagebus.routing.*; +import com.yahoo.messagebus.routing.Hop; +import com.yahoo.messagebus.routing.Route; +import com.yahoo.messagebus.routing.RoutingContext; +import com.yahoo.messagebus.routing.VerbatimDirective; import java.util.ArrayList; import java.util.HashMap; @@ -21,7 +23,7 @@ public class SubsetServicePolicy implements DocumentProtocolRoutingPolicy { private static Logger log = Logger.getLogger(SubsetServicePolicy.class.getName()); private final int subsetSize; - private final Map<String, CacheEntry> cache = new HashMap<String, CacheEntry>(); + private final Map<String, CacheEntry> cache = new HashMap<>(); /** * Creates an instance of a subset service policy. The parameter string is parsed as an integer number that is the @@ -29,7 +31,7 @@ public class SubsetServicePolicy implements DocumentProtocolRoutingPolicy { * * @param param The number of services to include in the set. */ - public SubsetServicePolicy(String param) { + SubsetServicePolicy(String param) { int subsetSize = 5; if (param != null && param.length() > 0) { try { @@ -131,15 +133,11 @@ public class SubsetServicePolicy implements DocumentProtocolRoutingPolicy { * Defines the necessary cache data. */ private class CacheEntry { - private final List<Hop> recipients = new ArrayList<Hop>(); + private final List<Hop> recipients = new ArrayList<>(); private int generation = 0; private int offset = 0; } public void destroy() { } - - public MetricSet getMetrics() { - return null; - } } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/metrics/DocumentProtocolMetricSet.java b/documentapi/src/main/java/com/yahoo/documentapi/metrics/DocumentProtocolMetricSet.java deleted file mode 100644 index f0f5a8d008b..00000000000 --- a/documentapi/src/main/java/com/yahoo/documentapi/metrics/DocumentProtocolMetricSet.java +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.documentapi.metrics; - -import com.yahoo.messagebus.metrics.MetricSet; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author thomasg - */ -public class DocumentProtocolMetricSet extends MetricSet { - public MetricSet routingPolicyMetrics = new MetricSet("routingpolicies"); - - public DocumentProtocolMetricSet() { - super("document"); - addMetric(routingPolicyMetrics); - } - -} diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepositoryTest.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepositoryTest.java index 060f8010948..c86a591de60 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepositoryTest.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyRepositoryTest.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi.messagebus.protocol; -import com.yahoo.documentapi.metrics.DocumentProtocolMetricSet; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -17,8 +16,7 @@ public class RoutingPolicyRepositoryTest { @Test public void policy_creation_does_not_swallow_exception() { - final DocumentProtocolMetricSet metrics = new DocumentProtocolMetricSet(); - final RoutingPolicyRepository repo = new RoutingPolicyRepository(metrics); + final RoutingPolicyRepository repo = new RoutingPolicyRepository(); final RoutingPolicyFactory factory = mock(RoutingPolicyFactory.class); when(factory.createPolicy(anyString())).thenThrow(new IllegalArgumentException("oh no!")); diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/LoadBalancerTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/LoadBalancerTestCase.java index 284e338394f..698b778c312 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/LoadBalancerTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/LoadBalancerTestCase.java @@ -3,12 +3,9 @@ package com.yahoo.documentapi.messagebus.protocol.test; import com.yahoo.documentapi.messagebus.protocol.LoadBalancer; import com.yahoo.jrt.slobrok.api.Mirror; -import com.yahoo.text.XMLWriter; import org.junit.Test; -import java.io.PrintWriter; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -33,8 +30,7 @@ public class LoadBalancerTestCase { } private static void assertIllegalArgument(String clusterName, String recipient, String expectedMessage) { - LoadBalancer.Metrics metric = new LoadBalancer.Metrics(""); - LoadBalancer policy = new LoadBalancer(clusterName, "", metric); + LoadBalancer policy = new LoadBalancer(clusterName); try { fail("Expected exception, got index " + policy.getIndex(recipient) + "."); } catch (IllegalArgumentException e) { @@ -44,8 +40,7 @@ public class LoadBalancerTestCase { @Test public void testLoadBalancer() { - LoadBalancer.Metrics m = new LoadBalancer.Metrics(""); - LoadBalancer lb = new LoadBalancer("foo", "", m); + LoadBalancer lb = new LoadBalancer("foo"); Mirror.Entry[] entries = new Mirror.Entry[]{ new Mirror.Entry("foo/0/default", "tcp/bar:1"), new Mirror.Entry("foo/1/default", "tcp/bar:2"), @@ -58,13 +53,13 @@ public class LoadBalancerTestCase { assertEquals("foo/" + (i % 3) + "/default" , node.entry.getName()); } - assertEquals(33, weights.get(0).sent.get().intValue()); - assertEquals(33, weights.get(1).sent.get().intValue()); - assertEquals(33, weights.get(2).sent.get().intValue()); + assertEquals(33, weights.get(0).sent.intValue()); + assertEquals(33, weights.get(1).sent.intValue()); + assertEquals(33, weights.get(2).sent.intValue()); - weights.get(0).sent.set(new AtomicLong(0)); - weights.get(1).sent.set(new AtomicLong(0)); - weights.get(2).sent.set(new AtomicLong(0)); + weights.get(0).sent.set(0); + weights.get(1).sent.set(0); + weights.get(2).sent.set(0); } { @@ -83,13 +78,9 @@ public class LoadBalancerTestCase { lb.received(new LoadBalancer.Node(new Mirror.Entry("foo/1/default", "tcp/bar:2"), weights.get(1)), false); } - PrintWriter writer = new PrintWriter(System.out); - m.toXML(new XMLWriter(writer)); - writer.flush(); - - assertEquals(421, (int)(100 * weights.get(0).weight.get() / weights.get(1).weight.get())); - assertEquals(100, (int)(100 * weights.get(1).weight.get())); - assertEquals(421, (int)(100 * weights.get(2).weight.get() / weights.get(1).weight.get())); + assertEquals(421, (int)(100 * weights.get(0).weight / weights.get(1).weight)); + assertEquals(100, (int)(100 * weights.get(1).weight)); + assertEquals(421, (int)(100 * weights.get(2).weight / weights.get(1).weight)); } @@ -107,8 +98,7 @@ public class LoadBalancerTestCase { @Test public void testLoadBalancerOneItemOnly() { - LoadBalancer.Metrics m = new LoadBalancer.Metrics(""); - LoadBalancer lb = new LoadBalancer("foo", "", m); + LoadBalancer lb = new LoadBalancer("foo"); Mirror.Entry[] entries = new Mirror.Entry[]{ new Mirror.Entry("foo/0/default", "tcp/bar:1") }; List<LoadBalancer.NodeMetrics> weights = lb.getNodeWeights(); @@ -120,5 +110,4 @@ public class LoadBalancerTestCase { assertEquals("foo/0/default" , lb.getRecipient(entries).entry.getName()); } - } diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyFactoryTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyFactoryTestCase.java index 8f2fee880e6..1f8a783d417 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyFactoryTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyFactoryTestCase.java @@ -9,8 +9,13 @@ import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage; import com.yahoo.documentapi.messagebus.protocol.RoutingPolicyFactory; import com.yahoo.jrt.ListenFailedException; import com.yahoo.jrt.slobrok.server.Slobrok; -import com.yahoo.messagebus.*; -import com.yahoo.messagebus.metrics.MetricSet; +import com.yahoo.messagebus.ErrorCode; +import com.yahoo.messagebus.Message; +import com.yahoo.messagebus.MessageBusParams; +import com.yahoo.messagebus.Protocol; +import com.yahoo.messagebus.Reply; +import com.yahoo.messagebus.SourceSession; +import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.network.rpc.RPCNetworkParams; import com.yahoo.messagebus.network.rpc.test.TestServer; import com.yahoo.messagebus.routing.Route; @@ -104,10 +109,6 @@ public class PolicyFactoryTestCase { public void destroy() { } - - public MetricSet getMetrics() { - return null; - } } } diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java index 10183471ffd..f0e31295d3f 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java @@ -8,7 +8,11 @@ import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.documentapi.messagebus.protocol.StoragePolicy; import com.yahoo.messagebus.routing.RoutingNode; import com.yahoo.vdslib.distribution.RandomGen; -import com.yahoo.vdslib.state.*; +import com.yahoo.vdslib.state.ClusterState; +import com.yahoo.vdslib.state.Node; +import com.yahoo.vdslib.state.NodeState; +import com.yahoo.vdslib.state.NodeType; +import com.yahoo.vdslib.state.State; import java.util.Map; import java.util.TreeMap; diff --git a/messagebus/abi-spec.json b/messagebus/abi-spec.json index 54c5c782cb5..baf2046e322 100644 --- a/messagebus/abi-spec.json +++ b/messagebus/abi-spec.json @@ -611,8 +611,7 @@ "public abstract java.lang.String getName()", "public abstract byte[] encode(com.yahoo.component.Version, com.yahoo.messagebus.Routable)", "public abstract com.yahoo.messagebus.Routable decode(com.yahoo.component.Version, byte[])", - "public abstract com.yahoo.messagebus.routing.RoutingPolicy createPolicy(java.lang.String, java.lang.String)", - "public abstract com.yahoo.messagebus.metrics.MetricSet getMetrics()" + "public abstract com.yahoo.messagebus.routing.RoutingPolicy createPolicy(java.lang.String, java.lang.String)" ], "fields": [] }, diff --git a/messagebus/src/main/java/com/yahoo/messagebus/Protocol.java b/messagebus/src/main/java/com/yahoo/messagebus/Protocol.java index 11b135cac62..3801308d38f 100644 --- a/messagebus/src/main/java/com/yahoo/messagebus/Protocol.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/Protocol.java @@ -2,7 +2,6 @@ package com.yahoo.messagebus; import com.yahoo.component.Version; -import com.yahoo.messagebus.metrics.MetricSet; import com.yahoo.messagebus.routing.RoutingPolicy; /** @@ -46,9 +45,4 @@ public interface Protocol { * @return The created policy. */ public RoutingPolicy createPolicy(String name, String param); - - /** - * Returns the metrics associated with this protocol. - */ - MetricSet getMetrics(); } diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/CountMetric.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/CountMetric.java deleted file mode 100644 index e403a528c98..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/CountMetric.java +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.messagebus.metrics; - -import java.util.concurrent.atomic.AtomicLong; - -/** - * @author thomasg - */ -public class CountMetric extends NumberMetric<AtomicLong> { - public CountMetric(String name, MetricSet owner) { - super(name, new AtomicLong(0), owner); - } - - public void inc(long increment) { - get().addAndGet(increment); - } - -} diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/Metric.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/Metric.java deleted file mode 100644 index 004f48e43f0..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/Metric.java +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.messagebus.metrics; - -import com.yahoo.text.XMLWriter; -import com.yahoo.text.Utf8String; - -import java.io.Writer; - -/** - * @author thomasg - */ -public abstract class Metric { - String name; - String xmlTagName = null; - - public Metric(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public String toHTML() { - return toString(); - } - - public String getXmlTagName() { - return xmlTagName; - } - - public void setXmlTagName(String newName) { - xmlTagName = newName; - } - - static private final Utf8String attrName = new Utf8String("name"); - - public void renderXmlName(XMLWriter writer) { - if (xmlTagName != null) { - writer.openTag(xmlTagName); - writer.attribute(attrName, name); - } else { - writer.openTag(name); - } - } - - public abstract void toXML(XMLWriter writer); -} diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/MetricSet.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/MetricSet.java deleted file mode 100644 index 44264246b3a..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/MetricSet.java +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.messagebus.metrics; - -import com.yahoo.text.XMLWriter; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * @author thomasg - */ -public class MetricSet extends Metric { - private List<Metric> metrics = new ArrayList<Metric>(); - - public MetricSet(String name) { - super(name); - } - - public void addMetric(Metric m) { - metrics.add(m); - } - - public List<Metric> getMetrics() { - return Collections.unmodifiableList(metrics); - } - - public String toHTML() { - StringBuilder builder = new StringBuilder(); - builder.append("<ul>\n"); - for (Metric m : metrics) { - builder.append("<li>\n").append(m.toHTML()).append("\n</li>"); - } - builder.append("\n</ul>\n"); - return builder.toString(); - } - - public void toXML(XMLWriter xmlWriter) { - renderXmlName(xmlWriter); - - for (Metric m : metrics) { - m.toXML(xmlWriter); - } - - xmlWriter.closeTag(); - } -} diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/NumberMetric.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/NumberMetric.java deleted file mode 100644 index 5caf300cbb0..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/NumberMetric.java +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.messagebus.metrics; - -import com.yahoo.text.XMLWriter; -import com.yahoo.text.Utf8String; - -/** - * @author thomasg - */ -public abstract class NumberMetric<V extends Number> extends Metric { - private V value; - - public NumberMetric(String name, V v, MetricSet owner) { - super(name); - value = v; - owner.addMetric(this); - } - - public V get() { - return value; - } - - public void set(V value) { - this.value = value; - } - - public String toString() { - return value.toString(); - } - - static private final Utf8String attrValue = new Utf8String("value"); - - public void toXML(XMLWriter writer) { - renderXmlName(writer); - writer.attribute(attrValue, value); - writer.closeTag(); - } - - -} diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/ValueMetric.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/ValueMetric.java deleted file mode 100644 index 8905a3eadd3..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/ValueMetric.java +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.messagebus.metrics; - -import java.io.Writer; - -/** - * @author thomasg - */ -public class ValueMetric<V extends Number> extends NumberMetric<V> { - - public ValueMetric(String name, V v, MetricSet owner) { - super(name, v, owner); - } -} diff --git a/messagebus/src/main/java/com/yahoo/messagebus/metrics/package-info.java b/messagebus/src/main/java/com/yahoo/messagebus/metrics/package-info.java deleted file mode 100644 index 9c425f0a0df..00000000000 --- a/messagebus/src/main/java/com/yahoo/messagebus/metrics/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -@ExportPackage -package com.yahoo.messagebus.metrics; - -import com.yahoo.osgi.annotation.ExportPackage; diff --git a/messagebus/src/main/java/com/yahoo/messagebus/test/SimpleProtocol.java b/messagebus/src/main/java/com/yahoo/messagebus/test/SimpleProtocol.java index c4673685767..fc8ccd988c5 100644 --- a/messagebus/src/main/java/com/yahoo/messagebus/test/SimpleProtocol.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/test/SimpleProtocol.java @@ -2,20 +2,13 @@ package com.yahoo.messagebus.test; import com.yahoo.component.Version; -import com.yahoo.messagebus.EmptyReply; import com.yahoo.messagebus.Protocol; -import com.yahoo.messagebus.Reply; import com.yahoo.messagebus.Routable; -import com.yahoo.messagebus.metrics.MetricSet; -import com.yahoo.messagebus.routing.Route; -import com.yahoo.messagebus.routing.RoutingContext; -import com.yahoo.messagebus.routing.RoutingNodeIterator; import com.yahoo.messagebus.routing.RoutingPolicy; import com.yahoo.text.Utf8; import com.yahoo.text.Utf8String; import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -68,11 +61,6 @@ public class SimpleProtocol implements Protocol { } } - @Override - public MetricSet getMetrics() { - return null; - } - /** * Registers a policy factory with this protocol under a given name. Whenever a policy is requested that matches * this name, the factory is invoked. diff --git a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/RPCNetworkTestCase.java b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/RPCNetworkTestCase.java index 01e0fbf34b6..bc109a6074f 100644 --- a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/RPCNetworkTestCase.java +++ b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/RPCNetworkTestCase.java @@ -3,8 +3,15 @@ package com.yahoo.messagebus.network.rpc; import com.yahoo.component.Version; import com.yahoo.jrt.slobrok.server.Slobrok; -import com.yahoo.messagebus.*; -import com.yahoo.messagebus.metrics.MetricSet; +import com.yahoo.messagebus.DestinationSession; +import com.yahoo.messagebus.DestinationSessionParams; +import com.yahoo.messagebus.Message; +import com.yahoo.messagebus.MessageBusParams; +import com.yahoo.messagebus.Protocol; +import com.yahoo.messagebus.Reply; +import com.yahoo.messagebus.Routable; +import com.yahoo.messagebus.SourceSession; +import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.network.rpc.test.TestServer; import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingPolicy; @@ -88,11 +95,6 @@ public class RPCNetworkTestCase { return null; } - @Override - public MetricSet getMetrics() { - return null; - } - static MyProtocol newEncodeException(RuntimeException e) { return new MyProtocol(e); } diff --git a/messagebus/src/test/java/com/yahoo/messagebus/test/SimpleProtocolTestCase.java b/messagebus/src/test/java/com/yahoo/messagebus/test/SimpleProtocolTestCase.java index 898d5a36431..c6b3b09f2ed 100644 --- a/messagebus/src/test/java/com/yahoo/messagebus/test/SimpleProtocolTestCase.java +++ b/messagebus/src/test/java/com/yahoo/messagebus/test/SimpleProtocolTestCase.java @@ -6,7 +6,9 @@ import com.yahoo.messagebus.EmptyReply; import com.yahoo.messagebus.Routable; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; /** * @author Simon Thoresen Hult @@ -21,10 +23,6 @@ public class SimpleProtocolTestCase { assertEquals(SimpleProtocol.NAME, PROTOCOL.getName()); } - @Test - public void requireThatMetricSetIsNull() { - assertNull(PROTOCOL.getMetrics()); - } @Test public void requireThatMessageCanBeEncodedAndDecoded() { |