This is an automated email from the ASF dual-hosted git repository. jackie pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push: new 28aa58eaa1 Remove summary option from TableRebalancer and return summary by default (#15212) 28aa58eaa1 is described below commit 28aa58eaa1ea80a7c1c31cd34207d7827e4af2dd Author: Sonam Mandal <sonam.man...@startree.ai> AuthorDate: Thu Mar 6 13:10:24 2025 -0800 Remove summary option from TableRebalancer and return summary by default (#15212) --- .../api/resources/PinotTableRestletResource.java | 6 +- .../helix/core/rebalance/RebalanceConfig.java | 16 +--- .../helix/core/rebalance/TableRebalancer.java | 42 +++------- .../TableRebalancerClusterStatelessTest.java | 96 ++++++++-------------- .../tests/OfflineClusterIntegrationTest.java | 31 +++---- 5 files changed, 58 insertions(+), 133 deletions(-) diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java index 8815d20d06..ba088c267d 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotTableRestletResource.java @@ -606,9 +606,6 @@ public class PinotTableRestletResource { @ApiParam(value = "OFFLINE|REALTIME", required = true) @QueryParam("type") String tableTypeStr, @ApiParam(value = "Whether to rebalance table in dry-run mode") @DefaultValue("false") @QueryParam("dryRun") boolean dryRun, - @ApiParam(value = "Whether to return dry-run summary instead of full, dry-run must be enabled to use this") - @DefaultValue("false") @QueryParam("summary") - boolean summary, @ApiParam(value = "Whether to enable pre-checks for table, must be in dry-run mode to enable") @DefaultValue("false") @QueryParam("preChecks") boolean preChecks, @ApiParam(value = "Whether to reassign instances before reassigning segments") @DefaultValue("false") @@ -651,7 +648,6 @@ public class PinotTableRestletResource { String tableNameWithType = constructTableNameWithType(tableName, tableTypeStr); RebalanceConfig rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(dryRun); - rebalanceConfig.setSummary(summary); rebalanceConfig.setPreChecks(preChecks); rebalanceConfig.setReassignInstances(reassignInstances); rebalanceConfig.setIncludeConsuming(includeConsuming); @@ -672,7 +668,7 @@ public class PinotTableRestletResource { String rebalanceJobId = TableRebalancer.createUniqueRebalanceJobIdentifier(); try { - if (dryRun || summary || preChecks || downtime) { + if (dryRun || preChecks || downtime) { // For dry-run, preChecks or rebalance with downtime, directly return the rebalance result as it should return // immediately return _pinotHelixResourceManager.rebalanceTable(tableNameWithType, rebalanceConfig, rebalanceJobId, false); diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/RebalanceConfig.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/RebalanceConfig.java index 06a9e171c3..f69f6be3d9 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/RebalanceConfig.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/RebalanceConfig.java @@ -34,11 +34,6 @@ public class RebalanceConfig { @ApiModelProperty(example = "false") private boolean _dryRun = false; - // Whether to return only dry-run summary instead of full dry-run output, can only be used in dry-run mode - @JsonProperty("summary") - @ApiModelProperty(example = "false") - private boolean _summary = false; - // Whether to perform pre-checks for rebalance. This only returns the status of each pre-check and does not fail // rebalance @JsonProperty("preChecks") @@ -129,14 +124,6 @@ public class RebalanceConfig { _dryRun = dryRun; } - public boolean isSummary() { - return _summary; - } - - public void setSummary(boolean summary) { - _summary = summary; - } - public boolean isPreChecks() { return _preChecks; } @@ -259,7 +246,7 @@ public class RebalanceConfig { @Override public String toString() { - return "RebalanceConfig{" + "_dryRun=" + _dryRun + ", _summary=" + _summary + ", preChecks=" + _preChecks + return "RebalanceConfig{" + "_dryRun=" + _dryRun + ", preChecks=" + _preChecks + ", _reassignInstances=" + _reassignInstances + ", _includeConsuming=" + _includeConsuming + ", _bootstrap=" + _bootstrap + ", _downtime=" + _downtime + ", _minAvailableReplicas=" + _minAvailableReplicas + ", _bestEfforts=" + _bestEfforts + ", _externalViewCheckIntervalInMs=" + _externalViewCheckIntervalInMs @@ -272,7 +259,6 @@ public class RebalanceConfig { public static RebalanceConfig copy(RebalanceConfig cfg) { RebalanceConfig rc = new RebalanceConfig(); rc._dryRun = cfg._dryRun; - rc._summary = cfg._summary; rc._preChecks = cfg._preChecks; rc._reassignInstances = cfg._reassignInstances; rc._includeConsuming = cfg._includeConsuming; diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancer.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancer.java index b5d56f2ba6..34cab7c29d 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancer.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancer.java @@ -181,7 +181,6 @@ public class TableRebalancer { rebalanceJobId = createUniqueRebalanceJobIdentifier(); } boolean dryRun = rebalanceConfig.isDryRun(); - boolean summary = rebalanceConfig.isSummary(); boolean preChecks = rebalanceConfig.isPreChecks(); boolean reassignInstances = rebalanceConfig.isReassignInstances(); boolean includeConsuming = rebalanceConfig.isIncludeConsuming(); @@ -196,19 +195,14 @@ public class TableRebalancer { && RoutingConfig.STRICT_REPLICA_GROUP_INSTANCE_SELECTOR_TYPE.equalsIgnoreCase( tableConfig.getRoutingConfig().getInstanceSelectorType()); LOGGER.info( - "Start rebalancing table: {} with dryRun: {}, summary: {}, preChecks: {}, reassignInstances: {}, " - + "includeConsuming: {}, bootstrap: {}, downtime: {}, minReplicasToKeepUpForNoDowntime: {}, " - + "enableStrictReplicaGroup: {}, lowDiskMode: {}, bestEfforts: {}, externalViewCheckIntervalInMs: {}, " + "Start rebalancing table: {} with dryRun: {}, preChecks: {}, reassignInstances: {}, includeConsuming: {}," + + "bootstrap: {}, downtime: {}, minReplicasToKeepUpForNoDowntime: {}, enableStrictReplicaGroup: {}," + + "lowDiskMode: {}, bestEfforts: {}, externalViewCheckIntervalInMs: {}, " + "externalViewStabilizationTimeoutInMs: {}", - tableNameWithType, dryRun, summary, preChecks, reassignInstances, includeConsuming, bootstrap, downtime, + tableNameWithType, dryRun, preChecks, reassignInstances, includeConsuming, bootstrap, downtime, minReplicasToKeepUpForNoDowntime, enableStrictReplicaGroup, lowDiskMode, bestEfforts, externalViewCheckIntervalInMs, externalViewStabilizationTimeoutInMs); - if (summary && !dryRun) { - return new RebalanceResult(rebalanceJobId, RebalanceResult.Status.FAILED, - "Must enable dry-run mode to use summary mode", null, null, null, null, null); - } - // Perform pre-checks if enabled Map<String, String> preChecksResult = null; if (preChecks) { @@ -313,12 +307,10 @@ public class TableRebalancer { + "segmentAssignmentUnchanged: {} for table: {}", rebalanceJobId, instancePartitionsUnchanged, tierInstancePartitionsUnchanged, segmentAssignmentUnchanged, tableNameWithType); - RebalanceSummaryResult summaryResult = null; - if (summary) { - // Calculate summary here itself so that even if the table is already balanced, the caller can verify whether that - // is expected or not based on the summary results - summaryResult = calculateDryRunSummary(currentAssignment, targetAssignment, tableNameWithType, rebalanceJobId); - } + // Calculate summary here itself so that even if the table is already balanced, the caller can verify whether that + // is expected or not based on the summary results + RebalanceSummaryResult summaryResult = + calculateDryRunSummary(currentAssignment, targetAssignment, tableNameWithType, rebalanceJobId); if (segmentAssignmentUnchanged) { LOGGER.info("Table: {} is already balanced", tableNameWithType); @@ -327,33 +319,23 @@ public class TableRebalancer { String.format("For rebalanceId: %s, instance unchanged and table: %s is already balanced", rebalanceJobId, tableNameWithType)); return new RebalanceResult(rebalanceJobId, RebalanceResult.Status.NO_OP, "Table is already balanced", - summary ? null : instancePartitionsMap, summary ? null : tierToInstancePartitionsMap, - summary ? null : targetAssignment, preChecksResult, summaryResult); + instancePartitionsMap, tierToInstancePartitionsMap, targetAssignment, preChecksResult, summaryResult); } else { if (dryRun) { return new RebalanceResult(rebalanceJobId, RebalanceResult.Status.DONE, "Instance reassigned in dry-run mode, table is already balanced", - summary ? null : instancePartitionsMap, summary ? null : tierToInstancePartitionsMap, - summary ? null : targetAssignment, preChecksResult, summaryResult); + instancePartitionsMap, tierToInstancePartitionsMap, targetAssignment, preChecksResult, summaryResult); } else { _tableRebalanceObserver.onSuccess( String.format("For rebalanceId: %s, instance reassigned but table: %s is already balanced", rebalanceJobId, tableNameWithType)); return new RebalanceResult(rebalanceJobId, RebalanceResult.Status.DONE, - "Instance reassigned, table is already balanced", summary ? null : instancePartitionsMap, - summary ? null : tierToInstancePartitionsMap, summary ? null : targetAssignment, preChecksResult, - summaryResult); + "Instance reassigned, table is already balanced", instancePartitionsMap, + tierToInstancePartitionsMap, targetAssignment, preChecksResult, summaryResult); } } } - if (summary) { - LOGGER.info("For rebalanceId: {}, rebalancing table: {} in dry-run summary mode, returning the summary only", - rebalanceJobId, tableNameWithType); - return new RebalanceResult(rebalanceJobId, RebalanceResult.Status.DONE, "Dry-run summary mode", null, - null, null, preChecksResult, summaryResult); - } - if (dryRun) { LOGGER.info("For rebalanceId: {}, rebalancing table: {} in dry-run mode, returning the target assignment", rebalanceJobId, tableNameWithType); diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java index 2f7ab350bc..5b99e56cc3 100644 --- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java +++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java @@ -108,7 +108,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Rebalance with dry-run summary should fail without creating the table RebalanceConfig rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.FAILED); assertNull(rebalanceResult.getRebalanceSummaryResult()); @@ -129,7 +128,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Rebalance with dry-run summary should return NO_OP status rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); RebalanceSummaryResult rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); @@ -137,11 +135,10 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // Dry-run mode should not change the IdealState assertEquals(_helixResourceManager.getTableIdealState(OFFLINE_TABLE_NAME).getRecord().getMapFields(), @@ -173,7 +170,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Rebalance in dry-run summary mode with added servers rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); @@ -181,12 +177,11 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 14); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 3); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); Map<String, RebalanceSummaryResult.ServerSegmentChangeInfo> serverSegmentChangeInfoMap = rebalanceSummaryResult.getServerInfo().getServerSegmentChangeInfo(); @@ -269,7 +264,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // occur rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceConfig.setPreChecks(true); rebalanceConfig.setMinAvailableReplicas(3); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); @@ -278,12 +272,11 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); assertNotNull(rebalanceResult.getPreChecksResult()); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // Rebalance with 3 min available replicas should fail as the table only have 3 replicas rebalanceConfig = new RebalanceConfig(); @@ -321,7 +314,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // No need to reassign instances because instances should be automatically assigned when updating the table config rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); @@ -329,11 +321,10 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 11); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); serverSegmentChangeInfoMap = rebalanceSummaryResult.getServerInfo().getServerSegmentChangeInfo(); assertNotNull(serverSegmentChangeInfoMap); @@ -402,20 +393,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // no movement should occur rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // Without instances reassignment, the rebalance should return status NO_OP, and the existing instance partitions // should be used @@ -427,7 +416,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode with reassignment rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceConfig.setReassignInstances(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); @@ -435,14 +423,13 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); // No move expected since already balanced assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // With instances reassignment, the rebalance should return status DONE, the existing instance partitions should be // removed, and the default instance partitions should be used @@ -476,7 +463,6 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceConfig.setDowntime(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); @@ -484,13 +470,12 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 15); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 3); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // Rebalance with downtime should succeed rebalanceConfig = new RebalanceConfig(); @@ -519,15 +504,13 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { } } - // Try summary mode without dry-run set + // Try pre-checks mode without dry-run set rebalanceConfig = new RebalanceConfig(); - rebalanceConfig.setSummary(true); + rebalanceConfig.setPreChecks(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.FAILED); assertNull(rebalanceResult.getRebalanceSummaryResult()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); + assertNull(rebalanceResult.getPreChecksResult()); _helixResourceManager.deleteOfflineTable(RAW_TABLE_NAME); executorService.shutdown(); @@ -574,20 +557,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode RebalanceConfig rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); RebalanceResult rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); RebalanceSummaryResult rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // Run actual table rebalance rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); @@ -608,20 +589,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode, should be no-op rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // rebalance is NOOP and no change in assignment caused by new instances rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); @@ -644,20 +623,19 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode, some moves should occur rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 15); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 9); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 6); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getTierInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // rebalance should change assignment rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); @@ -721,20 +699,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode RebalanceConfig rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); RebalanceResult rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); RebalanceSummaryResult rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); @@ -751,20 +727,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.NO_OP); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceResult.getRebalanceSummaryResult()); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 0); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 0); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // rebalance is NOOP and no change in assignment caused by new instances rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); @@ -781,20 +755,19 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceResult.getRebalanceSummaryResult()); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 30); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 3); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServersGettingNewSegments(), 6); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getTierInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); // rebalance should change assignment rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); @@ -822,19 +795,18 @@ public class TableRebalancerClusterStatelessTest extends ControllerTest { // Try dry-run summary mode rebalanceConfig = new RebalanceConfig(); rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); rebalanceSummaryResult = rebalanceResult.getRebalanceSummaryResult(); assertNotNull(rebalanceSummaryResult); assertNotNull(rebalanceSummaryResult.getServerInfo()); assertNotNull(rebalanceSummaryResult.getSegmentInfo()); - assertNull(rebalanceResult.getInstanceAssignment()); - assertNull(rebalanceResult.getTierInstanceAssignment()); - assertNull(rebalanceResult.getSegmentAssignment()); assertEquals(rebalanceSummaryResult.getSegmentInfo().getTotalSegmentsToBeMoved(), 13); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getValueBeforeRebalance(), 6); assertEquals(rebalanceSummaryResult.getServerInfo().getNumServers().getExpectedValueAfterRebalance(), 6); + assertNotNull(rebalanceResult.getInstanceAssignment()); + assertNotNull(rebalanceResult.getTierInstanceAssignment()); + assertNotNull(rebalanceResult.getSegmentAssignment()); rebalanceResult = tableRebalancer.rebalance(tableConfig, new RebalanceConfig(), null); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); diff --git a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java index 7e2e0f9ea1..cfd7d8220f 100644 --- a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java +++ b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java @@ -4056,13 +4056,9 @@ public class OfflineClusterIntegrationTest extends BaseClusterIntegrationTestSet TableConfig tableConfig = getOfflineTableConfig(); - // Ensure summary status is null if not enabled + // Ensure summary status is non-null always RebalanceResult rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); - assertNull(rebalanceResult.getRebalanceSummaryResult()); - - // Enable summary, nothing is set - rebalanceConfig.setSummary(true); - rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); + assertNotNull(rebalanceResult.getRebalanceSummaryResult()); checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.NO_OP, false, getNumServers(), getNumServers(), tableConfig.getReplication()); @@ -4073,19 +4069,15 @@ public class OfflineClusterIntegrationTest extends BaseClusterIntegrationTestSet checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.DONE, true, getNumServers(), getNumServers() + 1, tableConfig.getReplication()); - // Disable dry-run, summary still enabled + // Disable dry-run to do a real rebalance rebalanceConfig.setDryRun(false); - rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); - assertNull(rebalanceResult.getRebalanceSummaryResult()); - assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.FAILED); - - // Disable summary along with dry-run to do a real rebalance - rebalanceConfig.setSummary(false); rebalanceConfig.setDowntime(true); rebalanceConfig.setReassignInstances(true); rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); - assertNull(rebalanceResult.getRebalanceSummaryResult()); + assertNotNull(rebalanceResult.getRebalanceSummaryResult()); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); + checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.DONE, true, getNumServers(), + getNumServers() + 1, tableConfig.getReplication()); waitForRebalanceToComplete(rebalanceResult, 600_000L); @@ -4094,18 +4086,16 @@ public class OfflineClusterIntegrationTest extends BaseClusterIntegrationTestSet // Re-enable dry-run rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.DONE, true, getNumServers() + 1, getNumServers(), tableConfig.getReplication()); - // Disable dry-run and summary to do a real rebalance + // Disable dry-run to do a real rebalance rebalanceConfig.setDryRun(false); - rebalanceConfig.setSummary(false); rebalanceConfig.setDowntime(true); rebalanceConfig.setReassignInstances(true); rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); - assertNull(rebalanceResult.getRebalanceSummaryResult()); + assertNotNull(rebalanceResult.getRebalanceSummaryResult()); assertEquals(rebalanceResult.getStatus(), RebalanceResult.Status.DONE); waitForRebalanceToComplete(rebalanceResult, 600_000L); @@ -4115,14 +4105,13 @@ public class OfflineClusterIntegrationTest extends BaseClusterIntegrationTestSet TestUtils.waitForCondition(aVoid -> _resourceManager.dropInstance(serverStarter1.getInstanceId()).isSuccessful(), 60_000L, "Failed to drop added server"); - // Try dry-run with summary again + // Try dry-run again rebalanceConfig.setDryRun(true); - rebalanceConfig.setSummary(true); rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.NO_OP, false, getNumServers(), getNumServers(), tableConfig.getReplication()); - // Try dry-run with summary and pre-checks + // Try dry-run with pre-checks rebalanceConfig.setPreChecks(true); rebalanceResult = _tableRebalancer.rebalance(tableConfig, rebalanceConfig, null); checkRebalanceDryRunSummary(rebalanceResult, RebalanceResult.Status.NO_OP, false, getNumServers(), getNumServers(), --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org