public class CostBalancerStrategy extends Object implements BalancerStrategy
| Constructor and Description |
|---|
CostBalancerStrategy(com.google.common.util.concurrent.ListeningExecutorService exec) |
| Modifier and Type | Method and Description |
|---|---|
static double |
computeJointSegmentsCost(DataSegment segmentA,
DataSegment segmentB)
This defines the unnormalized cost function between two segments.
|
static double |
computeJointSegmentsCost(DataSegment segment,
Iterable<DataSegment> segmentSet) |
protected double |
computePlacementCost(DataSegment proposalSegment,
ServerHolder server)
Computes the cost of placing a segment on this server.
|
ServerHolder |
findDestinationServerToMoveSegment(DataSegment segmentToMove,
ServerHolder sourceServer,
List<ServerHolder> serverHolders)
Finds the best server from the list of
destinationServers to load
the segmentToMove, if it is moved from the sourceServer. |
Iterator<ServerHolder> |
findServersToDropSegment(DataSegment segmentToDrop,
List<ServerHolder> serverHolders)
Finds the best servers to drop the given segment.
|
Iterator<ServerHolder> |
findServersToLoadSegment(DataSegment segmentToLoad,
List<ServerHolder> serverHolders)
Finds the best servers to load the given segment.
|
CoordinatorRunStats |
getAndResetStats()
Returns the stats collected by the strategy in the current run and resets
the stats collector for the next run.
|
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.
|
static double |
intervalCost(org.joda.time.Interval intervalA,
org.joda.time.Interval intervalB) |
public CostBalancerStrategy(com.google.common.util.concurrent.ListeningExecutorService exec)
public static double computeJointSegmentsCost(DataSegment segment, Iterable<DataSegment> segmentSet)
public static double computeJointSegmentsCost(DataSegment segmentA, DataSegment segmentB)
segmentA - The first DataSegment.segmentB - The second DataSegment.public static double intervalCost(org.joda.time.Interval intervalA,
org.joda.time.Interval intervalB)
public static double intervalCost(double x1,
double y0,
double y1)
x1 - end of interval Xy0 - start of interval Yy1 - end o interval Ypublic Iterator<ServerHolder> findServersToLoadSegment(DataSegment segmentToLoad, List<ServerHolder> serverHolders)
BalancerStrategyfindServersToLoadSegment in interface BalancerStrategypublic ServerHolder findDestinationServerToMoveSegment(DataSegment segmentToMove, ServerHolder sourceServer, List<ServerHolder> serverHolders)
BalancerStrategydestinationServers to load
the segmentToMove, if it is moved from the sourceServer.
In order to avoid unnecessary moves when the segment is already optimally placed,
include the sourceServer in the list of destinationServers.
findDestinationServerToMoveSegment in interface BalancerStrategypublic Iterator<ServerHolder> findServersToDropSegment(DataSegment segmentToDrop, List<ServerHolder> serverHolders)
BalancerStrategyfindServersToDropSegment in interface BalancerStrategypublic CoordinatorRunStats getAndResetStats()
BalancerStrategygetAndResetStats in interface BalancerStrategyprotected double computePlacementCost(DataSegment proposalSegment, ServerHolder server)
Copyright © 2011–2023 The Apache Software Foundation. All rights reserved.