Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add test for topology migration by resource group #2933

Merged
merged 5 commits into from
Oct 8, 2024

Conversation

zpinto
Copy link
Contributor

@zpinto zpinto commented Oct 1, 2024

Issues

  • Add test to prove and preserve the behavior of allowing a topology migration which can isolate shuffling to a single resource group.

Tests

  • testTopologyMigrationByResourceGroup
[TestNG] Running:
  /Users/zapinto/Library/Caches/JetBrains/LinkedInIdea233/temp-testng-customsuite.xml

Start zookeeper at localhost:2183 in thread main
START TestTopologyMigration at Tue Oct 01 16:53:33 PDT 2024
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeLeaderFromStandby(): transitioning from STANDBY to LEADER for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromOffline(): transitioning from OFFLINE to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeStandbyFromLeader(): transitioning from LEADER to STANDBY for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeOfflineFromStandby(): transitioning from STANDBY to OFFLINE for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_1 TestDB_1_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_1
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_2
LeaderStandbyStateModel.onBecomeDroppedFromOffline(): transitioning from OFFLINE to DROPPED for TestDB_0 TestDB_0_0
AfterClass: TestTopologyMigration called.
Shut down zookeeper at port 2183 in thread main

===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

Commits

  • My commits all reference appropriate Apache Helix GitHub issues in their subject lines. In addition, my commits follow the guidelines from "How to write a good git commit message":
    1. Subject is separated from body by a blank line
    2. Subject is limited to 50 characters (not including Jira issue reference)
    3. Subject does not end with a period
    4. Subject uses the imperative mood ("add", not "adding")
    5. Body wraps at 72 characters
    6. Body explains "what" and "why", not "how"

Code Quality

  • My diff has been formatted using helix-style.xml
    (helix-style-intellij.xml if IntelliJ IDE is used)

_gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, false);

// Verify cluster state after topology migration
Assert.assertTrue(_clusterVerifier.verifyByPolling());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. If the main thread move fast and check the moment controller did not change the mapping, it may pass this line right away.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

verifyByPolling will wait to verify for .setWaitTillVerify(TestHelper.DEFAULT_REBALANCE_PROCESSING_WAIT_TIME) which is 1500 milliseconds.

I looked into other ways to see if controller has processed that MM is set and found no other indicator given that MAINTENANCE znode and maintenance history in CONTROLLER/HISTORY are both written by the client.

Shouldn't verifyByPolling wait long enough with the configured waitTillVerify to allow the controller to process MM?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

verifybypolling only checks IS == EV. If there is no difference between IS and EV then it will pass.

It has the possibility controller move slow and no IS / EV diff generated at the moment MM exited. Then it can move to next line immediately.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I switched to using BestPossibleExternalViewVerifier that runs before cluster gets set to MM to ensure the cluster is converged with what verifier says is eventual BPS given the current state of the cluster and after we exit MM to ensure that cluster converges with the eventual BPS given the current state.

This will work because BestPossibleExternalViewVerifier actually computes BPS instead of just comparing IS and EV.

zpinto added 2 commits October 3, 2024 16:08
…iew verifier to ensure that the cluster is converged with the bps that should eventually be calculated by the controller once it processes current state of the cluster.
Copy link
Contributor

@junkaixue junkaixue left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

@zpinto
Copy link
Contributor Author

zpinto commented Oct 7, 2024

This PR is ready to be merged.

Final commit message:

Add test to prove and preserve the behavior of allowing a topology migration which can isolate shuffling to a single resource group.

@xyuanlu xyuanlu merged commit 64541d3 into apache:master Oct 8, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants