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, 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)
Initialize the rebalancer with a HelixManager if necessary

Public Methods

public abstract ResourceAssignment computeResourceMapping (RebalancerConfig rebalancerConfig, 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 MyRebalancerContext implements RebalancerContext
 
as your rebalancer context. To extract it from a RebalancerConfig, do the following:
 MyRebalancerContext context = rebalancerConfig.getRebalancerContext(MyRebalancerContext.class);
 

Parameters
rebalancerConfig the properties of the resource for which a mapping will be computed
cluster complete snapshot of the cluster
currentState the current states of all partitions

public abstract void init (HelixManager helixManager)

Initialize the rebalancer with a HelixManager if necessary