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

Demai Ni commented on HBASE-8663:
---------------------------------

Stack and Anoop, thanks a lot for the help. I will look at the warnings. 

A question about checking 'Master cluster name'. In current patch, 
HColumnDescriptor#setReplicationMaster(replicationMaster) will just take a 
string as input and set the value, but doesn't validate it. I'd like to do some 
checking and improve the method like the following pseudocode 
{code} 
 public HColumnDescriptor setReplicationMaster(String masterCluster) {
    
    // connect to Master cluster and get its replication peers
    Configuration conf =  HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum",masterCluster);
    conf.set("hbase.replication","true");
    ReplicationAdmin ra = new ReplicationAdmin(conf);
    Map<String,String> peers = ra.listPeers();

    // check slave cluster against the peers of Master    
    Boolean found = false; 
    for (Map.Entry<String,String> entry : peers.entrySet()) {
          if 
(entry.getValue().toLowerCase().contains(slave_cluster_ZK_Quorum.toLowerCase()) 
{
             found = true; 
             break; 
          }
    }
    
    if (!found) throw exception; // not a valid master cluster name

    return setValue(REPLICATION_MASTER, masterCluster);
  }
} 

{code} 

However, two things I don't know how to code 1) it is odd to write a client 
connection code from HColumnDescriptor(maybe ok?) 2) how to get the zookeeper 
quorum inside HColumnDescriptor? Can I ask for your suggestions? many thanks

Demai 
                
> a HBase Shell command to list the tables replicated (from or to) current 
> cluster
> --------------------------------------------------------------------------------
>
>                 Key: HBASE-8663
>                 URL: https://issues.apache.org/jira/browse/HBASE-8663
>             Project: HBase
>          Issue Type: New Feature
>          Components: Replication, shell
>         Environment: clusters setup as Master and Slave for replication of 
> tables 
>            Reporter: Demai Ni
>            Assignee: Demai Ni
>            Priority: Critical
>         Attachments: HBASE-8663.PATCH, HBASE-8663-trunk-v0.patch, 
> HBASE-8663-v2.PATCH
>
>
> This jira is to provide a hbase shell command which can give user can 
> overview of the tables/columnfamilies currently being replicated. The 
> information will help system administrator for design and planning, and also 
> help application programmer to know which tables/columns should be 
> watchout(for example, not to modify a replicated columnfamily on the slave 
> cluster)
> Currently there is no easy way to tell which table(s)/columnfamily(ies) 
> replicated from or to a particular cluster. 
>       
> On Master Cluster, an indirect method can be used by combining two steps: 1) 
> $describe 'usertable'  and 2)  $list_peers to map the REPLICATION_SCOPE to 
> target(aka slave) cluster   
>       
> On slave cluster, this is no existing API/methods to list all the tables 
> replicated to this cluster.    
> Here is an example, and prototype for Master cluster
> {code: title=hbase shell command:list_replicated_tables |borderStyle=solid}
> hbase(main):001:0> list_replicated_tables
>  TABLE      COLUMNFAMILY       TARGET_CLUSTER
>  scores      course            hdtest017.svl.ibm.com:2181:/hbase
>  t3_dn       cf1               hdtest017.svl.ibm.com:2181:/hbase
>  usertable   family            hdtest017.svl.ibm.com:2181:/hbase
> 3 row(s) in 0.3380 seconds
> {code}
> {code: title=method to return all columnfamilies replicated from this cluster 
> |borderStyle=solid}
> /** 
>  * ReplicationAdmin.listRepllicated
>    * @return List of the replicated columnfamilies of this cluster for 
> display. 
>    * @throws IOException 
> */
> public List<String[]> listReplicated() throws IOException {
>     List<String[]> replicatedColFams = new ArrayList<String[]>();  
>     
>     HTableDescriptor[] tables;
>     
>     tables= this.connection.listTables();
>     
>     Map<String, String> peers = listPeers();
>     
>     for (HTableDescriptor table:tables) {
>       HColumnDescriptor[] columns = table.getColumnFamilies();
>       String tableName = table.getNameAsString();
>       for (HColumnDescriptor column: columns) {
>         int scope = column.getScope();
>                 
>         if (scope!=0) {
>           String[] replicatedEntry = new String[3]; 
>           replicatedEntry[0] = tableName;
>           replicatedEntry[1] = column.getNameAsString();
>           replicatedEntry[2] = peers.get(Integer.toString(scope));
>           replicatedColFams.add(replicatedEntry);
>         }
>       }
>     }
>     
>     return replicatedColFams;
>   }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to