[
https://issues.apache.org/jira/browse/HBASE-19917?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xiang Li updated HBASE-19917:
-----------------------------
Description:
{code:title=hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java|borderStyle=solid}
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);
}
}
}
return finalList;
}
{code}
filterServers is to return the union of servers and onlineServers. The current
implementation has time complexity as O(m*n) (2 loops), could be in O(m + n) if
HashSet is used.
Another point which could be improved: filterServers() is only called in
filterOfflineServers(). filterOfflineServers calls filterServers(Set, List).
The current filterServers(Collection, Collection) seems could be improved.
was:
{code:title=hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java|borderStyle=solid}
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);
}
}
}
return finalList;
}
{code}
filterServers is to return the union of servers and onlineServers. The current
implementation has time complexity as O(m*n) (2 loops), could be in O(m + n) if
HashSet is used.
One more, filterServers() is only called in filterOfflineServers().
filterOfflineServers calls filterServers(Set, List). The current
filterServers(Collection, Collection) seems could be improved.
> Improve RSGroupBasedLoadBalancer#filterServers() to be more efficient
> ---------------------------------------------------------------------
>
> Key: HBASE-19917
> URL: https://issues.apache.org/jira/browse/HBASE-19917
> Project: HBase
> Issue Type: Improvement
> Components: rsgroup
> Reporter: Xiang Li
> Assignee: Xiang Li
> Priority: Minor
>
> {code:title=hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java|borderStyle=solid}
> 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);
> }
> }
> }
> return finalList;
> }
> {code}
> filterServers is to return the union of servers and onlineServers. The
> current implementation has time complexity as O(m*n) (2 loops), could be in
> O(m + n) if HashSet is used.
> Another point which could be improved: filterServers() is only called in
> filterOfflineServers(). filterOfflineServers calls filterServers(Set, List).
> The current filterServers(Collection, Collection) seems could be improved.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)