[
https://issues.apache.org/jira/browse/HBASE-8663?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13724453#comment-13724453
]
Jean-Daniel Cryans commented on HBASE-8663:
-------------------------------------------
Right now this jira seems pretty far from just adding a command in the shell to
list how tables are replicated :)
The original intent for the scope was being able to encode routing rules. One
implementation I had in mind was to have a kind of replication central
controller that resides outside of all the clusters. You could have a lookup
table there for all the possible routings.
Ideally you wouldn't have to maintain "tables * families" number of lists of
peers to replicate to, since if you want to remove one peer now you have to
update everything. I do understand that the current way you enable replication
on families works like this.
Also. regarding list_replicated_tables's output, I think it would be better to
group by CLUSTER, else on clusters with hundreds of tables you'd have a pretty
huge list.
> 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