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 2013/09/30 19:38:18 UTC
[2/2] git commit: [HELIX-100] IdealState compatibility with
RebalancerContext
[HELIX-100] IdealState compatibility with RebalancerContext
Project: http://git-wip-us.apache.org/repos/asf/incubator-helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-helix/commit/5e2fc935
Tree: http://git-wip-us.apache.org/repos/asf/incubator-helix/tree/5e2fc935
Diff: http://git-wip-us.apache.org/repos/asf/incubator-helix/diff/5e2fc935
Branch: refs/heads/helix-logical-model
Commit: 5e2fc9352f63758f6bfda12200e71931ba72feaa
Parents: b0c1cb0
Author: Kanak Biscuitwala <ka...@apache.org>
Authored: Mon Sep 30 10:37:13 2013 -0700
Committer: Kanak Biscuitwala <ka...@apache.org>
Committed: Mon Sep 30 10:37:13 2013 -0700
----------------------------------------------------------------------
.../main/java/org/apache/helix/api/Resource.java | 16 +---------------
.../apache/helix/api/accessor/ClusterAccessor.java | 6 +++++-
.../apache/helix/api/accessor/ResourceAccessor.java | 13 +++++++++++++
.../context/PartitionedRebalancerContext.java | 9 +++++++--
4 files changed, 26 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/5e2fc935/helix-core/src/main/java/org/apache/helix/api/Resource.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/api/Resource.java b/helix-core/src/main/java/org/apache/helix/api/Resource.java
index e9d07bd..589c8a6 100644
--- a/helix-core/src/main/java/org/apache/helix/api/Resource.java
+++ b/helix-core/src/main/java/org/apache/helix/api/Resource.java
@@ -20,14 +20,13 @@ package org.apache.helix.api;
*/
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.helix.api.config.ResourceConfig;
+import org.apache.helix.api.config.ResourceConfig.ResourceType;
import org.apache.helix.api.config.SchedulerTaskConfig;
import org.apache.helix.api.config.UserConfig;
-import org.apache.helix.api.config.ResourceConfig.ResourceType;
import org.apache.helix.api.id.PartitionId;
import org.apache.helix.api.id.ResourceId;
import org.apache.helix.api.id.StateModelDefId;
@@ -62,19 +61,6 @@ public class Resource {
ResourceAssignment resourceAssignment, ExternalView externalView,
RebalancerContext rebalancerContext, UserConfig userConfig, int bucketSize,
boolean batchMessageMode) {
- Map<PartitionId, Partition> partitionMap = new HashMap<PartitionId, Partition>();
- new HashMap<PartitionId, Map<String, String>>();
- Set<PartitionId> partitionSet = idealState.getPartitionSet();
- if (partitionSet.isEmpty() && idealState.getNumPartitions() > 0) {
- partitionSet = new HashSet<PartitionId>();
- for (int i = 0; i < idealState.getNumPartitions(); i++) {
- partitionSet.add(PartitionId.from(id, Integer.toString(i)));
- }
- }
- for (PartitionId partitionId : partitionSet) {
- partitionMap.put(partitionId, new Partition(partitionId));
- }
-
SchedulerTaskConfig schedulerTaskConfig = schedulerTaskConfig(idealState);
RebalancerConfig rebalancerConfig = new RebalancerConfig(rebalancerContext);
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/5e2fc935/helix-core/src/main/java/org/apache/helix/api/accessor/ClusterAccessor.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/api/accessor/ClusterAccessor.java b/helix-core/src/main/java/org/apache/helix/api/accessor/ClusterAccessor.java
index 5a5400e..3047c34 100644
--- a/helix-core/src/main/java/org/apache/helix/api/accessor/ClusterAccessor.java
+++ b/helix-core/src/main/java/org/apache/helix/api/accessor/ClusterAccessor.java
@@ -61,6 +61,7 @@ import org.apache.helix.model.ResourceAssignment;
import org.apache.helix.model.ResourceConfiguration;
import org.apache.helix.model.StateModelDefinition;
import org.apache.log4j.Logger;
+import org.testng.internal.annotations.Sets;
public class ClusterAccessor {
private static Logger LOG = Logger.getLogger(ClusterAccessor.class);
@@ -244,8 +245,11 @@ public class ClusterAccessor {
_accessor.getChildValuesMap(_keyBuilder.resourceAssignments());
// read all the resources
+ Set<String> allResources = Sets.newHashSet();
+ allResources.addAll(idealStateMap.keySet());
+ allResources.addAll(resourceConfigMap.keySet());
Map<ResourceId, Resource> resourceMap = new HashMap<ResourceId, Resource>();
- for (String resourceName : idealStateMap.keySet()) {
+ for (String resourceName : allResources) {
ResourceId resourceId = ResourceId.from(resourceName);
resourceMap.put(resourceId, ResourceAccessor.createResource(resourceId,
resourceConfigMap.get(resourceName), idealStateMap.get(resourceName),
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/5e2fc935/helix-core/src/main/java/org/apache/helix/api/accessor/ResourceAccessor.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/api/accessor/ResourceAccessor.java b/helix-core/src/main/java/org/apache/helix/api/accessor/ResourceAccessor.java
index de38453..7fd901f 100644
--- a/helix-core/src/main/java/org/apache/helix/api/accessor/ResourceAccessor.java
+++ b/helix-core/src/main/java/org/apache/helix/api/accessor/ResourceAccessor.java
@@ -19,14 +19,20 @@ package org.apache.helix.api.accessor;
* under the License.
*/
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
import org.apache.helix.HelixConstants.StateModelToken;
import org.apache.helix.HelixDataAccessor;
import org.apache.helix.PropertyKey;
import org.apache.helix.api.Resource;
import org.apache.helix.api.Scope;
+import org.apache.helix.api.State;
import org.apache.helix.api.config.ResourceConfig;
import org.apache.helix.api.config.ResourceConfig.ResourceType;
import org.apache.helix.api.config.UserConfig;
+import org.apache.helix.api.id.ParticipantId;
import org.apache.helix.api.id.PartitionId;
import org.apache.helix.api.id.ResourceId;
import org.apache.helix.controller.rebalancer.context.CustomRebalancerContext;
@@ -278,6 +284,13 @@ public class ResourceAccessor {
idealState.setParticipantStateMap(partitionId,
customContext.getPreferenceMap(partitionId));
}
+ } else {
+ for (PartitionId partitionId : partitionedContext.getPartitionSet()) {
+ List<ParticipantId> preferenceList = Collections.emptyList();
+ idealState.setPreferenceList(partitionId, preferenceList);
+ Map<ParticipantId, State> participantStateMap = Collections.emptyMap();
+ idealState.setParticipantStateMap(partitionId, participantStateMap);
+ }
}
return idealState;
}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/5e2fc935/helix-core/src/main/java/org/apache/helix/controller/rebalancer/context/PartitionedRebalancerContext.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/context/PartitionedRebalancerContext.java b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/context/PartitionedRebalancerContext.java
index b24125c..d428a5e 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/context/PartitionedRebalancerContext.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/context/PartitionedRebalancerContext.java
@@ -206,8 +206,13 @@ public class PartitionedRebalancerContext extends BasicRebalancerContext impleme
} else {
replicaCount = Integer.parseInt(replicas);
}
- for (PartitionId partitionId : idealState.getPartitionSet()) {
- builder.addPartition(new Partition(partitionId));
+ if (idealState.getNumPartitions() > 0 && idealState.getPartitionSet().size() == 0) {
+ // backwards compatibility: partition sets were based on pref lists/maps previously
+ builder.addPartitions(idealState.getNumPartitions());
+ } else {
+ for (PartitionId partitionId : idealState.getPartitionSet()) {
+ builder.addPartition(new Partition(partitionId));
+ }
}
builder.anyLiveParticipant(anyLiveParticipant).replicaCount(replicaCount)
.maxPartitionsPerParticipant(idealState.getMaxPartitionsPerInstance())