[ https://issues.apache.org/jira/browse/HBASE-22031?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xiang Li updated HBASE-22031: ----------------------------- Status: Open (was: Patch Available) > Provide RSGroupInfo with a new constructor using shallow copy > ------------------------------------------------------------- > > Key: HBASE-22031 > URL: https://issues.apache.org/jira/browse/HBASE-22031 > Project: HBase > Issue Type: Improvement > Components: rsgroup > Reporter: Xiang Li > Assignee: Xiang Li > Priority: Minor > Attachments: HBASE-22031.master.000.patch, > HBASE-22031.master.001.patch > > > As for org.apache.hadoop.hbase.rsgroup.RSGroupInfo, the following constructor > performs deep copies on both servers and tables inputed. > {code:title=hbase-common/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfo.java.java|borderStyle=solid} > RSGroupInfo(String name, SortedSet<Address> servers, SortedSet<TableName> > tables) { > this.name = name; > this.servers = (servers == null) ? new TreeSet<>() : new TreeSet<>(servers); > this.tables = (tables == null) ? new TreeSet<>() : new TreeSet<>(tables); > } > {code} > The constructor of TreeSet is heavy and I think it is better to have a new > constructor with shallow copy and it could be used at least in > {code:title=hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java|borderStyle=solid} > private synchronized void refresh(boolean forceOnline) throws IOException { > ... > groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, > getDefaultServers(), orphanTables)); > ... > {code} > It is not needed to allocate new TreeSet to deep copy the output of > getDefaultServers() and orphanTables, both of which are allocated in the near > context and not updated in the code followed. So it is safe to make a shadow > copy here. -- This message was sent by Atlassian JIRA (v7.6.3#76005)