public class CostBalancerStrategy extends Object implements BalancerStrategy
| Constructor and Description | 
|---|
CostBalancerStrategy(com.google.common.util.concurrent.ListeningExecutorService exec)  | 
| Modifier and Type | Method and Description | 
|---|---|
double | 
calculateInitialTotalCost(List<ServerHolder> serverHolders)
Calculates the initial cost of the Druid segment configuration. 
 | 
double | 
calculateNormalization(List<ServerHolder> serverHolders)
Calculates the cost normalization. 
 | 
protected Pair<Double,ServerHolder> | 
chooseBestServer(DataSegment proposalSegment,
                Iterable<ServerHolder> serverHolders,
                boolean includeCurrentServer)
For assignment, we want to move to the lowest cost server that isn't already serving the segment. 
 | 
protected double | 
computeCost(DataSegment proposalSegment,
           ServerHolder server,
           boolean includeCurrentServer)  | 
static double | 
computeJointSegmentsCost(DataSegment segmentA,
                        DataSegment segmentB)
This defines the unnormalized cost function between two segments. 
 | 
void | 
emitStats(String tier,
         CoordinatorStats stats,
         List<ServerHolder> serverHolderList)  | 
ServerHolder | 
findNewSegmentHomeBalancer(DataSegment proposalSegment,
                          List<ServerHolder> serverHolders)  | 
ServerHolder | 
findNewSegmentHomeReplicator(DataSegment proposalSegment,
                            List<ServerHolder> serverHolders)  | 
static double | 
intervalCost(double x1,
            double y0,
            double y1)
Computes the joint cost of two intervals X = [x_0 = 0, x_1) and Y = [y_0, y_1)
 cost(X, Y) = \int_{x_0}^{x_1} \int_{y_0}^{y_1} e^{-\lambda |x-y|}dxdy $$
 lambda = 1 in this particular implementation
 Other values of lambda can be calculated by multiplying inputs by lambda
 and multiplying the result by 1 / lambda ^ 2
 Interval start and end are all relative to x_0. 
 | 
BalancerSegmentHolder | 
pickSegmentToMove(List<ServerHolder> serverHolders)  | 
public CostBalancerStrategy(com.google.common.util.concurrent.ListeningExecutorService exec)
public static double computeJointSegmentsCost(DataSegment segmentA, DataSegment segmentB)
segmentA - The first DataSegment.segmentB - The second DataSegment.public static double intervalCost(double x1,
                                  double y0,
                                  double y1)
x1 - end of interval Xy0 - start of interval Yy1 - end o interval Ypublic ServerHolder findNewSegmentHomeReplicator(DataSegment proposalSegment, List<ServerHolder> serverHolders)
findNewSegmentHomeReplicator in interface BalancerStrategypublic ServerHolder findNewSegmentHomeBalancer(DataSegment proposalSegment, List<ServerHolder> serverHolders)
findNewSegmentHomeBalancer in interface BalancerStrategypublic BalancerSegmentHolder pickSegmentToMove(List<ServerHolder> serverHolders)
pickSegmentToMove in interface BalancerStrategypublic double calculateInitialTotalCost(List<ServerHolder> serverHolders)
serverHolders - A list of ServerHolders for a particular tier.public double calculateNormalization(List<ServerHolder> serverHolders)
serverHolders - A list of ServerHolders for a particular tier.public void emitStats(String tier, CoordinatorStats stats, List<ServerHolder> serverHolderList)
emitStats in interface BalancerStrategyprotected double computeCost(DataSegment proposalSegment, ServerHolder server, boolean includeCurrentServer)
protected Pair<Double,ServerHolder> chooseBestServer(DataSegment proposalSegment, Iterable<ServerHolder> serverHolders, boolean includeCurrentServer)
proposalSegment - A DataSegment that we are proposing to move.serverHolders - An iterable of ServerHolders for a particular tier.Copyright © 2011–2018. All rights reserved.