Repository: hbase Updated Branches: refs/heads/branch-1 bdeab9319 -> 3aaafd7dd
HBASE-19917 Improve RSGroupBasedLoadBalancer#filterServers() to be more efficient Signed-off-by: tedyu <yuzhih...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/3aaafd7d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/3aaafd7d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/3aaafd7d Branch: refs/heads/branch-1 Commit: 3aaafd7dd3f4547d06584ecb7cd5b97146e1ba9e Parents: bdeab93 Author: Xiang LI <lixi...@freewheel.tv> Authored: Mon Feb 5 11:54:57 2018 +0800 Committer: tedyu <yuzhih...@gmail.com> Committed: Sun Feb 4 20:04:48 2018 -0800 ---------------------------------------------------------------------- .../hbase/rsgroup/RSGroupBasedLoadBalancer.java | 24 ++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/3aaafd7d/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java ---------------------------------------------------------------------- diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java index 5c08fb7..0994ba0 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java @@ -26,9 +26,9 @@ import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import java.io.IOException; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -37,6 +37,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -299,16 +300,21 @@ public class RSGroupBasedLoadBalancer implements RSGroupableBalancer, LoadBalanc * List of servers which are online. * @return the list */ - private List<ServerName> filterServers(Collection<Address> servers, - Collection<ServerName> onlineServers) { - ArrayList<ServerName> finalList = new ArrayList<ServerName>(); - for (Address server : servers) { - for(ServerName curr: onlineServers) { - if(curr.getAddress().equals(server)) { - finalList.add(curr); - } + private List<ServerName> filterServers(Set<Address> servers, + List<ServerName> onlineServers) { + /** + * servers is actually a TreeSet (see {@link org.apache.hadoop.hbase.rsgroup.RSGroupInfo}), + * having its contains()'s time complexity as O(logn), which is good enough. + * TODO: consider using HashSet to pursue O(1) for contains() throughout the calling chain + * if needed. + */ + ArrayList<ServerName> finalList = new ArrayList<>(); + for (ServerName onlineServer : onlineServers) { + if (servers.contains(onlineServer.getAddress())) { + finalList.add(onlineServer); } } + return finalList; }