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 BalancerStrategy
public ServerHolder findNewSegmentHomeBalancer(DataSegment proposalSegment, List<ServerHolder> serverHolders)
findNewSegmentHomeBalancer
in interface BalancerStrategy
public BalancerSegmentHolder pickSegmentToMove(List<ServerHolder> serverHolders)
pickSegmentToMove
in interface BalancerStrategy
public 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 BalancerStrategy
protected 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–2017. All rights reserved.