blob: b9f6a15b65f773736283505b202c20c1ab65d895 [file] [log] [blame]
package org.apache.helix.model;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.helix.HelixProperty;
import org.apache.helix.ZNRecord;
/**
* Represents the assignments of replicas for an entire resource, keyed on partitions of the
* resource. Each partition has its replicas assigned to a node, and each replica is in a state.
* For example, if there is a partition p with 2 replicas, a valid assignment is:<br />
* <br />
* p: {(n1, s1), (n2, s2)}<br />
* <br />
* This means one replica of p is located at node n1 and is in state s1, and another is in node n2
* and is in state s2. n1 cannot be equal to n2, but s1 can be equal to s2 if at least two replicas
* can be in s1.
*/
public class ResourceAssignment extends HelixProperty {
/**
* Initialize an empty mapping
* @param resourceName the resource being mapped
*/
public ResourceAssignment(String resourceName) {
super(resourceName);
}
/**
* Initialize a mapping from an existing ResourceMapping
* @param existingMapping pre-populated ResourceMapping
*/
public ResourceAssignment(ZNRecord existingMapping) {
super(existingMapping);
}
/**
* Get the resource for which this assignment was created
* @return resource name
*/
public String getResourceName() {
return getId();
}
/**
* Get the currently mapped partitions
* @return list of Partition objects
*/
public List<Partition> getMappedPartitions() {
List<Partition> partitions = new ArrayList<Partition>();
for (String partitionName : _record.getMapFields().keySet()) {
partitions.add(new Partition(partitionName));
}
return partitions;
}
/**
* Get the instance, state pairs for a partition
* @param partition the Partition to look up
* @return map of (instance name, state)
*/
public Map<String, String> getReplicaMap(Partition partition) {
if (_record.getMapFields().containsKey(partition.getPartitionName())) {
return _record.getMapField(partition.getPartitionName());
}
return Collections.emptyMap();
}
/**
* Add instance, state pairs for a partition
* @param partition the partition to set
* @param replicaMap map of (instance name, state)
*/
public void addReplicaMap(Partition partition, Map<String, String> replicaMap) {
_record.setMapField(partition.getPartitionName(), replicaMap);
}
}