-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/8935/
-----------------------------------------------------------
(Updated March 2, 2013, 8:03 p.m.)
Review request for zookeeper, Patrick Hunt and Mahadev Konar.
Changes
-------
- Extract check session logic for create request into a separate method
- Remove checkSession() call in Follower/ObserverRequestProcessor
Description
-------
See ZOOKEEPER-1147 for high level description
Implementation notes:
- Local sessions don’t get persisted on disk. Existing SessionTrackerImpl is
used by the leader to track global sessions. Each participant (including the
leader) also has a local session tracker (which is another instance of
SessionTrackerImpl) to track its local session in memory.
- Each participant intercepts a request before it enters the pipeline. In order
to do 2 things
o Update local session to global session when it saw create ephemeral node
request. Update is done by issuing a create session rquest before issuing the
create request
o Add local session flag to a request. So that the pipeline know that this
type of request don’t need to send to the leader and wait for commit
- PrepRequestProcessor (on the leader) now explicitly validate global session
on create ephemeral node request. For other type of request, there is no need
for session validation because the leader doesn’t know about local sessions on
other machine, so the request has to go through. The correctness is preserve
as long a no ephemeral node is created after session is already expired
- Observer/FollowerRequestProcessor has logic to validate session. However, I
believe this logic is in correct since the request is already send downstream
to the CommitProcessor. The observer and the follower have no other option but
to send the request to leader.
This addresses bug ZOOKEEPER-1147.
https://issues.apache.org/jira/browse/ZOOKEEPER-1147
Diffs (updated)
-----
/src/java/main/org/apache/zookeeper/KeeperException.java 1446831
/src/java/main/org/apache/zookeeper/cli/CreateCommand.java 1446831
/src/java/main/org/apache/zookeeper/server/FinalRequestProcessor.java 1446831
/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java 1446831
/src/java/main/org/apache/zookeeper/server/Request.java 1446831
/src/java/main/org/apache/zookeeper/server/SessionTracker.java 1446831
/src/java/main/org/apache/zookeeper/server/SessionTrackerImpl.java 1446831
/src/java/main/org/apache/zookeeper/server/TraceFormatter.java 1446831
/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java 1446831
/src/java/main/org/apache/zookeeper/server/quorum/CommitProcessor.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/FollowerRequestProcessor.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/LeaderSessionTracker.java
PRE-CREATION
/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/Learner.java 1446831
/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java 1446831
/src/java/main/org/apache/zookeeper/server/quorum/LearnerSessionTracker.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/LocalSessionTracker.java
PRE-CREATION
/src/java/main/org/apache/zookeeper/server/quorum/ObserverRequestProcessor.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/ProposalRequestProcessor.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java 1446831
/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java 1446831
/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java
1446831
/src/java/main/org/apache/zookeeper/server/quorum/UpgradeableSessionTracker.java
PRE-CREATION
/src/java/test/org/apache/zookeeper/server/PrepRequestProcessorTest.java
1446831
/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
1446831
/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java
PRE-CREATION
/src/java/test/org/apache/zookeeper/test/LocalSessionRequestTest.java
PRE-CREATION
/src/java/test/org/apache/zookeeper/test/LocalSessionsOnlyTest.java
PRE-CREATION
/src/java/test/org/apache/zookeeper/test/QuorumBase.java 1446831
/src/java/test/org/apache/zookeeper/test/QuorumTest.java 1446831
/src/java/test/org/apache/zookeeper/test/QuorumUtil.java 1446831
/src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java 1446831
/src/java/test/org/apache/zookeeper/test/SessionTrackerCheckTest.java
PRE-CREATION
/src/java/test/org/apache/zookeeper/test/SessionUpgradeTest.java PRE-CREATION
Diff: https://reviews.apache.org/r/8935/diff/
Testing
-------
unit tests. For our internal branch, we haven't run into bugs related to local
session for quite a while so it is quite stable. We enabled local session by
default in all our deployment.
Thanks,
Thawan Kooburat