Map<ResourceId, PartitionedRebalancerContext.Builder> rebCtxBuilderMap =
new HashMap<ResourceId, PartitionedRebalancerContext.Builder>();
for (Participant liveParticipant : cluster.getLiveParticipantMap().values()) {
for (ResourceId resourceId : liveParticipant.getCurrentStateMap().keySet()) {
CurrentState currentState = liveParticipant.getCurrentStateMap().get(resourceId);
if (currentState.getStateModelDefRef() == null) {
LOG.error("state model def is null." + "resource:" + currentState.getResourceId()
+ ", partitions: " + currentState.getPartitionStateMap().keySet()
+ ", states: " + currentState.getPartitionStateMap().values());
throw new StageException("State model def is null for resource:"
+ currentState.getResourceId());
}
if (!resCfgBuilderMap.containsKey(resourceId)) {
PartitionedRebalancerContext.Builder rebCtxBuilder =
new PartitionedRebalancerContext.Builder(resourceId);
rebCtxBuilder.stateModelDefId(currentState.getStateModelDefId());
rebCtxBuilder.stateModelFactoryId(StateModelFactoryId.from(currentState
.getStateModelFactoryName()));
rebCtxBuilderMap.put(resourceId, rebCtxBuilder);
ResourceConfig.Builder resCfgBuilder = new ResourceConfig.Builder(resourceId);
resCfgBuilder.bucketSize(currentState.getBucketSize());
resCfgBuilder.batchMessageMode(currentState.getBatchMessageMode());
resCfgBuilderMap.put(resourceId, resCfgBuilder);
}
PartitionedRebalancerContext.Builder rebCtxBuilder = rebCtxBuilderMap.get(resourceId);
for (PartitionId partitionId : currentState.getTypedPartitionStateMap().keySet()) {
rebCtxBuilder.addPartition(new Partition(partitionId));
}
}
}