[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455463816



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -501,6 +511,32 @@ private void checkClusterKey(String clusterKey) throws 
DoNotRetryIOException {
 }
   }
 
+  private void checkClusterId(String clusterKey) throws DoNotRetryIOException {
+String peerClusterId = "";
+try {
+  // Create the peer cluster config for get peer cluster id
+  Configuration peerConf = HBaseConfiguration.createClusterConf(conf, 
clusterKey);
+  ZKWatcher zkWatcher =
+new ZKWatcher(peerConf, this + "check-peer-cluster-key", new 
Abortable() {
+  @Override public void abort(String why, Throwable e) {
+  }
+
+  @Override public boolean isAborted() {
+return false;
+  }
+});
+  peerClusterId = ZKClusterId.readClusterIdZNode(zkWatcher);
+} catch (IOException | KeeperException e) {
+  throw new DoNotRetryIOException("Can't get peerClusterId for 
clusterKey=" + clusterKey, e);
+}
+// In rare case, zookeeper setting may be messed up. That leads to the 
incorrect
+// peerClusterId value, which is the same as the source clusterId
+if (clusterId.equals(peerClusterId)) {

Review comment:
   The peerClusterId was not initialized in the constructor method of 
ReplicationEndpoint. So ReplicationEndpoint#getPeerUUID() will get null here.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455463882



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -501,6 +511,32 @@ private void checkClusterKey(String clusterKey) throws 
DoNotRetryIOException {
 }
   }
 
+  private void checkClusterId(String clusterKey) throws DoNotRetryIOException {
+String peerClusterId = "";
+try {
+  // Create the peer cluster config for get peer cluster id
+  Configuration peerConf = HBaseConfiguration.createClusterConf(conf, 
clusterKey);
+  ZKWatcher zkWatcher =
+new ZKWatcher(peerConf, this + "check-peer-cluster-key", new 
Abortable() {
+  @Override public void abort(String why, Throwable e) {
+  }
+
+  @Override public boolean isAborted() {
+return false;
+  }
+});
+  peerClusterId = ZKClusterId.readClusterIdZNode(zkWatcher);
+} catch (IOException | KeeperException e) {
+  throw new DoNotRetryIOException("Can't get peerClusterId for 
clusterKey=" + clusterKey, e);
+}

Review comment:
   Good catch. Let me fix this.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455463412



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -337,25 +347,21 @@ public void removeAllQueuesAndHFileRefs(String peerId) 
throws ReplicationExcepti
 
   private void checkPeerConfig(ReplicationPeerConfig peerConfig) throws 
DoNotRetryIOException {
 String replicationEndpointImpl = peerConfig.getReplicationEndpointImpl();
-boolean checkClusterKey = true;
+ReplicationEndpoint endpoint = null;
 if (!StringUtils.isBlank(replicationEndpointImpl)) {
-  // try creating a instance
-  ReplicationEndpoint endpoint;
   try {
+// try creating a instance
 endpoint = Class.forName(replicationEndpointImpl)
   
.asSubclass(ReplicationEndpoint.class).getDeclaredConstructor().newInstance();
   } catch (Throwable e) {
 throw new DoNotRetryIOException(
   "Can not instantiate configured replication endpoint class=" + 
replicationEndpointImpl,
   e);
   }
-  // do not check cluster key if we are not 
HBaseInterClusterReplicationEndpoint
-  if (!(endpoint instanceof HBaseInterClusterReplicationEndpoint)) {
-checkClusterKey = false;
-  }
 }
-if (checkClusterKey) {
-  checkClusterKey(peerConfig.getClusterKey());
+// Default is HBaseInterClusterReplicationEndpoint and only it need to 
check cluster key
+if (endpoint == null || endpoint instanceof 
HBaseInterClusterReplicationEndpoint) {

Review comment:
   For default case, it didn't new a ReplicationEndpoint. There are a check 
!StringUtils.isBlank(replicationEndpointImpl).





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455434266



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -493,12 +499,35 @@ private void 
checkConfiguredWALEntryFilters(ReplicationPeerConfig peerConfig)
 }
   }
 
-  private void checkClusterKey(String clusterKey) throws DoNotRetryIOException 
{
+  private void checkClusterKeyForHBaseInterClusterReplicationEndpoint(String 
clusterKey)
+throws DoNotRetryIOException {
 try {
   ZKConfig.validateClusterKey(clusterKey);
 } catch (IOException e) {
   throw new DoNotRetryIOException("Invalid cluster key: " + clusterKey, e);
 }
+String peerClusterId = "";
+try {
+  Configuration otherConf = HBaseConfiguration.createClusterConf(conf, 
clusterKey);
+  ZKWatcher zkWatcher =
+new ZKWatcher(otherConf, this + "check-peer-cluster-key", new 
Abortable() {
+  @Override public void abort(String why, Throwable e) {
+  }
+
+  @Override public boolean isAborted() {
+return false;
+  }
+});
+  peerClusterId = ZKClusterId.readClusterIdZNode(zkWatcher);

Review comment:
   See the changed code in  
hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455430870



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -337,25 +347,21 @@ public void removeAllQueuesAndHFileRefs(String peerId) 
throws ReplicationExcepti
 
   private void checkPeerConfig(ReplicationPeerConfig peerConfig) throws 
DoNotRetryIOException {
 String replicationEndpointImpl = peerConfig.getReplicationEndpointImpl();
-boolean checkClusterKey = true;
+ReplicationEndpoint endpoint = null;
 if (!StringUtils.isBlank(replicationEndpointImpl)) {
-  // try creating a instance
-  ReplicationEndpoint endpoint;
   try {
+// try creating a instance
 endpoint = Class.forName(replicationEndpointImpl)
   
.asSubclass(ReplicationEndpoint.class).getDeclaredConstructor().newInstance();
   } catch (Throwable e) {
 throw new DoNotRetryIOException(
   "Can not instantiate configured replication endpoint class=" + 
replicationEndpointImpl,
   e);
   }
-  // do not check cluster key if we are not 
HBaseInterClusterReplicationEndpoint
-  if (!(endpoint instanceof HBaseInterClusterReplicationEndpoint)) {
-checkClusterKey = false;
-  }
 }
-if (checkClusterKey) {
-  checkClusterKey(peerConfig.getClusterKey());
+// Default is HBaseInterClusterReplicationEndpoint and only it need to 
check cluster key
+if (endpoint == null || endpoint instanceof 
HBaseInterClusterReplicationEndpoint) {

Review comment:
   canReplicateToSameCluster() was added onlt for 
HBaseInterClusterReplicationEndpoint. But checked the code again, it was added 
to ReplicationEndpoint interface now and it is IA.Replication. So maybe 
override by user's plugglable ReplicationEndpoiint. Let me update the code to 
use canReplicateToSameCluster() again.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455427724



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -493,12 +499,35 @@ private void 
checkConfiguredWALEntryFilters(ReplicationPeerConfig peerConfig)
 }
   }
 
-  private void checkClusterKey(String clusterKey) throws DoNotRetryIOException 
{
+  private void checkClusterKeyForHBaseInterClusterReplicationEndpoint(String 
clusterKey)
+throws DoNotRetryIOException {
 try {
   ZKConfig.validateClusterKey(clusterKey);
 } catch (IOException e) {
   throw new DoNotRetryIOException("Invalid cluster key: " + clusterKey, e);
 }
+String peerClusterId = "";

Review comment:
   No, this fetch the peer cluster id.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [hbase] infraio commented on a change in pull request #2071: HBASE-24743 Reject to add a peer which replicate to itself earlier

2020-07-15 Thread GitBox


infraio commented on a change in pull request #2071:
URL: https://github.com/apache/hbase/pull/2071#discussion_r455427867



##
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java
##
@@ -493,12 +499,35 @@ private void 
checkConfiguredWALEntryFilters(ReplicationPeerConfig peerConfig)
 }
   }
 
-  private void checkClusterKey(String clusterKey) throws DoNotRetryIOException 
{
+  private void checkClusterKeyForHBaseInterClusterReplicationEndpoint(String 
clusterKey)
+throws DoNotRetryIOException {
 try {
   ZKConfig.validateClusterKey(clusterKey);
 } catch (IOException e) {
   throw new DoNotRetryIOException("Invalid cluster key: " + clusterKey, e);
 }
+String peerClusterId = "";
+try {
+  Configuration otherConf = HBaseConfiguration.createClusterConf(conf, 
clusterKey);
+  ZKWatcher zkWatcher =
+new ZKWatcher(otherConf, this + "check-peer-cluster-key", new 
Abortable() {
+  @Override public void abort(String why, Throwable e) {
+  }
+
+  @Override public boolean isAborted() {
+return false;
+  }
+});
+  peerClusterId = ZKClusterId.readClusterIdZNode(zkWatcher);

Review comment:
   Not right. This fetch peer cluster id.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org