diff options
Diffstat (limited to 'messagebus')
4 files changed, 22 insertions, 21 deletions
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 7c404207737..fb3c4cf9971 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 @@ -53,7 +53,10 @@ public class RPCService { addressList = mirror.lookup(pattern); } if (addressList != null && !addressList.isEmpty()) { - addressIdx = ++addressIdx % addressList.size(); + ++addressIdx; + if (addressIdx >= addressList.size()) { + addressIdx = 0; + } 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/RPCServiceAddress.java b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCServiceAddress.java index 8a1b99073e7..0a6a58d4e89 100755 --- a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCServiceAddress.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCServiceAddress.java @@ -23,15 +23,16 @@ public class RPCServiceAddress implements ServiceAddress { * @param serviceName The full service name of the address. * @param connectionSpec The connection specification. */ - public RPCServiceAddress(String serviceName, String connectionSpec) { + public RPCServiceAddress(String serviceName, Spec connectionSpec) { this.serviceName = serviceName; int pos = serviceName.lastIndexOf('/'); - if (pos > 0 && pos < serviceName.length() - 1) { - sessionName = serviceName.substring(pos + 1); - } else { - sessionName = null; - } - this.connectionSpec = new Spec(connectionSpec); + sessionName = (pos > 0 && pos < serviceName.length() - 1) + ? serviceName.substring(pos + 1) + : null; + this.connectionSpec = connectionSpec; + } + public RPCServiceAddress(String serviceName, String connectionSpec) { + this(serviceName, new Spec(connectionSpec)); } @Override @@ -97,7 +98,7 @@ public class RPCServiceAddress implements ServiceAddress { } /** - * Sets the RPC target to be used when communicating with the remove service. + * Sets the RPC target to be used when communicating with the remote service. * * @param target The target to set. */ diff --git a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCTargetPool.java b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCTargetPool.java index 04d9f4ade68..7f5721ee2bf 100755 --- a/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCTargetPool.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/network/rpc/RPCTargetPool.java @@ -18,7 +18,7 @@ import java.util.Map; */ public class RPCTargetPool { - private final Map<String, Entry> targets = new HashMap<>(); + private final Map<Spec, Entry> targets = new HashMap<>(); private final Timer timer; private final long expireMillis; private final int numTargetsPerSpec; @@ -86,33 +86,32 @@ public class RPCTargetPool { */ public RPCTarget getTarget(Supervisor orb, RPCServiceAddress address) { Spec spec = address.getConnectionSpec(); - String key = spec.toString(); long now = timer.milliTime(); synchronized (this) { - Entry entry = targets.get(key); + Entry entry = targets.get(spec); if (entry != null) { RPCTarget target = entry.getTarget(now); if (target != null) { return target; } - dropTarget(entry, key); + dropTarget(entry, spec); } - return createAndAddTarget(orb, spec, key, now); + return createAndAddTarget(orb, spec, now); } } - private void dropTarget(Entry entry, String key) { + private void dropTarget(Entry entry, Spec key) { entry.close(); targets.remove(key); } - private RPCTarget createAndAddTarget(Supervisor orb, Spec spec, String key, long now) { + private RPCTarget createAndAddTarget(Supervisor orb, Spec spec, long now) { RPCTarget [] tmpTargets = new RPCTarget[numTargetsPerSpec]; for (int i=0; i < tmpTargets.length; i++) { tmpTargets[i] = new RPCTarget(spec, orb); } Entry entry = new Entry(tmpTargets, now); - targets.put(key, entry); + targets.put(spec, entry); return entry.getTarget(now); } 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 dd779fd84c0..886833b8b14 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 @@ -11,9 +11,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import java.net.UnknownHostException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.List; @@ -69,7 +67,7 @@ public class SlobrokTestCase { System.out.printf(" { EMPTY }\n"); } else { for (Mirror.Entry entry : actual) { - System.out.printf(" { %s, %s }\n", entry.getName(), entry.getSpec()); + System.out.printf(" { %s, %s }\n", entry.getName(), entry.getSpecString()); } } System.out.printf("expected values:\n"); @@ -77,7 +75,7 @@ public class SlobrokTestCase { System.out.printf(" { EMPTY }\n"); } else { for (Mirror.Entry entry : expect) { - System.out.printf(" { %s, %s }\n", entry.getName(), entry.getSpec()); + System.out.printf(" { %s, %s }\n", entry.getName(), entry.getSpecString()); } } assertTrue(false); |