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 <[email protected]> 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()) {
