[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13791405#comment-13791405
 ] 

Hudson commented on ZOOKEEPER-1147:
-----------------------------------

SUCCESS: Integrated in ZooKeeper-trunk #2084 (See 
[https://builds.apache.org/job/ZooKeeper-trunk/2084/])
ZOOKEEPER-1147. Add support for local sessions (Jay Shrauner, thawan via 
thawan) (thawan: 
http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1530781)
* /zookeeper/trunk/CHANGES.txt
* /zookeeper/trunk/src/c/include/zookeeper.h
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/KeeperException.java
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/cli/CreateCommand.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/FinalRequestProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/Request.java
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTracker.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTrackerImpl.java
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/TraceFormatter.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/CommitProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerRequestProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderRequestProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderSessionTracker.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
* /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Learner.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerSessionTracker.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalSessionTracker.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverRequestProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ProposalRequestProcessor.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java
* 
/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/UpgradeableSessionTracker.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/PrepRequestProcessorTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/DuplicateLocalSessionUpgradeTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LocalSessionRequestTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LocalSessionsOnlyTest.java
* /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumBase.java
* /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java
* /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumUtil.java
* /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTrackerCheckTest.java
* 
/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionUpgradeTest.java


> Add support for local sessions
> ------------------------------
>
>                 Key: ZOOKEEPER-1147
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1147
>             Project: ZooKeeper
>          Issue Type: Improvement
>          Components: server
>    Affects Versions: 3.3.3
>            Reporter: Vishal Kathuria
>            Assignee: Thawan Kooburat
>              Labels: api-change, scaling
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1147.patch, ZOOKEEPER-1147.patch, 
> ZOOKEEPER-1147.patch, ZOOKEEPER-1147.patch, ZOOKEEPER-1147.patch, 
> ZOOKEEPER-1147.patch, ZOOKEEPER-1147.patch, ZOOKEEPER-1147.patch, 
> ZOOKEEPER-1147.patch
>
>   Original Estimate: 840h
>  Remaining Estimate: 840h
>
> This improvement is in the bucket of making ZooKeeper work at a large scale. 
> We are planning on having about a 1 million clients connect to a ZooKeeper 
> ensemble through a set of 50-100 observers. Majority of these clients are 
> read only - ie they do not do any updates or create ephemeral nodes.
> In ZooKeeper today, the client creates a session and the session creation is 
> handled like any other update. In the above use case, the session create/drop 
> workload can easily overwhelm an ensemble. The following is a proposal for a 
> "local session", to support a larger number of connections.
> 1.       The idea is to introduce a new type of session - "local" session. A 
> "local" session doesn't have a full functionality of a normal session.
> 2.       Local sessions cannot create ephemeral nodes.
> 3.       Once a local session is lost, you cannot re-establish it using the 
> session-id/password. The session and its watches are gone for good.
> 4.       When a local session connects, the session info is only maintained 
> on the zookeeper server (in this case, an observer) that it is connected to. 
> The leader is not aware of the creation of such a session and there is no 
> state written to disk.
> 5.       The pings and expiration is handled by the server that the session 
> is connected to.
> With the above changes, we can make ZooKeeper scale to a much larger number 
> of clients without making the core ensemble a bottleneck.
> In terms of API, there are two options that are being considered
> 1. Let the client specify at the connect time which kind of session do they 
> want.
> 2. All sessions connect as local sessions and automatically get promoted to 
> global sessions when they do an operation that requires a global session 
> (e.g. creating an ephemeral node)
> Chubby took the approach of lazily promoting all sessions to global, but I 
> don't think that would work in our case, where we want to keep sessions which 
> never create ephemeral nodes as always local. Option 2 would make it more 
> broadly usable but option 1 would be easier to implement.
> We are thinking of implementing option 1 as the first cut. There would be a 
> client flag, IsLocalSession (much like the current readOnly flag) that would 
> be used to determine whether to create a local session or a global session.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to