[ 
https://issues.apache.org/jira/browse/HBASE-22031?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16803304#comment-16803304
 ] 

Xu Cang commented on HBASE-22031:
---------------------------------

There are 2 ways can possibly cause issues.

Original holder of this object modifies the 'tables' or new object who is 
pointing to the shared object can modify it.

I am still open to discuss this with you, waiting for your new review as you 
mentioned above. Thanks. 

> 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, HBASE-22031.master.002.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)

Reply via email to