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)