Skip to content

Commit c453129

Browse files
authored
[COST] add ClusterBean to MigrationCost and revise Balancer#Plan
1 parent b1c9566 commit c453129

8 files changed

Lines changed: 29 additions & 29 deletions

File tree

app/src/main/java/org/astraea/app/web/BalancerHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ private PlanExecutionProgress progress(String taskId) {
186186
solution ->
187187
new PlanReport(
188188
changes.apply(solution),
189-
MigrationCost.migrationCosts(contextCluster, solution.proposal())))
189+
MigrationCost.migrationCosts(
190+
contextCluster, solution.proposal(), solution.clusterBean())))
190191
.orElse(null);
191192
var phase = balancerConsole.taskPhase(taskId).orElseThrow();
192193
return new PlanExecutionProgress(

common/src/main/java/org/astraea/common/balancer/Balancer.java

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.astraea.common.balancer.algorithms.GreedyBalancer;
2525
import org.astraea.common.balancer.algorithms.SingleStepBalancer;
2626
import org.astraea.common.cost.ClusterCost;
27+
import org.astraea.common.metrics.ClusterBean;
2728

2829
public interface Balancer {
2930

@@ -32,41 +33,24 @@ public interface Balancer {
3233
*/
3334
Optional<Plan> offer(AlgorithmConfig config);
3435

35-
class Plan {
36-
private final ClusterInfo initialClusterInfo;
37-
private final ClusterCost initialClusterCost;
38-
39-
private final ClusterInfo proposal;
40-
private final ClusterCost proposalClusterCost;
41-
42-
public Plan(
43-
ClusterInfo initialClusterInfo,
44-
ClusterCost initialClusterCost,
45-
ClusterInfo proposal,
46-
ClusterCost proposalClusterCost) {
47-
this.initialClusterInfo = initialClusterInfo;
48-
this.initialClusterCost = initialClusterCost;
49-
this.proposal = proposal;
50-
this.proposalClusterCost = proposalClusterCost;
51-
}
52-
53-
public ClusterInfo initialClusterInfo() {
54-
return initialClusterInfo;
55-
}
36+
record Plan(
37+
ClusterBean clusterBean,
38+
ClusterInfo initialClusterInfo,
39+
ClusterCost initialClusterCost,
40+
ClusterInfo proposal,
41+
ClusterCost proposalClusterCost) {
5642

5743
/**
5844
* The {@link ClusterCost} score of the original {@link ClusterInfo} when this plan is start
5945
* generating.
6046
*/
47+
@Override
6148
public ClusterCost initialClusterCost() {
6249
return initialClusterCost;
6350
}
6451

65-
public ClusterInfo proposal() {
66-
return proposal;
67-
}
68-
6952
/** The {@link ClusterCost} score of the proposed new allocation. */
53+
@Override
7054
public ClusterCost proposalClusterCost() {
7155
return proposalClusterCost;
7256
}

common/src/main/java/org/astraea/common/balancer/algorithms/GreedyBalancer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ public Optional<Plan> offer(AlgorithmConfig config) {
209209
.map(
210210
newAllocation ->
211211
new Plan(
212+
config.clusterBean(),
212213
config.clusterInfo(),
213214
initialCost,
214215
newAllocation,
@@ -254,6 +255,7 @@ public Optional<Plan> offer(AlgorithmConfig config) {
254255
.overflow()) {
255256
return Optional.of(
256257
new Plan(
258+
config.clusterBean(),
257259
config.clusterInfo(),
258260
config.clusterCostFunction().clusterCost(config.clusterInfo(), clusterBean),
259261
currentClusterInfo,

common/src/main/java/org/astraea/common/balancer/algorithms/SingleStepBalancer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ public Optional<Plan> offer(AlgorithmConfig config) {
136136
.map(
137137
newAllocation ->
138138
new Plan(
139+
config.clusterBean(),
139140
config.clusterInfo(),
140141
currentCost,
141142
newAllocation,
@@ -155,6 +156,7 @@ public Optional<Plan> offer(AlgorithmConfig config) {
155156
.overflow()) {
156157
return Optional.of(
157158
new Plan(
159+
config.clusterBean(),
158160
config.clusterInfo(),
159161
config.clusterCostFunction().clusterCost(config.clusterInfo(), clusterBean),
160162
currentClusterInfo,

common/src/main/java/org/astraea/common/cost/MigrationCost.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.astraea.common.admin.Broker;
2626
import org.astraea.common.admin.ClusterInfo;
2727
import org.astraea.common.admin.Replica;
28+
import org.astraea.common.metrics.ClusterBean;
2829

2930
public class MigrationCost {
3031

@@ -37,7 +38,8 @@ public class MigrationCost {
3738
public static final String REPLICA_LEADERS_TO_REMOVE = "leader number to remove";
3839
public static final String CHANGED_REPLICAS = "changed replicas";
3940

40-
public static List<MigrationCost> migrationCosts(ClusterInfo before, ClusterInfo after) {
41+
public static List<MigrationCost> migrationCosts(
42+
ClusterInfo before, ClusterInfo after, ClusterBean clusterBean) {
4143
var migrateInBytes = recordSizeToSync(before, after);
4244
var migrateOutBytes = recordSizeToFetch(before, after);
4345
var migrateReplicaNum = replicaNumChanged(before, after);

common/src/test/java/org/astraea/common/balancer/BalancerConsoleTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,12 @@ public Optional<Plan> offer(AlgorithmConfig config) {
400400
costFunction,
401401
Duration.ofMillis(sampleTimeMs - (System.currentTimeMillis() - startMs)));
402402
return Optional.of(
403-
new Plan(config.clusterInfo(), () -> 0, config.clusterInfo(), () -> 0));
403+
new Plan(
404+
config.clusterBean(),
405+
config.clusterInfo(),
406+
() -> 0,
407+
config.clusterInfo(),
408+
() -> 0));
404409
}
405410
};
406411

gui/src/main/java/org/astraea/gui/tab/health/BalancerNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ static List<Map<String, Object>> costResult(Balancer.Plan plan) {
105105
})
106106
.put(migrationCost.name, count)));
107107

108-
process.accept(MigrationCost.migrationCosts(plan.initialClusterInfo(), plan.proposal()));
108+
process.accept(
109+
MigrationCost.migrationCosts(
110+
plan.initialClusterInfo(), plan.proposal(), plan.clusterBean()));
109111
return List.copyOf(map.values());
110112
}
111113

gui/src/test/java/org/astraea/gui/tab/health/BalancerNodeTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.astraea.common.admin.Replica;
3131
import org.astraea.common.balancer.Balancer;
3232
import org.astraea.common.cost.ReplicaLeaderSizeCost;
33+
import org.astraea.common.metrics.ClusterBean;
3334
import org.astraea.gui.Context;
3435
import org.astraea.gui.pane.Argument;
3536
import org.astraea.it.Service;
@@ -150,6 +151,7 @@ void testResult() {
150151
var results =
151152
BalancerNode.assignmentResult(
152153
new Balancer.Plan(
154+
ClusterBean.EMPTY,
153155
beforeClusterInfo,
154156
() -> 1.0D,
155157
ClusterInfo.of("fake", allNodes, Map.of(), afterReplicas),

0 commit comments

Comments
 (0)