diff --git a/src/main/java/net/spy/memcached/ArcusKetamaNodeLocator.java b/src/main/java/net/spy/memcached/ArcusKetamaNodeLocator.java index 66aa7be4b..e0a1646dc 100644 --- a/src/main/java/net/spy/memcached/ArcusKetamaNodeLocator.java +++ b/src/main/java/net/spy/memcached/ArcusKetamaNodeLocator.java @@ -175,31 +175,28 @@ public Iterator getSequence(String k) { } public NodeLocator getReadonlyCopy() { - TreeMap> smn = - new TreeMap<>(ketamaNodes); - Collection an = new ArrayList<>( - allNodes.size()); - lock.lock(); try { + TreeMap> ketamaCopy = new TreeMap<>(); + Collection nodesCopy = new ArrayList<>(allNodes.size()); + // Rewrite the values a copy of the map. - for (Map.Entry> me : smn.entrySet()) { - SortedSet nodeROSet = - new TreeSet<>(config.new NodeNameComparator()); - for (MemcachedNode mn : me.getValue()) { - nodeROSet.add(new MemcachedNodeROImpl(mn)); + for (Map.Entry> hashPoint : ketamaNodes.entrySet()) { + SortedSet nodeROSet = new TreeSet<>(config.new NodeNameComparator()); + for (MemcachedNode node : hashPoint.getValue()) { + nodeROSet.add(new MemcachedNodeROImpl(node)); } - me.setValue(nodeROSet); + ketamaCopy.put(hashPoint.getKey(), nodeROSet); } // Copy the allNodes collection. - for (MemcachedNode n : allNodes) { - an.add(new MemcachedNodeROImpl(n)); + for (MemcachedNode node : allNodes) { + nodesCopy.add(new MemcachedNodeROImpl(node)); } + + return new ArcusKetamaNodeLocator(ketamaCopy, nodesCopy, config); } finally { lock.unlock(); } - - return new ArcusKetamaNodeLocator(smn, an, config); } public void update(Collection toAttach, diff --git a/src/main/java/net/spy/memcached/ArcusReplKetamaNodeLocator.java b/src/main/java/net/spy/memcached/ArcusReplKetamaNodeLocator.java index a01259aca..5f4bfabb6 100644 --- a/src/main/java/net/spy/memcached/ArcusReplKetamaNodeLocator.java +++ b/src/main/java/net/spy/memcached/ArcusReplKetamaNodeLocator.java @@ -205,36 +205,34 @@ public Iterator getSequence(String k, ReplicaPick pick) { } public NodeLocator getReadonlyCopy() { - TreeMap> smg = - new TreeMap<>(ketamaGroups); - HashMap ag = - new HashMap<>(allGroups.size()); - Collection an = new ArrayList<>(allNodes.size()); - lock.lock(); try { + TreeMap> ketamaCopy = new TreeMap<>(); + HashMap groupsCopy = new HashMap<>(allGroups.size()); + Collection nodesCopy = new ArrayList<>(allNodes.size()); + // Rewrite the values a copy of the map - for (Map.Entry> mge : smg.entrySet()) { + for (Map.Entry> hashPoint : ketamaGroups.entrySet()) { SortedSet groupROSet = new TreeSet<>( new ArcusReplKetamaNodeLocatorConfiguration.MemcachedReplicaGroupComparator()); - for (MemcachedReplicaGroup mrg : mge.getValue()) { - groupROSet.add(new MemcachedReplicaGroupROImpl(mrg)); + for (MemcachedReplicaGroup group : hashPoint.getValue()) { + groupROSet.add(new MemcachedReplicaGroupROImpl(group)); } - mge.setValue(groupROSet); + ketamaCopy.put(hashPoint.getKey(), groupROSet); } // copy the allGroups collection. - for (Map.Entry me : allGroups.entrySet()) { - ag.put(me.getKey(), new MemcachedReplicaGroupROImpl(me.getValue())); + for (Map.Entry group : allGroups.entrySet()) { + groupsCopy.put(group.getKey(), new MemcachedReplicaGroupROImpl(group.getValue())); } // copy the allNodes collection. - for (MemcachedNode n : allNodes) { - an.add(new MemcachedNodeROImpl(n)); + for (MemcachedNode node : allNodes) { + nodesCopy.add(new MemcachedNodeROImpl(node)); } + + return new ArcusReplKetamaNodeLocator(ketamaCopy, groupsCopy, nodesCopy); } finally { lock.unlock(); } - - return new ArcusReplKetamaNodeLocator(smg, ag, an); } public void update(Collection toAttach, Collection toDelete) {