[
https://issues.apache.org/jira/browse/HBASE-8663?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13724057#comment-13724057
]
Demai Ni commented on HBASE-8663:
---------------------------------
[~ctrezzo] thanks for the suggestions. Although the replicationMaster
attribute is very useful, you are right that it is quite tricky on both of the
points: 1) multiple Masters 2) and synchronous call across clusters.
the first one, can be addressed by change the attribute as an array(and I have
another idea about leveraging the existing replication_scope...)
the 2nd one is harder. As of today, even the replication setup is done
manually instead of synchronous call without validation. For example 1) the
add_peer command won't check whether peer ZK quorum value, 2) that Users has to
manually create the table(with same schema) on the slaver cluster. Considering
many replication values are setup manually and not validated, maybe we are not
ready for a synchronous call(for DDL operations) across clusters. Instead, a
healthy check tool is more realistic?
With that, I am considering your suggestion to reduce the scope of this jira to
list the tables replicated from current cluster, for now only use 'global' for
target-cluster, but can be easily extended when we support none-global
replication. The command will be look like
{code}
hbase(main):001:0> list_replicated_tables
TABLE COLUMNFAMILY TARGET_CLUSTER
scores course MASTER: global
t3_dn cf1 MASTER: global
usertable family MASTER: global
{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
>
>
> 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