diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-22 00:33:12 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-22 11:31:01 +0200 |
commit | 9e7180cb7a2ef747bb72560097fedbdb8f5f08f1 (patch) | |
tree | 08d0af8ee2f777b6a7baa235bff4ef54d3a87945 /documentapi/src | |
parent | 6a61110fef80bebfdd7fe7725005a6560974b22d (diff) |
Change interface from Mirror.Entry[] to List<Mirror.Entry> as you already have a list.
Avoid having to do an array copy that is not necessary.
Diffstat (limited to 'documentapi/src')
12 files changed, 106 insertions, 49 deletions
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 */ } |