public interface

HelixRebalancer

org.apache.helix.controller.rebalancer.HelixRebalancer
Known Indirect Subclasses

Class Overview

Allows one to come up with custom implementation of a rebalancer.
This will be invoked on all changes that happen in the cluster.
Simply return the resource assignment for a resource in this method.

Summary

Public Methods
abstract ResourceAssignment computeResourceMapping(RebalancerConfig rebalancerConfig, ResourceAssignment prevAssignment, Cluster cluster, ResourceCurrentState currentState)
Given an ideal state for a resource and liveness of participants, compute a assignment of instances and states to each partition of a resource.
abstract void init(HelixManager helixManager, ControllerContextProvider contextProvider)
Initialize the rebalancer with a HelixManager and ControllerContextProvider if necessary

Public Methods

public abstract ResourceAssignment computeResourceMapping (RebalancerConfig rebalancerConfig, ResourceAssignment prevAssignment, Cluster cluster, ResourceCurrentState currentState)

Given an ideal state for a resource and liveness of participants, compute a assignment of instances and states to each partition of a resource. This method provides all the relevant information needed to rebalance a resource. If you need additional information use manager.getAccessor to read and write the cluster data. This allows one to compute the ResourceAssignment according to app-specific requirements.

Say that you have:

 class MyRebalancerConfig implements RebalancerConfig
 
as your rebalancer config. To get a typed version, you can do the following:
 MyRebalancerConfig config = BasicRebalancerConfig.convert(rebalancerConfig,
     MyRebalancerConfig.class);
 

Parameters
rebalancerConfig the properties of the resource for which a mapping will be computed
prevAssignment the previous ResourceAssignment of this cluster, or null if none
cluster complete snapshot of the cluster
currentState the current states of all partitions

public abstract void init (HelixManager helixManager, ControllerContextProvider contextProvider)

Initialize the rebalancer with a HelixManager and ControllerContextProvider if necessary

Parameters
contextProvider An object that supports getting and setting context across pipeline runs