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

Fangmin Lv commented on ZOOKEEPER-3594:
---------------------------------------

[~hanm] this is the skip error txn feature I mentioned in your ACL skip Jira, 
Vlad spent lots of effort to make this working, which proved to improve a lot 
of efficiency in ZK for traffic pattern which may have lots of errors.

Vlad will upstream this feature soon, please help review.

> Ability to skip proposing requests with error transactions
> ----------------------------------------------------------
>
>                 Key: ZOOKEEPER-3594
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3594
>             Project: ZooKeeper
>          Issue Type: New Feature
>          Components: quorum, server
>    Affects Versions: 3.5.6
>            Reporter: Vladimir Ivić
>            Assignee: Vladimir Ivić
>            Priority: Major
>
> Ensembles that have a high write request rate could be skipping proposing 
> requests that contain errors instead of having the quorum vote on those 
> transactions.
> For example, having a sizable write traffic that results in error 
> transactions would be creating additional network and log disk space overhead 
> for each of the requests that would only return errors to the client in the 
> end (e.g. delete non-existing path, version mismatch, trying to create a node 
> that already exists etc). 
> Currently, there is no such logic in the ProposalRequestProcessor, every 
> request that comes out of PrepRequestProcessor will be proposed to the 
> quorum.  
> Proposed solution workflow:
>  * A client sends a new write request trying to setData on an non-existing 
> node
>  * The server accepts the request and sends it through the 
> PrepRequestProcessor
>  * PrepRequestProcessor detects the error and assigns the error transaction 
> to the request
>  * Between PrepRequestProcessor and ProposalRequestProcessor there is another 
> processor named SkipRequestProcessor which sole responsibility is to decide 
> will the request be forwarded or returned to the originating quorum peer 
> (Leader or Learner).
>  * The quorum peer waits for all previous requests to complete before the 
> error request proceeds with echoing the error back to the client.
> Requirements: 
>  * We should be conservative about the use of ZXID. If the request generates 
> an error transaction we don't want to increment the last proposed ZXID and 
> cause any gaps in the log.
>  * Request that are found to be invalid should be sent directly to the origin 
> (either to the corresponding Learner or to the Leader directly) so there is 
> exactly one roundtrip for each request with error transaction.
>  * All the requests must preserve its order, the changes must be backwards 
> compatible with the Zookeeper ordering guarantees. 
>  Challenges:
>  * Skipping request without having them go through the proposal pipeline 
> poses a challenge in preserving Zookeeper transaction order.
>  * Avoiding any additional changes inside CommitProcessor if possible.
>  * Have unified logic for all three different paths in which write requests 
> can come through:
>  ## Via Leader placed directly into the PrepRequestProcessor
>  ## Via Follower where the request is forwarded to the leader and also passed 
> to CommitProcessor to wait for COMMIT packet
>  ## Via Observer, where the request is forwarded to the Leader and the 
> Observer waits for the INFORM packet



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to