diff options
25 files changed, 167 insertions, 101 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java index 498037a4984..bb3d7e049d1 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java @@ -15,7 +15,12 @@ import com.yahoo.vespa.clustercontroller.core.Timer; import com.yahoo.vespa.clustercontroller.core.ContentCluster; import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; -import java.util.*; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.TreeMap; import java.util.logging.Logger; public class SlobrokClient implements NodeLookup { @@ -190,8 +195,8 @@ public class SlobrokClient implements NodeLookup { private Map<Node, SlobrokData> getSlobrokData(String pattern) { Map<Node, SlobrokData> result = new TreeMap<>(); - Mirror.Entry[] entries = mirror.lookup(pattern); - log.log(LogLevel.SPAM, "Looking for slobrok entries with pattern '" + pattern + "'. Found " + entries.length + " entries."); + List<Mirror.Entry> entries = mirror.lookup(pattern); + log.log(LogLevel.SPAM, "Looking for slobrok entries with pattern '" + pattern + "'. Found " + entries.size() + " entries."); for (Mirror.Entry entry : entries) { StringTokenizer st = new StringTokenizer(entry.getName(), "/"); String addressType = st.nextToken(); @@ -209,7 +214,7 @@ public class SlobrokClient implements NodeLookup { private static class SlobrokData { public Node node; - public String rpcAddress; + String rpcAddress; SlobrokData(Node node, String rpcAddress) { this.node = node; diff --git a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java index db072afd201..65d94807d7f 100644 --- a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java +++ b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java @@ -3,7 +3,6 @@ package com.yahoo.config.model.producer; import com.google.common.annotations.Beta; import com.yahoo.config.ConfigInstance; -import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.subscription.ConfigInstanceUtil; diff --git a/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java index f895ad21b0a..287af5c34b9 100644 --- a/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java +++ b/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java @@ -5,14 +5,17 @@ import com.yahoo.document.ArrayDataType; import com.yahoo.document.DataType; import com.yahoo.document.Field; import com.yahoo.document.FieldPath; -import com.yahoo.document.serialization.*; +import com.yahoo.document.serialization.DocumentSerializer; +import com.yahoo.document.serialization.DocumentSerializerFactory; +import com.yahoo.document.serialization.FieldReader; +import com.yahoo.document.serialization.FieldWriter; +import com.yahoo.document.serialization.XmlStream; import com.yahoo.io.GrowableByteBuffer; import com.yahoo.vespa.objects.BufferSerializer; import com.yahoo.vespa.objects.Deserializer; import com.yahoo.vespa.objects.Identifiable; import com.yahoo.vespa.objects.Ids; import com.yahoo.vespa.objects.Serializer; -import com.yahoo.document.config.DocumentmanagerConfig.Datatype.Structtype.Compresstype; /** * @author Einar M R Rosenvinge diff --git a/documentapi/abi-spec.json b/documentapi/abi-spec.json index cbfe07eb93d..e1e5f778423 100644 --- a/documentapi/abi-spec.json +++ b/documentapi/abi-spec.json @@ -2035,10 +2035,9 @@ "abstract" ], "methods": [ - "public void <init>(java.util.Map)", "public void init()", "public com.yahoo.jrt.slobrok.api.IMirror getMirror()", - "public com.yahoo.jrt.slobrok.api.Mirror$Entry[] lookup(com.yahoo.messagebus.routing.RoutingContext, java.lang.String)", + "public java.util.List lookup(com.yahoo.messagebus.routing.RoutingContext, java.lang.String)", "public synchronized void configure(com.yahoo.cloud.config.SlobroksConfig)", "public void destroy()", "public bridge synthetic void configure(com.yahoo.config.ConfigInstance)" @@ -2207,7 +2206,7 @@ "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[])", + "public com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Node getRecipient(java.util.List)", "public void received(com.yahoo.documentapi.messagebus.protocol.LoadBalancer$Node, boolean)" ], "fields": [] 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 312fd6e5964..e81ac4ae05e 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 @@ -103,7 +103,7 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy { if (generation != upd) { generation = upd; recipients.clear(); - Mirror.Entry[] arr = mirror.lookup(pattern); + List<Mirror.Entry> arr = mirror.lookup(pattern); for (Mirror.Entry entry : arr) { recipients.add(Hop.parse(entry.getSpec() + session)); } 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 3ebe5b7281e..39242bb6cab 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 @@ -11,6 +11,7 @@ import com.yahoo.jrt.slobrok.api.SlobrokList; import com.yahoo.messagebus.routing.RoutingContext; import com.yahoo.cloud.config.SlobroksConfig; +import java.util.List; import java.util.Map; /** @@ -19,16 +20,16 @@ import java.util.Map; */ public abstract class ExternalSlobrokPolicy extends AsyncInitializationPolicy implements ConfigSubscriber.SingleSubscriber<SlobroksConfig> { String error; - Supervisor orb = null; - Mirror mirror = null; - SlobrokList slobroks = null; - boolean firstTry = true; + private Supervisor orb = null; + private Mirror mirror = null; + private SlobrokList slobroks = null; + private boolean firstTry = true; private ConfigSubscriber subscriber; String[] configSources = null; - String slobrokConfigId = "admin/slobrok.0"; + private final static String slobrokConfigId = "admin/slobrok.0"; - public ExternalSlobrokPolicy(Map<String, String> param) { + ExternalSlobrokPolicy(Map<String, String> param) { super(); String conf = param.get("config"); @@ -72,16 +73,16 @@ public abstract class ExternalSlobrokPolicy extends AsyncInitializationPolicy im return mirror; } - public Mirror.Entry[] lookup(RoutingContext context, String pattern) { + public List<Mirror.Entry> lookup(RoutingContext context, String pattern) { IMirror mirror1 = (mirror != null ? mirror : context.getMirror()); - Mirror.Entry[] arr = mirror1.lookup(pattern); + List<Mirror.Entry> arr = mirror1.lookup(pattern); - if ((arr.length == 0) && firstTry) { + if ((arr.isEmpty()) && firstTry) { synchronized(this) { try { int count = 0; - while (arr.length == 0 && count < 100) { + while (arr.isEmpty() && count < 100) { Thread.sleep(50); arr = mirror1.lookup(pattern); count++; 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 167a480e1aa..a2875f14ab5 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 @@ -62,8 +62,8 @@ public class LoadBalancer { * @param choices the node choices, represented as Slobrok entries * @return the chosen node, or null only if the given choices were zero */ - public Node getRecipient(Mirror.Entry[] choices) { - if (choices.length == 0) return null; + public Node getRecipient(List<Mirror.Entry> choices) { + if (choices.isEmpty()) return null; double weightSum = 0.0; Node selectedNode = null; @@ -79,7 +79,7 @@ public class LoadBalancer { } if (selectedNode == null) { // Position>sum of all weights: Wrap around (but keep the remainder for some reason) position -= weightSum; - selectedNode = new Node(choices[0], getNodeMetrics(choices[0])); + selectedNode = new Node(choices.get(0), getNodeMetrics(choices.get(0))); } position += 1.0; selectedNode.metrics.sent.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 7c5345351a8..9cf82144e71 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 @@ -9,6 +9,7 @@ import com.yahoo.messagebus.routing.Route; import com.yahoo.messagebus.routing.RoutingContext; import com.yahoo.messagebus.routing.RoutingNodeIterator; +import java.util.List; import java.util.Map; /** @@ -75,7 +76,7 @@ public class LoadBalancerPolicy extends ExternalSlobrokPolicy { @return Returns a hop representing the TCP address of the target, or null if none could be found. */ private LoadBalancer.Node getRecipient(RoutingContext context) { - Mirror.Entry [] lastLookup = lookup(context, pattern); + List<Mirror.Entry> lastLookup = lookup(context, pattern); return loadBalancer.getRecipient(lastLookup); } 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 eb56a85e378..d4ebd4ecd81 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 @@ -83,7 +83,7 @@ public class LocalServicePolicy implements DocumentProtocolRoutingPolicy { entry.generation = upd; entry.recipients.clear(); - Mirror.Entry[] arr = ctx.getMirror().lookup(ctx.getHopPrefix() + "*" + ctx.getHopSuffix()); + List<Mirror.Entry> arr = ctx.getMirror().lookup(ctx.getHopPrefix() + "*" + ctx.getHopSuffix()); String self = localAddress != null ? localAddress : toAddress(ctx.getMessageBus().getConnectionSpec()); for (Mirror.Entry item : arr) { if (self.equals(toAddress(item.getSpec()))) { 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 244d101b36f..3a1599ab71b 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 @@ -82,7 +82,7 @@ public class RoundRobinPolicy implements DocumentProtocolRoutingPolicy { entry.generation = upd; entry.recipients.clear(); for (int i = 0; i < ctx.getNumRecipients(); ++i) { - Mirror.Entry[] arr = ctx.getMirror().lookup(ctx.getRecipient(i).getHop(0).toString()); + List<Mirror.Entry> arr = ctx.getMirror().lookup(ctx.getRecipient(i).getHop(0).toString()); for (Mirror.Entry item : arr) { entry.recipients.add(Hop.parse(item.getName())); } 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 341589643d2..048149e86ab 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 @@ -107,7 +107,7 @@ public class StoragePolicy extends ExternalSlobrokPolicy { this.policy = policy; } - private Mirror.Entry[] getEntries(String hostPattern, RoutingContext context) { + private List<Mirror.Entry> getEntries(String hostPattern, RoutingContext context) { return policy.lookup(context, hostPattern); } @@ -116,16 +116,16 @@ public class StoragePolicy extends ExternalSlobrokPolicy { public IMirror getMirror(RoutingContext context) { return context.getMirror(); } public String getTargetSpec(Integer distributor, RoutingContext context) { - Mirror.Entry[] arr = getEntries(patternGenerator.getDistributorHostPattern(distributor), context); - if (arr.length == 0) return null; + List<Mirror.Entry> arr = getEntries(patternGenerator.getDistributorHostPattern(distributor), context); + if (arr.isEmpty()) return null; if (distributor != null) { - if (arr.length == 1) { - return convertSlobrokNameToSessionName(arr[0].getSpec()); + if (arr.size() == 1) { + return convertSlobrokNameToSessionName(arr.get(0).getSpec()); } else { - log.log(LogLevel.WARNING, "Got " + arr.length + " matches for a distributor."); + log.log(LogLevel.WARNING, "Got " + arr.size() + " matches for a distributor."); } } else { - return convertSlobrokNameToSessionName(arr[randomizer.nextInt(arr.length)].getSpec()); + return convertSlobrokNameToSessionName(arr.get(randomizer.nextInt(arr.size())).getSpec()); } 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 31802f2872f..3251c038fc7 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 @@ -109,10 +109,10 @@ public class SubsetServicePolicy implements DocumentProtocolRoutingPolicy { entry.generation = upd; entry.recipients.clear(); - Mirror.Entry[] arr = ctx.getMirror().lookup(ctx.getHopPrefix() + "*" + ctx.getHopSuffix()); + List<Mirror.Entry> arr = ctx.getMirror().lookup(ctx.getHopPrefix() + "*" + ctx.getHopSuffix()); int pos = ctx.getMessageBus().getConnectionSpec().hashCode(); - for (int i = 0; i < subsetSize && i < arr.length; ++i) { - entry.recipients.add(Hop.parse(arr[((pos + i) & Integer.MAX_VALUE) % arr.length].getName())); + for (int i = 0; i < subsetSize && i < arr.size(); ++i) { + entry.recipients.add(Hop.parse(arr.get(((pos + i) & Integer.MAX_VALUE) % arr.size()).getName())); } } return entry; diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/TargetCachingSlobrokHostFetcherTest.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/TargetCachingSlobrokHostFetcherTest.java index 7e6c7bc468a..4413b657739 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/TargetCachingSlobrokHostFetcherTest.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/TargetCachingSlobrokHostFetcherTest.java @@ -7,6 +7,8 @@ import com.yahoo.messagebus.routing.RoutingContext; import org.junit.Test; import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -23,26 +25,25 @@ import static org.mockito.Mockito.when; */ public class TargetCachingSlobrokHostFetcherTest { - static String idOfIndex(int index) { + private static String idOfIndex(int index) { return String.format("storage/cluster.foo/distributor/%d/default", index); } - static String idOfWildcardLookup() { + private static String idOfWildcardLookup() { return "storage/cluster.foo/distributor/*/default"; } - static String lookupSpecOfIndex(int index) { + private static String lookupSpecOfIndex(int index) { return String.format("tcp/localhost:%d", index); } - static String resolvedSpecOfIndex(int index) { + private static String resolvedSpecOfIndex(int index) { return String.format("tcp/localhost:%d/default", index); } - static Mirror.Entry[] dummyEntries(int... indices) { + private static List<Mirror.Entry> dummyEntries(int... indices) { return Arrays.stream(indices) - .mapToObj(index -> new Mirror.Entry(idOfIndex(index), lookupSpecOfIndex(index))) - .toArray(Mirror.Entry[]::new); + .mapToObj(index -> new Mirror.Entry(idOfIndex(index), lookupSpecOfIndex(index))).collect(Collectors.toList()); } static class Fixture { 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 698b778c312..51dd1ac12b8 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 @@ -5,6 +5,7 @@ import com.yahoo.documentapi.messagebus.protocol.LoadBalancer; import com.yahoo.jrt.slobrok.api.Mirror; import org.junit.Test; +import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; @@ -42,9 +43,9 @@ public class LoadBalancerTestCase { public void testLoadBalancer() { 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"), - new Mirror.Entry("foo/2/default", "tcp/bar:3") }; + List<Mirror.Entry> entries = Arrays.asList(new Mirror.Entry("foo/0/default", "tcp/bar:1"), + new Mirror.Entry("foo/1/default", "tcp/bar:2"), + new Mirror.Entry("foo/2/default", "tcp/bar:3")); List<LoadBalancer.NodeMetrics> weights = lb.getNodeWeights(); { @@ -100,7 +101,7 @@ public class LoadBalancerTestCase { public void testLoadBalancerOneItemOnly() { LoadBalancer lb = new LoadBalancer("foo"); - Mirror.Entry[] entries = new Mirror.Entry[]{ new Mirror.Entry("foo/0/default", "tcp/bar:1") }; + List<Mirror.Entry> entries = Arrays.asList(new Mirror.Entry("foo/0/default", "tcp/bar:1") ); List<LoadBalancer.NodeMetrics> weights = lb.getNodeWeights(); assertEquals("foo/0/default" , lb.getRecipient(entries).entry.getName()); diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java index e2f1c9cd937..fd9d3f78ca8 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java @@ -1,21 +1,61 @@ // 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.test; -import com.yahoo.document.*; -import com.yahoo.documentapi.messagebus.protocol.*; +import com.yahoo.document.Document; +import com.yahoo.document.DocumentId; +import com.yahoo.document.DocumentPut; +import com.yahoo.document.DocumentTypeManager; +import com.yahoo.document.DocumentTypeManagerConfigurer; +import com.yahoo.document.DocumentUpdate; +import com.yahoo.documentapi.messagebus.protocol.ANDPolicy; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; +import com.yahoo.documentapi.messagebus.protocol.DocumentRouteSelectorPolicy; +import com.yahoo.documentapi.messagebus.protocol.ErrorPolicy; +import com.yahoo.documentapi.messagebus.protocol.ExternPolicy; +import com.yahoo.documentapi.messagebus.protocol.GetDocumentMessage; +import com.yahoo.documentapi.messagebus.protocol.GetDocumentReply; +import com.yahoo.documentapi.messagebus.protocol.LoadBalancerPolicy; +import com.yahoo.documentapi.messagebus.protocol.LocalServicePolicy; +import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage; +import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage; +import com.yahoo.documentapi.messagebus.protocol.RoundRobinPolicy; +import com.yahoo.documentapi.messagebus.protocol.SubsetServicePolicy; +import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentMessage; import com.yahoo.jrt.ListenFailedException; import com.yahoo.jrt.slobrok.api.IMirror; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.jrt.slobrok.server.Slobrok; -import com.yahoo.messagebus.*; +import com.yahoo.messagebus.DestinationSession; +import com.yahoo.messagebus.EmptyReply; import com.yahoo.messagebus.Error; +import com.yahoo.messagebus.ErrorCode; +import com.yahoo.messagebus.IntermediateSession; +import com.yahoo.messagebus.Message; +import com.yahoo.messagebus.MessageBus; +import com.yahoo.messagebus.Reply; +import com.yahoo.messagebus.SourceSession; +import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.network.rpc.test.TestServer; -import com.yahoo.messagebus.routing.*; +import com.yahoo.messagebus.routing.HopBlueprint; +import com.yahoo.messagebus.routing.HopSpec; +import com.yahoo.messagebus.routing.PolicyDirective; +import com.yahoo.messagebus.routing.Route; +import com.yahoo.messagebus.routing.RouteSpec; +import com.yahoo.messagebus.routing.RoutingNode; +import com.yahoo.messagebus.routing.RoutingPolicy; +import com.yahoo.messagebus.routing.RoutingSpec; +import com.yahoo.messagebus.routing.RoutingTableSpec; import com.yahoo.messagebus.test.Receptor; import org.junit.Before; import org.junit.Test; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -721,7 +761,7 @@ public class PolicyTestCase { throws InterruptedException, TimeoutException { for (int i = 0; i < TIMEOUT_MILLIS / 10; ++i) { - if (slobrok.lookup(pattern).length == numEntries) { + if (slobrok.lookup(pattern).size() == numEntries) { return; } Thread.sleep(10); diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java index 875ef276b01..89d5db62899 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestFrame.java @@ -6,19 +6,32 @@ import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.jrt.ListenFailedException; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.jrt.slobrok.server.Slobrok; -import com.yahoo.messagebus.*; +import com.yahoo.messagebus.EmptyReply; +import com.yahoo.messagebus.ErrorCode; +import com.yahoo.messagebus.Message; +import com.yahoo.messagebus.MessageBus; +import com.yahoo.messagebus.MessageBusParams; +import com.yahoo.messagebus.Reply; import com.yahoo.messagebus.network.Identity; import com.yahoo.messagebus.network.Network; import com.yahoo.messagebus.network.ServiceAddress; import com.yahoo.messagebus.network.rpc.RPCNetwork; import com.yahoo.messagebus.network.rpc.RPCNetworkParams; import com.yahoo.messagebus.network.rpc.test.TestServer; -import com.yahoo.messagebus.routing.*; +import com.yahoo.messagebus.routing.HopSpec; +import com.yahoo.messagebus.routing.Route; +import com.yahoo.messagebus.routing.RoutingNode; +import com.yahoo.messagebus.routing.RoutingSpec; +import com.yahoo.messagebus.routing.RoutingTableSpec; import com.yahoo.messagebus.test.Receptor; import com.yahoo.messagebus.test.SimpleProtocol; import com.yahoo.messagebus.test.SimpleReply; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import static org.junit.Assert.assertEquals; @@ -272,8 +285,8 @@ public class PolicyTestFrame { */ public boolean waitSlobrok(String pattern, int cnt) { for (int i = 0; i < 1000 && !Thread.currentThread().isInterrupted(); ++i) { - Mirror.Entry[] res = net.getMirror().lookup(pattern); - if (res.length == cnt) { + List<Mirror.Entry> res = net.getMirror().lookup(pattern); + if (res.size() == cnt) { return true; } try { Thread.sleep(10); } catch (InterruptedException e) { /* ignore */ } diff --git a/jrt/src/com/yahoo/jrt/slobrok/api/IMirror.java b/jrt/src/com/yahoo/jrt/slobrok/api/IMirror.java index 9b3bd81fc3c..0079e2c9d67 100644 --- a/jrt/src/com/yahoo/jrt/slobrok/api/IMirror.java +++ b/jrt/src/com/yahoo/jrt/slobrok/api/IMirror.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jrt.slobrok.api; +import java.util.List; + /** * Defines an interface for the name server lookup. * @@ -21,7 +23,7 @@ public interface IMirror { * @return a list of all matching services, with corresponding connect specs * @param pattern The pattern used for matching **/ - Mirror.Entry[] lookup(String pattern); + List<Mirror.Entry> lookup(String pattern); /** * Obtain the number of updates seen by this mirror. The value may wrap, but will never become 0 again. This can be diff --git a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java index 127aa3d0d4f..c632191e31d 100644 --- a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java +++ b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java @@ -14,6 +14,7 @@ import com.yahoo.jrt.Values; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.logging.Logger; import java.util.logging.Level; @@ -86,7 +87,7 @@ public class Mirror implements IMirror { } @Override - public Entry[] lookup(String pattern) { + public List<Entry> lookup(String pattern) { ArrayList<Entry> found = new ArrayList<>(); char[] p = pattern.toCharArray(); for (Entry specEntry : specs) { @@ -94,7 +95,7 @@ public class Mirror implements IMirror { found.add(specEntry); } } - return found.toArray(new Entry[found.size()]); + return found; } @Override diff --git a/jrt/tests/com/yahoo/jrt/SlobrokTest.java b/jrt/tests/com/yahoo/jrt/SlobrokTest.java index ee15c7cd1de..20266b0826a 100644 --- a/jrt/tests/com/yahoo/jrt/SlobrokTest.java +++ b/jrt/tests/com/yahoo/jrt/SlobrokTest.java @@ -1,10 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jrt; - import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; +import java.util.List; import com.yahoo.jrt.slobrok.api.SlobrokList; import com.yahoo.jrt.slobrok.api.Mirror; @@ -17,7 +16,6 @@ import org.junit.Before; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; - public class SlobrokTest { private static class SpecList extends ArrayList<Mirror.Entry> { @@ -71,14 +69,13 @@ public class SlobrokTest { return a.compareTo(b); } }; - Mirror.Entry[] expect = - result.toArray(new Mirror.Entry[result.size()]); - Arrays.sort(expect, cmp); - Mirror.Entry[] actual = new Mirror.Entry[0]; + List<Entry> expect = result; + expect.sort(cmp); + List<Entry> actual = new ArrayList<>(); for (int i = 0; i < 1000; i++) { actual = mirror.lookup(pattern); - Arrays.sort(actual, cmp); - if (Arrays.equals(actual, expect)) { + actual.sort(cmp); + if (actual.equals(expect)) { // err("lookup successful for pattern: " + pattern); return; } @@ -87,18 +84,18 @@ public class SlobrokTest { error = true; err("lookup failed for pattern: " + pattern); err("actual values:"); - if (actual.length == 0) { + if (actual.isEmpty()) { err(" { EMPTY }"); } - for (int i = 0; i < actual.length; i++) { - err(" {" + actual[i].getName() + ", " + actual[i].getSpec() + "}"); + for (Entry e : actual) { + err(" {" + e.getName() + ", " + e.getSpec() + "}"); } err("expected values:"); - if (expect.length == 0) { + if (expect.isEmpty()) { err(" { EMPTY }"); } - for (int i = 0; i < expect.length; i++) { - err(" {" + expect[i].getName() + ", " + expect[i].getSpec() + "}"); + for (Entry e : expect) { + err(" {" + e.getName() + ", " + e.getSpec() + "}"); } } @@ -113,9 +110,9 @@ public class SlobrokTest { assertTrue(mirror.ready()); assertTrue(mirror.updates() > 0); - Mirror.Entry[] oneArr = mirror.lookup("*/*/*"); - assertTrue(oneArr.length == 1); - Mirror.Entry one = oneArr[0]; + List<Entry> oneArr = mirror.lookup("*/*/*"); + assertTrue(oneArr.size() == 1); + Mirror.Entry one = oneArr.get(0); assertTrue(one.equals(new Mirror.Entry(wantName, mySpec))); assertFalse(one.equals(new Mirror.Entry("B/x/w", mySpec))); assertFalse(one.equals(new Mirror.Entry(wantName, "foo:99"))); diff --git a/messagebus/src/main/java/com/yahoo/messagebus/network/local/LocalWire.java b/messagebus/src/main/java/com/yahoo/messagebus/network/local/LocalWire.java index 4f5fd6ab30a..9f6295b1ad2 100644 --- a/messagebus/src/main/java/com/yahoo/messagebus/network/local/LocalWire.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/network/local/LocalWire.java @@ -41,7 +41,7 @@ public class LocalWire implements IMirror { } @Override - public Mirror.Entry[] lookup(String pattern) { + public List<Mirror.Entry> lookup(String pattern) { List<Mirror.Entry> out = new ArrayList<>(); Pattern regex = Pattern.compile(pattern.replace("*", "[a-zA-Z0-9_-]+")); for (String key : services.keySet()) { @@ -49,7 +49,7 @@ public class LocalWire implements IMirror { out.add(new Mirror.Entry(key, key)); } } - return out.toArray(new Mirror.Entry[out.size()]); + return out; } @Override diff --git a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCService.java b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCService.java index abe1b7b4db3..7c404207737 100644 --- a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCService.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCService.java @@ -4,6 +4,7 @@ package com.yahoo.messagebus.network.rpc; import com.yahoo.jrt.slobrok.api.IMirror; import com.yahoo.jrt.slobrok.api.Mirror; +import java.util.List; import java.util.concurrent.ThreadLocalRandom; /** @@ -18,7 +19,7 @@ public class RPCService { private final String pattern; private int addressIdx = ThreadLocalRandom.current().nextInt(Integer.MAX_VALUE); private int addressGen = 0; - private Mirror.Entry[] addressList = null; + private List<Mirror.Entry> addressList = null; /** * Create a new RPCService backed by the given network and using the given service pattern. @@ -51,9 +52,9 @@ public class RPCService { addressGen = mirror.updates(); addressList = mirror.lookup(pattern); } - if (addressList != null && addressList.length > 0) { - addressIdx = ++addressIdx % addressList.length; - Mirror.Entry entry = addressList[addressIdx]; + if (addressList != null && !addressList.isEmpty()) { + addressIdx = ++addressIdx % addressList.size(); + Mirror.Entry entry = addressList.get(addressIdx); return new RPCServiceAddress(entry.getName(), entry.getSpec()); } } diff --git a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/test/TestServer.java b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/test/TestServer.java index d7ce31a5223..b17bb892f7d 100644 --- a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/test/TestServer.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/test/TestServer.java @@ -17,6 +17,7 @@ import com.yahoo.messagebus.routing.RoutingSpec; import com.yahoo.messagebus.routing.RoutingTableSpec; import com.yahoo.messagebus.test.SimpleProtocol; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; @@ -121,8 +122,8 @@ public class TestServer { for (int i = 0; i < 6000 && !Thread.currentThread().isInterrupted(); ++i) { boolean done = true; for (String pattern : slobrokState.getPatterns()) { - Mirror.Entry[] res = net.getMirror().lookup(pattern); - if (res.length != slobrokState.getCount(pattern)) { + List<Mirror.Entry> res = net.getMirror().lookup(pattern); + if (res.size() != slobrokState.getCount(pattern)) { done = false; } } diff --git a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/ServiceAddressTestCase.java b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/ServiceAddressTestCase.java index 476d85f59e9..1dbb30de585 100755 --- a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/ServiceAddressTestCase.java +++ b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/ServiceAddressTestCase.java @@ -11,6 +11,7 @@ import org.junit.Before; import org.junit.Test; import java.net.UnknownHostException; +import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -67,8 +68,8 @@ public class ServiceAddressTestCase { private boolean waitSlobrok(String pattern, int num) { for (int i = 0; i < 1000 && !Thread.currentThread().isInterrupted(); ++i) { - Mirror.Entry[] res = network.getMirror().lookup(pattern); - if (res.length == num) { + List<Mirror.Entry> res = network.getMirror().lookup(pattern); + if (res.size() == num) { return true; } try { diff --git a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/SlobrokTestCase.java b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/SlobrokTestCase.java index c6737385f4c..dd779fd84c0 100644 --- a/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/SlobrokTestCase.java +++ b/messagebus/src/test/java/com/yahoo/messagebus/network/rpc/SlobrokTestCase.java @@ -31,8 +31,8 @@ public class SlobrokTestCase { lst.add(new Mirror.Entry(fullName, spec)); return this; } - public Mirror.Entry[] toArray() { - return lst.toArray(new Mirror.Entry[lst.size()]); + public List<Mirror.Entry> toArray() { + return lst; } } @@ -44,18 +44,18 @@ public class SlobrokTestCase { int port2; int port3; - void check(RPCNetwork net, String pattern, Mirror.Entry[] expect) { + void check(RPCNetwork net, String pattern, List<Mirror.Entry> expect) { Comparator<Mirror.Entry> cmp = new Comparator<Mirror.Entry>() { public int compare(Mirror.Entry a, Mirror.Entry b) { return a.compareTo(b); } }; - Arrays.sort(expect, cmp); - Mirror.Entry[] actual = null; + expect.sort(cmp); + List<Mirror.Entry> actual = null; for (int i = 0; i < 1000; i++) { actual = net.getMirror().lookup(pattern); - Arrays.sort(actual, cmp); - if (Arrays.equals(actual, expect)) { + actual.sort(cmp); + if (actual.equals(expect)) { System.out.printf("lookup successful for pattern: %s\n", pattern); return; } @@ -65,7 +65,7 @@ public class SlobrokTestCase { } System.out.printf("lookup failed for pattern: %s\n", pattern); System.out.printf("actual values:\n"); - if (actual == null || actual.length == 0) { + if (actual == null || actual.isEmpty()) { System.out.printf(" { EMPTY }\n"); } else { for (Mirror.Entry entry : actual) { @@ -73,7 +73,7 @@ public class SlobrokTestCase { } } System.out.printf("expected values:\n"); - if (expect.length == 0) { + if (expect.isEmpty()) { System.out.printf(" { EMPTY }\n"); } else { for (Mirror.Entry entry : expect) { diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java index 482969c6625..1a402419ac0 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/slobrok/SlobrokMonitor.java @@ -67,7 +67,7 @@ public class SlobrokMonitor implements AutoCloseable { } List<Mirror.Entry> lookup(String pattern) { - return Arrays.asList(mirror.lookup(pattern)); + return mirror.lookup(pattern); } @Override @@ -76,6 +76,6 @@ public class SlobrokMonitor implements AutoCloseable { } boolean registeredInSlobrok(String slobrokServiceName) { - return mirror.lookup(slobrokServiceName).length > 0; + return !mirror.lookup(slobrokServiceName).isEmpty(); } } |