[
https://issues.apache.org/jira/browse/HBASE-14866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15038429#comment-15038429
]
Gary Helmling commented on HBASE-14866:
---------------------------------------
bq. Should transformClusterKey just use standardizeZKQuorumServerString rather
than having two different cases?
Sure, I can clean that up along the way.
bq. Seems like the entry for shouldbemissing will have two prefixes. Is that
intended?
Thanks, nice catch! I'll fix that.
bq. why not move buildZKQuorumServerString and standardizeZKQuorumServerString
into ZKUtil?
ZKUtil deals mostly with ZK related operations (adding, watching znodes).
Building a quorum string is how we handle multiple ZK configs in a
Configuration. So it seems more configuration related than ZK operation
related to me. In addition ZKUtil is in hbase-client so we can't use anything
in it from hbase-common. We could move everything, including
createClusterConf(), to ZKUtil, but that seems a weird home for it to me, since
the original problem was a failure to handle additional configuration
properties (beyond ZK quorum config) for target/destination clusters.
bq. Most of these changes to HBaseConfiguration seem to be very replication
specific. Should we have a different class for replication based configuration,
so that HBaseConfiguration doesn't get too unwieldy?
bq. Agreed. Maybe we need something like ReplicationUtils ?
These changes go beyond replication usage. This is a common problem wherever a
program needs to handle talking to two clusters with a single Configuration.
This applies to CopyTable, SyncTable and TableOutputFormat, none of which
assumes any replication configuration. By comparison, the replication code
actually abstracts the usage of these ZK configuration utilities pretty well,
except for the couple of problems in ReplicationAdmin and VerifyReplication.
In the non-replication cases, we need to be able to handle: applying different
ZK quorum configurations for the different clusters, and overriding other
configuration properties (for example security-related config) for the other
clusters. {{HBaseConfiguration.createClusterConf()}} is the cleanest way I can
see of abstracting this, especially for all of the non-replication usage. This
also seems like clearly a configuration problem to me, so HBaseConfiguration
seems like the right home. That is how we handle creating new HBase
configurations everywhere (via {{HBaseConfiguration.create()}}), so this seems
analogous.
If we're worried about bloating HBaseConfiguration with the additions moved
from ZKUtil, then I could create a new util class in hbase-common to hold them,
but I think we already have a proliferation of config related methods spread
across multiple utility classes:
* ConfigurationUtils in hbase-server -- I would put the methods there, but we
need access to them from hbase-client and hbase-server, so hbase-common seems
like the right home. ConfigurationUtils is annotated public, so we can't just
move it without compatibility concerns.
* ZKUtil in hbase-client -- this class deals mostly with operations on
ZooKeeper (adding, watching znodes), so I think removing all the config methods
actually made for a cleaner separation of ZK operations vs. configuration
related manipulations. Since ZKUtil is in hbase-client we also can't depend on
it from hbase-common. We could move it to hbase-common, but that would
introduce a new dependency on ZooKeeper in hbase-common that is not currently
there.
* ZKConfig in hbase-client -- this currently deals with creating a ZK
properties based configuration for HQuorumPeer. So again moving the methods
there would be expanding what it currently handles and has the additional
problem of being in hbase-client, so createClusterConf() would have to move
there as well.
It seems to me like we have two best options:
* move the ZK related config options to a new private util class in
hbase-common. This could even be ZKConfig, moved from hbase-client, since it's
private. It would be an expansion of it's current reponsibilities, but doesn't
seem too bad.
* go back to the original targeted fixes to ReplicationAdmin and
VerifyReplication, since those are the actual problems I'm trying to solve.
What do you guys think? I'll hold off on further changes to this until we get
some consensus.
> VerifyReplication should use peer configuration in peer connection
> ------------------------------------------------------------------
>
> Key: HBASE-14866
> URL: https://issues.apache.org/jira/browse/HBASE-14866
> Project: HBase
> Issue Type: Improvement
> Components: Replication
> Reporter: Gary Helmling
> Assignee: Gary Helmling
> Fix For: 2.0.0, 1.2.0, 1.3.0
>
> Attachments: HBASE-14866.patch, HBASE-14866_v1.patch,
> hbase-14866-v4.patch, hbase-14866_v2.patch, hbase-14866_v3.patch
>
>
> VerifyReplication uses the replication peer's configuration to construct the
> ZooKeeper quorum address for the peer connection. However, other
> configuration properties in the peer's configuration are dropped. It should
> merge all configuration properties from the {{ReplicationPeerConfig}} when
> creating the peer connection and obtaining a credentials for the peer cluster.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)