Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 299782cff -> 5c4ce600c refs/heads/cassandra-3.11 991e19711 -> 68f8966d5 refs/heads/trunk f5adeeb8d -> ffde38a25
Improve TokenMetaData cache populating performance avoid long locking patch by Pengchao Wang; reviewed by Benedict for CASSANDRA-14660 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5c4ce600 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5c4ce600 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5c4ce600 Branch: refs/heads/cassandra-3.0 Commit: 5c4ce600c4e24a656fd538f14ec5f4951d231e6e Parents: 299782c Author: Pengchao Wang <[email protected]> Authored: Fri Aug 24 00:39:06 2018 -0700 Committer: Benedict Elliott Smith <[email protected]> Committed: Fri Aug 24 15:47:08 2018 +0100 ---------------------------------------------------------------------- .../cassandra/utils/SortedBiMultiValMap.java | 29 ++++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5c4ce600/src/java/org/apache/cassandra/utils/SortedBiMultiValMap.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/SortedBiMultiValMap.java b/src/java/org/apache/cassandra/utils/SortedBiMultiValMap.java index 368d3f5..f628061 100644 --- a/src/java/org/apache/cassandra/utils/SortedBiMultiValMap.java +++ b/src/java/org/apache/cassandra/utils/SortedBiMultiValMap.java @@ -17,6 +17,7 @@ */ package org.apache.cassandra.utils; +import java.util.Collection; import java.util.Comparator; import java.util.SortedMap; import java.util.TreeMap; @@ -26,6 +27,9 @@ import com.google.common.collect.TreeMultimap; public class SortedBiMultiValMap<K, V> extends BiMultiValMap<K, V> { + @SuppressWarnings("unchecked") + private static final Comparator DEFAULT_COMPARATOR = (o1, o2) -> ((Comparable) o1).compareTo(o2); + protected SortedBiMultiValMap(SortedMap<K, V> forwardMap, SortedSetMultimap<V, K> reverseMap) { super(forwardMap, reverseMap); @@ -48,28 +52,29 @@ public class SortedBiMultiValMap<K, V> extends BiMultiValMap<K, V> public static <K extends Comparable<K>, V extends Comparable<V>> SortedBiMultiValMap<K, V> create(BiMultiValMap<K, V> map) { SortedBiMultiValMap<K, V> newMap = SortedBiMultiValMap.<K,V>create(); - newMap.forwardMap.putAll(map); - newMap.reverseMap.putAll(map.inverse()); + copy(map, newMap); return newMap; } public static <K, V> SortedBiMultiValMap<K, V> create(BiMultiValMap<K, V> map, Comparator<K> keyComparator, Comparator<V> valueComparator) { SortedBiMultiValMap<K, V> newMap = create(keyComparator, valueComparator); - newMap.forwardMap.putAll(map); - newMap.reverseMap.putAll(map.inverse()); + copy(map, newMap); return newMap; } + private static <K, V> void copy(BiMultiValMap<K, V> map, BiMultiValMap<K, V> newMap) + { + newMap.forwardMap.putAll(map); + // Put each individual TreeSet instead of Multimap#putAll(Multimap) to get linear complexity + // See CASSANDRA-14660 + for (Entry<V, Collection<K>> entry : map.inverse().asMap().entrySet()) + newMap.reverseMap.putAll(entry.getKey(), entry.getValue()); + } + + @SuppressWarnings("unchecked") private static <T> Comparator<T> defaultComparator() { - return new Comparator<T>() - { - @SuppressWarnings("unchecked") - public int compare(T o1, T o2) - { - return ((Comparable<T>) o1).compareTo(o2); - } - }; + return DEFAULT_COMPARATOR; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
