You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by hu...@apache.org on 2020/08/14 18:14:04 UTC
[helix] 09/12: Refactor RealmAwareZkClient code to remove duplicate
code
This is an automated email from the ASF dual-hosted git repository.
hulee pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git
commit c876649818675c546f69083cdf75cd1cb2f4351b
Author: Hunter Lee <hu...@linkedin.com>
AuthorDate: Fri Jul 24 18:38:24 2020 -0700
Refactor RealmAwareZkClient code to remove duplicate code
There was a piece of code that resolves MetadataStoreRoutingData based on RealmAwareZkConnectionConfig in all implementations of RealmAwareZkClient. This commit refactors that logic into a common static method in RealmAwareZkClient.
---
.../helix/manager/zk/GenericZkHelixApiBuilder.java | 9 +--------
.../zookeeper/api/client/RealmAwareZkClient.java | 21 +++++++++++++++++++++
.../constant/RoutingSystemPropertyKeys.java | 6 ++++--
.../zookeeper/impl/client/DedicatedZkClient.java | 13 +------------
.../zookeeper/impl/client/FederatedZkClient.java | 13 +------------
.../helix/zookeeper/impl/client/SharedZkClient.java | 13 +------------
6 files changed, 29 insertions(+), 46 deletions(-)
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/GenericZkHelixApiBuilder.java b/helix-core/src/main/java/org/apache/helix/manager/zk/GenericZkHelixApiBuilder.java
index 1a4a69b..0447eee 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/GenericZkHelixApiBuilder.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/GenericZkHelixApiBuilder.java
@@ -200,15 +200,8 @@ public abstract class GenericZkHelixApiBuilder<B extends GenericZkHelixApiBuilde
private String resolveZkAddressWithShardingKey(
RealmAwareZkClient.RealmAwareZkConnectionConfig connectionConfig)
throws InvalidRoutingDataException {
- boolean isRoutingDataSourceEndpointSet =
- connectionConfig.getRoutingDataSourceEndpoint() != null && !connectionConfig
- .getRoutingDataSourceEndpoint().isEmpty();
MetadataStoreRoutingData routingData =
- isRoutingDataSourceEndpointSet ? RoutingDataManager.getInstance()
- .getMetadataStoreRoutingData(
- RoutingDataReaderType.lookUp(connectionConfig.getRoutingDataSourceType()),
- connectionConfig.getRoutingDataSourceEndpoint())
- : RoutingDataManager.getInstance().getMetadataStoreRoutingData();
+ RealmAwareZkClient.getMetadataStoreRoutingData(connectionConfig);
return routingData.getMetadataStoreRealm(connectionConfig.getZkRealmShardingKey());
}
}
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/api/client/RealmAwareZkClient.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/api/client/RealmAwareZkClient.java
index e8c91f1..d006420 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/api/client/RealmAwareZkClient.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/api/client/RealmAwareZkClient.java
@@ -23,7 +23,10 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.helix.msdcommon.constant.MetadataStoreRoutingConstants;
+import org.apache.helix.msdcommon.datamodel.MetadataStoreRoutingData;
+import org.apache.helix.msdcommon.exception.InvalidRoutingDataException;
import org.apache.helix.zookeeper.constant.RoutingDataReaderType;
+import org.apache.helix.zookeeper.routing.RoutingDataManager;
import org.apache.helix.zookeeper.zkclient.DataUpdater;
import org.apache.helix.zookeeper.zkclient.IZkChildListener;
import org.apache.helix.zookeeper.zkclient.IZkDataListener;
@@ -640,4 +643,22 @@ public interface RealmAwareZkClient {
dataListener);
}
}
+
+ /**
+ * Based on the RealmAwareZkConnectionConfig given, return MetadataStoreRoutingData.
+ * @param connectionConfig
+ * @return
+ */
+ static MetadataStoreRoutingData getMetadataStoreRoutingData(
+ RealmAwareZkConnectionConfig connectionConfig) throws InvalidRoutingDataException {
+ String routingDataSourceEndpoint = connectionConfig.getRoutingDataSourceEndpoint();
+ if (routingDataSourceEndpoint == null || routingDataSourceEndpoint.isEmpty()) {
+ // If endpoint is not given explicitly, use HTTP and the endpoint set in System Properties
+ return RoutingDataManager.getInstance().getMetadataStoreRoutingData();
+ } else {
+ return RoutingDataManager.getInstance().getMetadataStoreRoutingData(
+ RoutingDataReaderType.lookUp(connectionConfig.getRoutingDataSourceType()),
+ routingDataSourceEndpoint);
+ }
+ }
}
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/constant/RoutingSystemPropertyKeys.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/constant/RoutingSystemPropertyKeys.java
index 23b8ebc..a57075b 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/constant/RoutingSystemPropertyKeys.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/constant/RoutingSystemPropertyKeys.java
@@ -25,7 +25,9 @@ package org.apache.helix.zookeeper.constant;
public class RoutingSystemPropertyKeys {
/**
- * This static constant is used to refer to which implementation of RoutingDataReader to use.
+ * If enabled, FederatedZkClient (multiZkClient) will invalidate the cached routing data and
+ * re-read the routing data from the routing data source upon ZK path sharding key cache miss.
*/
- public static final String ROUTING_DATA_READER_TYPE = "routing.data.reader.type";
+ public static final String UPDATE_ROUTING_DATA_ON_CACHE_MISS =
+ "update.routing.data.on.cache.miss.enabled";
}
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/DedicatedZkClient.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/DedicatedZkClient.java
index 4527fe8..cc37853 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/DedicatedZkClient.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/DedicatedZkClient.java
@@ -80,18 +80,7 @@ public class DedicatedZkClient implements RealmAwareZkClient {
}
_connectionConfig = connectionConfig;
_clientConfig = clientConfig;
-
- // Get MetadataStoreRoutingData
- String routingDataSourceEndpoint = connectionConfig.getRoutingDataSourceEndpoint();
- if (routingDataSourceEndpoint == null || routingDataSourceEndpoint.isEmpty()) {
- // If endpoint is not given explicitly, use HTTP and the endpoint set in System Properties
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData();
- } else {
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData(
- RoutingDataReaderType.lookUp(connectionConfig.getRoutingDataSourceType()),
- routingDataSourceEndpoint);
- }
-
+ _metadataStoreRoutingData = RealmAwareZkClient.getMetadataStoreRoutingData(connectionConfig);
_zkRealmShardingKey = connectionConfig.getZkRealmShardingKey();
if (_zkRealmShardingKey == null || _zkRealmShardingKey.isEmpty()) {
throw new IllegalArgumentException(
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/FederatedZkClient.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/FederatedZkClient.java
index 11d0291..679d4e7 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/FederatedZkClient.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/FederatedZkClient.java
@@ -93,18 +93,7 @@ public class FederatedZkClient implements RealmAwareZkClient {
if (clientConfig == null) {
throw new IllegalArgumentException("RealmAwareZkClientConfig cannot be null!");
}
-
- // Get MetadataStoreRoutingData
- String routingDataSourceEndpoint = connectionConfig.getRoutingDataSourceEndpoint();
- if (routingDataSourceEndpoint == null || routingDataSourceEndpoint.isEmpty()) {
- // If endpoint is not given explicitly, use HTTP and the endpoint set in System Properties
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData();
- } else {
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData(
- RoutingDataReaderType.lookUp(connectionConfig.getRoutingDataSourceType()),
- routingDataSourceEndpoint);
- }
-
+ _metadataStoreRoutingData = RealmAwareZkClient.getMetadataStoreRoutingData(connectionConfig);
_isClosed = false;
_connectionConfig = connectionConfig;
_clientConfig = clientConfig;
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/SharedZkClient.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/SharedZkClient.java
index 14a4794..bcc4b12 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/SharedZkClient.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/impl/client/SharedZkClient.java
@@ -74,23 +74,12 @@ public class SharedZkClient implements RealmAwareZkClient {
_connectionConfig = connectionConfig;
_clientConfig = clientConfig;
- // Get MetadataStoreRoutingData
- String routingDataSourceEndpoint = connectionConfig.getRoutingDataSourceEndpoint();
- if (routingDataSourceEndpoint == null || routingDataSourceEndpoint.isEmpty()) {
- // If endpoint is not given explicitly, use HTTP and the endpoint set in System Properties
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData();
- } else {
- _metadataStoreRoutingData = RoutingDataManager.getInstance().getMetadataStoreRoutingData(
- RoutingDataReaderType.lookUp(connectionConfig.getRoutingDataSourceType()),
- routingDataSourceEndpoint);
- }
-
_zkRealmShardingKey = connectionConfig.getZkRealmShardingKey();
if (_zkRealmShardingKey == null || _zkRealmShardingKey.isEmpty()) {
throw new IllegalArgumentException(
"RealmAwareZkConnectionConfig's ZK realm sharding key cannot be null or empty for SharedZkClient!");
}
-
+ _metadataStoreRoutingData = RealmAwareZkClient.getMetadataStoreRoutingData(connectionConfig);
// Get the ZkRealm address based on the ZK path sharding key
String zkRealmAddress = _metadataStoreRoutingData.getMetadataStoreRealm(_zkRealmShardingKey);
if (zkRealmAddress == null || zkRealmAddress.isEmpty()) {