[ 
https://issues.apache.org/jira/browse/HBASE-8663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Demai Ni updated HBASE-8663:
----------------------------

    Description: 
Thanks for the discussion and very good suggestions,I'd reduce the scope of 
this jira to only display the tables replicated from current cluster. Since 
currently no good(accurate and consistent) way to flag a table on slave 
cluster, this jira will not cover such scenario. Instead, the patch will be 
flexible enough to adapt such scenario and a follow up JIRA will be opened to 
address such situation. 

The shell command and output will be like. Since all replication is 'global', 
so no need to display the cluster name here. In the future, the command will be 
extended for other scenarios, such as 1) replicated only to selected peers or 
2) indicate table:colfam on slave side
{code: title=hbase shell command:list_replicated_tables |borderStyle=solid}
hbase(main):001:0> list_replicated_tables
TABLE:COLUMNFAMILY                           ReplicationType                    
                                                       
 t1_dn:cf1                                   GLOBAL                             
                                                       
 t2_dn:cf2                                   GLOBAL                             
                                                       
 usertable:family                            GLOBAL                             
                                                       
3 row(s) in 0.4110 seconds

hbase(main):003:0> list_replicated_tables "dn"
TABLE:COLUMNFAMILY                           ReplicationType                    
                                                       
 t1_dn:cf1                                   GLOBAL                             
                                                       
 t2_dn:cf2                                   GLOBAL                             
                                                       
2 row(s) in 0.0280 seconds
{code} 









-------------- The original JIRA description, keep as the history of discussion 
 ---------------
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}
-------------- end of original description 

  was:
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}

    
> 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
>
>
> Thanks for the discussion and very good suggestions,I'd reduce the scope of 
> this jira to only display the tables replicated from current cluster. Since 
> currently no good(accurate and consistent) way to flag a table on slave 
> cluster, this jira will not cover such scenario. Instead, the patch will be 
> flexible enough to adapt such scenario and a follow up JIRA will be opened to 
> address such situation. 
> The shell command and output will be like. Since all replication is 'global', 
> so no need to display the cluster name here. In the future, the command will 
> be extended for other scenarios, such as 1) replicated only to selected peers 
> or 2) indicate table:colfam on slave side
> {code: title=hbase shell command:list_replicated_tables |borderStyle=solid}
> hbase(main):001:0> list_replicated_tables
> TABLE:COLUMNFAMILY                           ReplicationType                  
>                                                          
>  t1_dn:cf1                                   GLOBAL                           
>                                                          
>  t2_dn:cf2                                   GLOBAL                           
>                                                          
>  usertable:family                            GLOBAL                           
>                                                          
> 3 row(s) in 0.4110 seconds
> hbase(main):003:0> list_replicated_tables "dn"
> TABLE:COLUMNFAMILY                           ReplicationType                  
>                                                          
>  t1_dn:cf1                                   GLOBAL                           
>                                                          
>  t2_dn:cf2                                   GLOBAL                           
>                                                          
> 2 row(s) in 0.0280 seconds
> {code} 
> -------------- The original JIRA description, keep as the history of 
> discussion  ---------------
> 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}
> -------------- end of original description 

--
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