helix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Francis Unson (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (HELIX-513) ZKHelixAdmin#rebalance with group uses instances from other groups
Date Thu, 11 Sep 2014 00:11:34 GMT

     [ https://issues.apache.org/jira/browse/HELIX-513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

John Francis Unson reassigned HELIX-513:
----------------------------------------

    Assignee: Zhen Zhang

> 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.7.1, 0.6.3
>            Reporter: Greg Brandt
>            Assignee: Zhen Zhang
>
> 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)

Mime
View raw message