You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@helix.apache.org by "Greg Brandt (JIRA)" <ji...@apache.org> on 2014/09/05 19:07:29 UTC

[jira] [Created] (HELIX-513) ZKHelixAdmin#rebalance with group uses instances from other groups

Greg Brandt created HELIX-513:
---------------------------------

             Summary: ZKHelixAdmin#rebalance with group uses instances from other groups
                 Key: HELIX-513
                 URL: https://issues.apache.org/jira/browse/HELIX-513
             Project: Apache Helix
          Issue Type: Bug
          Components: helix-core
    Affects Versions: 0.6.3, 0.7.1
            Reporter: Greg Brandt


For example, consider a cluster with one instance with tag NOT_YOURS and a resource whose ideal state has INSTANCE_GROUP_TAG=MINE. If we call

{code}
manager.rebalance("MY_CLUSTER", "MY_RESOURCE", 1, null, "MINE")
{code}

Helix will find no instances with the tag "MINE", so it will instead use all available instances in the cluster to perform the rebalance.

This has undesirable effects when groups are used for multi-tenant clusters (i.e. subsets of instances belong to individual tenants, and tenants should not share instances).

Better behavior might be to error out at the point no tagged instances are found.

{code}
  @Override
  public void rebalance(String clusterName, String resourceName, int replica, String keyPrefix,
      String group) {
    List<String> instanceNames = new LinkedList<String>();
    if (keyPrefix == null || keyPrefix.length() == 0) {
      keyPrefix = resourceName;
    }
    if (group != null && group.length() > 0) {
      instanceNames = getInstancesInClusterWithTag(clusterName, group);
    }
    if (instanceNames.size() == 0) {
      // OLD
      //logger.info("No tags found for resource " + resourceName + ", use all instances");
      //instanceNames = getInstancesInCluster(clusterName);
      //group = "";
      // NEW
      throw new IllegalStateException("No tags found for resource ...");
    } else {
      logger.info("Found instances with tag for " + resourceName + " " + instanceNames);
    }
    rebalance(clusterName, resourceName, replica, keyPrefix, instanceNames, group);
  }
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)