Add new interface IZkStateListener to provide session aware handleNewSession for ZkHelixManager#644
Conversation
b129877 to
aadc3cd
Compare
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/IZkStateListener.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkEventThread.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/IZkStateListener.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/IZkStateListener.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/IZkStateListener.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/IZkStateListener.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
Outdated
Show resolved
Hide resolved
narendly
left a comment
There was a problem hiding this comment.
Overall looks okay to me. But let's discuss if removing public methods would be okay. I think ZkCache is an internal concept that users shouldn't be using for their own logic, but let's double check.
Also please address other comments.
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkEventThread.java
Outdated
Show resolved
Hide resolved
helix-core/src/test/java/org/apache/helix/manager/zk/TestRawZkClient.java
Show resolved
Hide resolved
helix-core/src/test/java/org/apache/helix/manager/zk/TestRawZkClient.java
Show resolved
Hide resolved
helix-core/src/test/java/org/apache/helix/manager/zk/TestRawZkClient.java
Show resolved
Hide resolved
helix-core/src/test/java/org/apache/helix/manager/zk/TestRawZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZkCallbackCache.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Show resolved
Hide resolved
|
Rerun tests. All passed. [INFO] Results: [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.371 s - in org.apache.helix.integration.TestRenamePartition [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.033 s - in org.apache.helix.integration.task.TestDeleteJobFromJobQueue |
helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/client/HelixZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Outdated
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/ZkCallbackCache.java
Show resolved
Hide resolved
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
Show resolved
Hide resolved
|
Tests passed. [INFO] Tests run: 890, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3,384.407 s - in TestSuite This PR is ready to be merged, approved by @jiajunwang @narendly Commit message: |
…Session for ZkHelixManager (apache#644) I0Itec IZkStateListener doesn't have an API handleNewSession(sessionId) to handle session aware operation, which is needed to fix session race condition for creating ephemeral node in ZkClient. So this new IZkStateListener interface is introduced to provide session aware handleNewSession method for ZkHelixManager. Changelist: - Introduce new IZkStateListener to helix. The new IZkStateListener adds new method handleNewSession(String sessionId), and removes the old method handleNewSession(). - Add default implementations I0ItecIZkStateListenerHelixImpl in IZkStateListener and IZkStateListenerI0ItecImpl in ZkClient for backward compatibility. - Add session id to ZkEvent as a private field to help debug ZkEvent. - Add unit tests to test subscribe/unsubscribe state changes.
…Session for ZkHelixManager (apache#644) I0Itec IZkStateListener doesn't have an API handleNewSession(sessionId) to handle session aware operation, which is needed to fix session race condition for creating ephemeral node in ZkClient. So this new IZkStateListener interface is introduced to provide session aware handleNewSession method for ZkHelixManager. Changelist: - Introduce new IZkStateListener to helix. The new IZkStateListener adds new method handleNewSession(String sessionId), and removes the old method handleNewSession(). - Add default implementations I0ItecIZkStateListenerHelixImpl in IZkStateListener and IZkStateListenerI0ItecImpl in ZkClient for backward compatibility. - Add session id to ZkEvent as a private field to help debug ZkEvent. - Add unit tests to test subscribe/unsubscribe state changes.
…Session for ZkHelixManager (apache#644) I0Itec IZkStateListener doesn't have an API handleNewSession(sessionId) to handle session aware operation, which is needed to fix session race condition for creating ephemeral node in ZkClient. So this new IZkStateListener interface is introduced to provide session aware handleNewSession method for ZkHelixManager. Changelist: - Introduce new IZkStateListener to helix. The new IZkStateListener adds new method handleNewSession(String sessionId), and removes the old method handleNewSession(). - Add default implementations I0ItecIZkStateListenerHelixImpl in IZkStateListener and IZkStateListenerI0ItecImpl in ZkClient for backward compatibility. - Add session id to ZkEvent as a private field to help debug ZkEvent. - Add unit tests to test subscribe/unsubscribe state changes.
…Session for ZkHelixManager (apache#644) I0Itec IZkStateListener doesn't have an API handleNewSession(sessionId) to handle session aware operation, which is needed to fix session race condition for creating ephemeral node in ZkClient. So this new IZkStateListener interface is introduced to provide session aware handleNewSession method for ZkHelixManager. Changelist: - Introduce new IZkStateListener to helix. The new IZkStateListener adds new method handleNewSession(String sessionId), and removes the old method handleNewSession(). - Add default implementations I0ItecIZkStateListenerHelixImpl in IZkStateListener and IZkStateListenerI0ItecImpl in ZkClient for backward compatibility. - Add session id to ZkEvent as a private field to help debug ZkEvent. - Add unit tests to test subscribe/unsubscribe state changes.
Issues
Fixes #643
Description
Current I0ITec IZkStateListener doesn't have an API handleNewSession(sessionId), which is needed for #642
To avoid creating a new stateListener extends IZkStateListener, it seems better to move IZkStateListener to helix internal. So we would have flexible control to add the new API.
Changelist:
Tests
The following tests are written for this issue:
testSubscribeStateChanges()
testSessionExpiry()
testSubscribeStateChangesForI0ItecIZkStateListener()
testSessionExpiryForI0IItecZkStateListener()
The following is the result of the "mvn test" command on the appropriate module:
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] TestJobQueueCleanUp.testJobQueueAutoCleanUp » ThreadTimeout Method org.testng....
[ERROR] TestTaskRebalancerStopResume.stopDeleteJobAndResumeNamedQueue:199 » Helix Fail...
[INFO]
[ERROR] Tests run: 887, Failures: 2, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:00 h
[INFO] Finished at: 2019-12-04T12:38:29-08:00
[INFO] ------------------------------------------------------------------------
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.316 s - in org.apache.helix.integration.task.TestJobQueueCleanUp
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 21.841 s - in org.apache.helix.integration.task.TestTaskRebalancerStopResume
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Commits
Documentation
(Link the GitHub wiki you added)
Code Quality