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:13:59 UTC

[helix] 04/12: Change interface for RoutingDataReader

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 3bfc766e863e4a132f61786e09dcf5aad9cb3ea2
Author: Hunter Lee <hu...@linkedin.com>
AuthorDate: Wed Jul 22 11:08:47 2020 -0700

    Change interface for RoutingDataReader
    
    This commit changes the interface for RoutingDataReader in order to accommodate various types of routing data source.
---
 .../helix/zookeeper/routing/HttpRoutingDataReader.java  | 17 -----------------
 .../routing/HttpZkFallbackRoutingDataReader.java        |  4 ++++
 .../helix/zookeeper/routing/RoutingDataManager.java     | 13 ++++++-------
 .../helix/zookeeper/routing/RoutingDataReader.java      | 12 ++++++++++--
 .../helix/zookeeper/routing/ZkRoutingDataReader.java    |  4 ++++
 .../routing/TestHttpZkFallbackRoutingDataReader.java    |  4 ++++
 .../zookeeper/routing/TestZkRoutingDataReader.java      |  4 ++++
 .../helix/zookeeper/util/TestRoutingDataManager.java    | 15 ++++++++-------
 8 files changed, 40 insertions(+), 33 deletions(-)

diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpRoutingDataReader.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpRoutingDataReader.java
index 4ef9881..34f5259 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpRoutingDataReader.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpRoutingDataReader.java
@@ -27,9 +27,6 @@ import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.helix.msdcommon.constant.MetadataStoreRoutingConstants;
-import org.apache.helix.msdcommon.datamodel.MetadataStoreRoutingData;
-import org.apache.helix.msdcommon.datamodel.TrieRoutingData;
-import org.apache.helix.msdcommon.exception.InvalidRoutingDataException;
 import org.apache.helix.zookeeper.exception.MultiZkException;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
@@ -49,20 +46,6 @@ public class HttpRoutingDataReader implements RoutingDataReader {
   private static final int DEFAULT_HTTP_TIMEOUT_IN_MS = 5000;
 
   /**
-   * Returns an object form of metadata store routing data.
-   * @param endpoint
-   * @return
-   */
-  @Override
-  public MetadataStoreRoutingData getMetadataStoreRoutingData(String endpoint) {
-    try {
-      return new TrieRoutingData(getRawRoutingData(endpoint));
-    } catch (InvalidRoutingDataException e) {
-      throw new MultiZkException(e);
-    }
-  }
-
-  /**
    * Returns a map form of metadata store routing data.
    * The map fields stand for metadata store realm address (key), and a corresponding list of ZK
    * path sharding keys (key).
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpZkFallbackRoutingDataReader.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpZkFallbackRoutingDataReader.java
new file mode 100644
index 0000000..1b4713c
--- /dev/null
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/HttpZkFallbackRoutingDataReader.java
@@ -0,0 +1,4 @@
+package org.apache.helix.zookeeper.routing;
+
+public class HttpZkFallbackRoutingDataReader {
+}
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataManager.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataManager.java
index aa3986d..e489088 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataManager.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataManager.java
@@ -153,17 +153,13 @@ public class RoutingDataManager {
    */
   private static RoutingDataReader resolveRoutingDataReader(
       RoutingDataReaderType routingDataReaderType) {
-    // RoutingDataReaderType.HTTP by default if not found
-    routingDataReaderType =
-        routingDataReaderType == null ? RoutingDataReaderType.HTTP : routingDataReaderType;
-
     // Instantiate an instance of routing data reader using the type
     try {
       return (RoutingDataReader) Class.forName(routingDataReaderType.getClassName()).newInstance();
     } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
       throw new MultiZkException(
-          "RoutingDataManager: failed to instantiate RoutingDataReader! ReaderType className: "
-              + routingDataReaderType.getClassName(), e);
+          "RoutingDataManager: failed to instantiate RoutingDataReader! RoutingDataReaderType: "
+              + routingDataReaderType, e);
     }
   }
 
@@ -175,6 +171,9 @@ public class RoutingDataManager {
    */
   private static String getRoutingDataCacheKey(RoutingDataReaderType routingDataReaderType,
       String endpoint) {
+    if (routingDataReaderType == null) {
+      throw new MultiZkException("RoutingDataManager: RoutingDataReaderType cannot be null!");
+    }
     return routingDataReaderType.name() + "_" + endpoint;
   }
-}
+}
\ No newline at end of file
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataReader.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataReader.java
index 9e6c258..a171855 100644
--- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataReader.java
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/RoutingDataReader.java
@@ -23,16 +23,24 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.helix.msdcommon.datamodel.MetadataStoreRoutingData;
+import org.apache.helix.msdcommon.datamodel.TrieRoutingData;
+import org.apache.helix.msdcommon.exception.InvalidRoutingDataException;
+import org.apache.helix.zookeeper.exception.MultiZkException;
 
 
 public interface RoutingDataReader {
-
   /**
    * Returns an object form of metadata store routing data.
    * @param endpoint
    * @return
    */
-  MetadataStoreRoutingData getMetadataStoreRoutingData(String endpoint);
+  default MetadataStoreRoutingData getMetadataStoreRoutingData(String endpoint) {
+    try {
+      return new TrieRoutingData(getRawRoutingData(endpoint));
+    } catch (InvalidRoutingDataException e) {
+      throw new MultiZkException(e);
+    }
+  }
 
   /**
    * Returns a map form of metadata store routing data.
diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/ZkRoutingDataReader.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/ZkRoutingDataReader.java
new file mode 100644
index 0000000..3db3b55
--- /dev/null
+++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/routing/ZkRoutingDataReader.java
@@ -0,0 +1,4 @@
+package org.apache.helix.zookeeper.routing;
+
+public class ZkRoutingDataReader {
+}
diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestHttpZkFallbackRoutingDataReader.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestHttpZkFallbackRoutingDataReader.java
new file mode 100644
index 0000000..85896af
--- /dev/null
+++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestHttpZkFallbackRoutingDataReader.java
@@ -0,0 +1,4 @@
+package org.apache.helix.zookeeper.routing;
+
+public class TestHttpZkFallbackRoutingDataReader {
+}
diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestZkRoutingDataReader.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestZkRoutingDataReader.java
new file mode 100644
index 0000000..68f8df4
--- /dev/null
+++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/routing/TestZkRoutingDataReader.java
@@ -0,0 +1,4 @@
+package org.apache.helix.zookeeper.routing;
+
+public class TestZkRoutingDataReader {
+}
diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/util/TestRoutingDataManager.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/util/TestRoutingDataManager.java
index e7d0c43..2fcba96 100644
--- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/util/TestRoutingDataManager.java
+++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/util/TestRoutingDataManager.java
@@ -44,20 +44,21 @@ import org.testng.annotations.Test;
 
 public class TestRoutingDataManager extends ZkTestBase {
   private MockMetadataStoreDirectoryServer _msdsServer;
-  private final String _host = "localhost";
-  private final int _port = 1991;
-  private final String _namespace = "TestRoutingDataManager";
+  private static final String HOST = "localhost";
+  private static final int PORT = 1991;
+  private static final String NAMESPACE = "TestRoutingDataManager";
+  private static final String MSDS_ENDPOINT =
+      "http://" + HOST + ":" + PORT + "/admin/v2/namespaces/" + NAMESPACE;
 
   @BeforeClass
   public void beforeClass() throws IOException {
     // Start MockMSDS
-    _msdsServer = new MockMetadataStoreDirectoryServer(_host, _port, _namespace,
+    _msdsServer = new MockMetadataStoreDirectoryServer(HOST, PORT, NAMESPACE,
         TestConstants.FAKE_ROUTING_DATA);
     _msdsServer.startServer();
 
     // Register the endpoint as a System property
-    String msdsEndpoint = "http://" + _host + ":" + _port + "/admin/v2/namespaces/" + _namespace;
-    System.setProperty(MetadataStoreRoutingConstants.MSDS_SERVER_ENDPOINT_KEY, msdsEndpoint);
+    System.setProperty(MetadataStoreRoutingConstants.MSDS_SERVER_ENDPOINT_KEY, MSDS_ENDPOINT);
   }
 
   @AfterClass
@@ -97,7 +98,7 @@ public class TestRoutingDataManager extends ZkTestBase {
 
     // Kill MSDS and restart with a new mapping
     _msdsServer.stopServer();
-    _msdsServer = new MockMetadataStoreDirectoryServer(_host, _port, _namespace, newRoutingData);
+    _msdsServer = new MockMetadataStoreDirectoryServer(HOST, PORT, NAMESPACE, newRoutingData);
     _msdsServer.startServer();
 
     // HttpRoutingDataReader should still return old data because it's static