helix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hu...@apache.org
Subject [helix] branch zooscalability updated: Add getShardingKeyInPath to MetadataStoreRoutingData (#817)
Date Wed, 26 Feb 2020 22:07:45 GMT
This is an automated email from the ASF dual-hosted git repository.

hulee pushed a commit to branch zooscalability
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/zooscalability by this push:
     new 478c60a  Add getShardingKeyInPath to MetadataStoreRoutingData (#817)
478c60a is described below

commit 478c60a8ec7ea0632c7c6ffa27c3394befdcc3ee
Author: Neal Sun <nealsun.0428@gmail.com>
AuthorDate: Wed Feb 26 14:07:39 2020 -0800

    Add getShardingKeyInPath to MetadataStoreRoutingData (#817)
    
    Add getShardingKeyInPath to MetadataStoreRoutingData
---
 .../datamodel/MetadataStoreRoutingData.java        | 11 ++++++++
 .../helix/msdcommon/datamodel/TrieRoutingData.java | 14 ++++++++++
 .../msdcommon/datamodel/TestTrieRoutingData.java   | 31 ++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/MetadataStoreRoutingData.java
b/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/MetadataStoreRoutingData.java
index 2bab8c7..25e5c7e 100644
--- a/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/MetadataStoreRoutingData.java
+++ b/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/MetadataStoreRoutingData.java
@@ -22,6 +22,7 @@ package org.apache.helix.msdcommon.datamodel;
 import java.util.Map;
 import java.util.NoSuchElementException;
 
+
 public interface MetadataStoreRoutingData {
   /**
    * Given a path, return all the "metadata store sharding key-metadata store realm address"
pairs
@@ -47,6 +48,16 @@ public interface MetadataStoreRoutingData {
   String getMetadataStoreRealm(String path) throws IllegalArgumentException, NoSuchElementException;
 
   /**
+   * Given a path, return the sharding key contained in the path. If the path doesn't contain
a
+   * sharding key, throw NoSuchElementException.
+   * @param path - the path that may contain a sharding key
+   * @return the sharding key contained in the path
+   * @throws IllegalArgumentException - when the path is invalid
+   * @throws NoSuchElementException - when the path doesn't contain a sharding key
+   */
+  String getShardingKeyInPath(String path) throws IllegalArgumentException, NoSuchElementException;
+
+  /**
    * Check if the provided sharding key can be inserted to the routing data. The insertion
is
    * invalid if: 1. the sharding key is a parent key to an existing sharding key; 2. the
sharding
    * key has a parent key that is an existing sharding key; 3. the sharding key already exists.
In
diff --git a/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/TrieRoutingData.java
b/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/TrieRoutingData.java
index 7a05089..0f53c23 100644
--- a/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/TrieRoutingData.java
+++ b/metadata-store-directory-common/src/main/java/org/apache/helix/msdcommon/datamodel/TrieRoutingData.java
@@ -98,6 +98,20 @@ public class TrieRoutingData implements MetadataStoreRoutingData {
     return node.getRealmAddress();
   }
 
+  public String getShardingKeyInPath(String path)
+      throws IllegalArgumentException, NoSuchElementException {
+    if (!ZkValidationUtil.isPathValid(path)) {
+      throw new IllegalArgumentException("Provided path is not a valid Zookeeper path: "
+ path);
+    }
+
+    TrieNode node = getLongestPrefixNodeAlongPath(path);
+    if (!node.isShardingKey()) {
+      throw new NoSuchElementException(
+          "No sharding key found within the provided path. Path: " + path);
+    }
+    return node.getPath();
+  }
+
   public boolean isShardingKeyInsertionValid(String shardingKey) {
     if (!ZkValidationUtil.isPathValid(shardingKey)) {
       throw new IllegalArgumentException(
diff --git a/metadata-store-directory-common/src/test/java/org/apache/helix/msdcommon/datamodel/TestTrieRoutingData.java
b/metadata-store-directory-common/src/test/java/org/apache/helix/msdcommon/datamodel/TestTrieRoutingData.java
index bad10a4..2dc5dfe 100644
--- a/metadata-store-directory-common/src/test/java/org/apache/helix/msdcommon/datamodel/TestTrieRoutingData.java
+++ b/metadata-store-directory-common/src/test/java/org/apache/helix/msdcommon/datamodel/TestTrieRoutingData.java
@@ -255,6 +255,37 @@ public class TestTrieRoutingData {
   }
 
   @Test(dependsOnMethods = "testConstructionNormal")
+  public void testGetShardingKeyInPath() {
+    try {
+      Assert.assertEquals(_trie.getShardingKeyInPath("/b/c/d/x/y/z"), "/b/c/d");
+    } catch (NoSuchElementException e) {
+      Assert.fail("Not expecting NoSuchElementException");
+    }
+  }
+
+  @Test(dependsOnMethods = "testConstructionNormal")
+  public void testGetShardingKeyInPathWrongPath() {
+    try {
+      _trie.getShardingKeyInPath("/x/y/z");
+      Assert.fail("Expecting NoSuchElementException");
+    } catch (NoSuchElementException e) {
+      Assert.assertTrue(
+          e.getMessage().contains("No sharding key found within the provided path. Path:
/x/y/z"));
+    }
+  }
+
+  @Test(dependsOnMethods = "testConstructionNormal")
+  public void testGetShardingKeyInPathNoLeaf() {
+    try {
+      _trie.getShardingKeyInPath("/b/c");
+      Assert.fail("Expecting NoSuchElementException");
+    } catch (NoSuchElementException e) {
+      Assert.assertTrue(
+          e.getMessage().contains("No sharding key found within the provided path. Path:
/b/c"));
+    }
+  }
+
+  @Test(dependsOnMethods = "testConstructionNormal")
   public void testIsShardingKeyInsertionValidNoSlash() {
     try {
       _trie.isShardingKeyInsertionValid("x/y/z");


Mime
View raw message