You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ka...@apache.org on 2015/05/02 22:12:43 UTC
helix git commit: [HELIX-591] Provide getResourcesWithTag in
HelixAdmin to retrieve all resources with a group tag.
Repository: helix
Updated Branches:
refs/heads/helix-0.6.x e94a9f5f9 -> 8a279a366
[HELIX-591] Provide getResourcesWithTag in HelixAdmin to retrieve all resources with a group tag.
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/8a279a36
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/8a279a36
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/8a279a36
Branch: refs/heads/helix-0.6.x
Commit: 8a279a366d4e6c43366a1c5867a02f26768e5627
Parents: e94a9f5
Author: Lei Xia <lx...@linkedin.com>
Authored: Mon Apr 27 13:36:37 2015 -0700
Committer: Lei Xia <lx...@linkedin.com>
Committed: Mon Apr 27 13:36:37 2015 -0700
----------------------------------------------------------------------
.../main/java/org/apache/helix/HelixAdmin.java | 7 +++
.../apache/helix/manager/zk/ZKHelixAdmin.java | 18 +++++++
.../org/apache/helix/tools/ClusterSetup.java | 25 +++++++--
.../helix/manager/zk/TestZkHelixAdmin.java | 54 +++++++++++++++++++-
4 files changed, 98 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/8a279a36/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/HelixAdmin.java b/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
index 7bb4c3a..47ff113 100644
--- a/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
+++ b/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
@@ -58,6 +58,13 @@ public interface HelixAdmin {
List<String> getResourcesInCluster(String clusterName);
/**
+ * Get a list of resources in a cluster with a tag
+ * @param clusterName
+ * @param tag
+ */
+ List<String> getResourcesInClusterWithTag(String clusterName, String tag);
+
+ /**
* Add a cluster
* @param clusterName
* @return true if successfully created, or if cluster already exists
http://git-wip-us.apache.org/repos/asf/helix/blob/8a279a36/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
index 89fdab7..be0d17a 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
@@ -669,6 +669,24 @@ public class ZKHelixAdmin implements HelixAdmin {
}
@Override
+ public List<String> getResourcesInClusterWithTag(String clusterName, String tag) {
+ List<String> resourcesWithTag = new ArrayList<String>();
+
+ HelixDataAccessor accessor =
+ new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_zkClient));
+ Builder keyBuilder = accessor.keyBuilder();
+
+ for (String resourceName : getResourcesInCluster(clusterName)) {
+ IdealState is = accessor.getProperty(keyBuilder.idealStates(resourceName));
+ if (is != null && is.getInstanceGroupTag() != null && is.getInstanceGroupTag().equals(tag)) {
+ resourcesWithTag.add(resourceName);
+ }
+ }
+
+ return resourcesWithTag;
+ }
+
+ @Override
public IdealState getResourceIdealState(String clusterName, String resourceName) {
HelixDataAccessor accessor =
new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_zkClient));
http://git-wip-us.apache.org/repos/asf/helix/blob/8a279a36/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
index 4234ce1..3a06a2c 100644
--- a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
+++ b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
@@ -88,6 +88,7 @@ public class ClusterSetup {
public static final String expandCluster = "expandCluster";
public static final String expandResource = "expandResource";
public static final String mode = "mode";
+ public static final String tag = "tag";
public static final String instanceGroupTag = "instanceGroupTag";
public static final String bucketSize = "bucketSize";
public static final String resourceKeyPrefix = "key";
@@ -602,7 +603,7 @@ public class ClusterSetup {
.withDescription("List resources hosted in a cluster").create();
listResourceOption.setArgs(1);
listResourceOption.setRequired(false);
- listResourceOption.setArgName("clusterName");
+ listResourceOption.setArgName("clusterName <-tag TagValue>");
Option listInstancesOption =
OptionBuilder.withLongOpt(listInstances).withDescription("List Instances in a cluster")
@@ -666,6 +667,13 @@ public class ClusterSetup {
resourceModeOption.setRequired(false);
resourceModeOption.setArgName("IdealState mode");
+ Option resourceTagOption =
+ OptionBuilder.withLongOpt(tag)
+ .withDescription("Specify resource tag, used with listResources command").create();
+ resourceTagOption.setArgs(1);
+ resourceTagOption.setRequired(false);
+ resourceTagOption.setArgName("tag");
+
Option resourceBucketSizeOption =
OptionBuilder.withLongOpt(bucketSize)
.withDescription("Specify size of a bucket, used with addResourceGroup command")
@@ -907,6 +915,7 @@ public class ClusterSetup {
group.addOption(rebalanceOption);
group.addOption(addResourceOption);
group.addOption(resourceModeOption);
+ group.addOption(resourceTagOption);
group.addOption(resourceBucketSizeOption);
group.addOption(maxPartitionsPerNodeOption);
group.addOption(expandResourceOption);
@@ -1096,10 +1105,18 @@ public class ClusterSetup {
if (cmd.hasOption(listResources)) {
String clusterName = cmd.getOptionValue(listResources);
- List<String> resourceNames =
- setupTool.getClusterManagementTool().getResourcesInCluster(clusterName);
+ List<String> resourceNames = null;
+ if (cmd.hasOption(tag)) {
+ String tagValue = cmd.getOptionValues(tag)[0];
+ resourceNames = setupTool.getClusterManagementTool()
+ .getResourcesInClusterWithTag(clusterName, tagValue);
+ System.out.println(
+ "Existing resources in cluster " + clusterName + " with tag " + tagValue + " :");
+ } else {
+ resourceNames = setupTool.getClusterManagementTool().getResourcesInCluster(clusterName);
+ System.out.println("Existing resources in cluster " + clusterName + ":");
+ }
- System.out.println("Existing resources in cluster " + clusterName + ":");
for (String resourceName : resourceNames) {
System.out.println(resourceName);
}
http://git-wip-us.apache.org/repos/asf/helix/blob/8a279a36/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java
index cfdf1a3..bbaca31 100644
--- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java
+++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkHelixAdmin.java
@@ -30,14 +30,12 @@ import org.apache.helix.model.ClusterConstraints;
import org.apache.helix.model.ClusterConstraints.ConstraintAttribute;
import org.apache.helix.model.ClusterConstraints.ConstraintType;
import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
-import org.apache.helix.model.ConfigScope;
import org.apache.helix.model.ConstraintItem;
import org.apache.helix.model.ExternalView;
import org.apache.helix.model.HelixConfigScope;
import org.apache.helix.model.IdealState;
import org.apache.helix.model.InstanceConfig;
import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.builder.ConfigScopeBuilder;
import org.apache.helix.model.builder.ConstraintItemBuilder;
import org.apache.helix.model.builder.HelixConfigScopeBuilder;
import org.apache.helix.tools.StateModelConfigGenerator;
@@ -314,4 +312,56 @@ public class TestZkHelixAdmin extends ZkUnitTestBase {
Assert.assertTrue(idealState.isEnabled());
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
+
+ @Test
+ public void testGetResourcesWithTag() {
+ String TEST_TAG = "TestTAG";
+
+ final String clusterName = getShortClassName();
+ String rootPath = "/" + clusterName;
+ if (_gZkClient.exists(rootPath)) {
+ _gZkClient.deleteRecursive(rootPath);
+ }
+
+ HelixAdmin tool = new ZKHelixAdmin(_gZkClient);
+ tool.addCluster(clusterName, true);
+ Assert.assertTrue(ZKUtil.isClusterSetup(clusterName, _gZkClient));
+
+ tool.addStateModelDef(clusterName, "OnlineOffline",
+ new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()));
+
+ for (int i = 0; i < 4; i++) {
+ String instanceName = "host" + i + "_9999";
+ InstanceConfig config = new InstanceConfig(instanceName);
+ config.setHostName("host" + i);
+ config.setPort("9999");
+ // set tag to two instances
+ if (i < 2) {
+ config.addTag(TEST_TAG);
+ }
+ tool.addInstance(clusterName, config);
+ tool.enableInstance(clusterName, instanceName, true);
+ String path = PropertyPathConfig.getPath(PropertyType.INSTANCES, clusterName, instanceName);
+ AssertJUnit.assertTrue(_gZkClient.exists(path));
+ }
+
+ for (int i = 0; i < 4; i++) {
+ String resourceName = "database_" + i;
+ IdealState is = new IdealState(resourceName);
+ is.setStateModelDefRef("OnlineOffline");
+ is.setNumPartitions(2);
+ is.setRebalanceMode(IdealState.RebalanceMode.FULL_AUTO);
+ is.setReplicas("1");
+ is.enable(true);
+ if (i < 2) {
+ is.setInstanceGroupTag(TEST_TAG);
+ }
+ tool.addResource(clusterName, resourceName, is);
+ }
+
+ List<String> allResources = tool.getResourcesInCluster(clusterName);
+ List<String> resourcesWithTag = tool.getResourcesInClusterWithTag(clusterName, TEST_TAG);
+ AssertJUnit.assertEquals(allResources.size(), 4);
+ AssertJUnit.assertEquals(resourcesWithTag.size(), 2);
+ }
}