ivandika3 opened a new pull request, #1105:
URL: https://github.com/apache/ratis/pull/1105

   ## What changes were proposed in this pull request?
   
   In Ozone's XceiverClientRatis#watchForCommit, there are two watch commits 
request with different ReplicationLevel
   
   Watch for ALL_COMMITTED 
   Watch for MAJORITY_COMMITTED (If the previous watch threw an exception)
   Based on the second watch request, the client will remove some failed 
datanode UUID from the commitInfoMap.
   
   The second watch might not be necessary since the entries in 
AbstractCommitWatcher.commitIndexMap implies that the PutBlock request has been 
committed to the majority of the servers. Therefore, another MAJORITY_COMMITTED 
watch might not be necessary. From my understanding, the second 
MAJORITY_COMMITTED only serves to gain information to remove entries from 
commitInfoMap.
   
   If the first watch failed with NotReplicatedException, we might be able to 
remove the need to a second watch request. Since NotReplicatedException is a 
Raft server exception, we can include the CommitInfoProtos in the 
NotReplicatedException. The client can use this CommitInfoProtos to remove the 
entry from commitInfoMap without sending another WATCH request. 
   
   This CommitInfoProto is returned for every RaftClientReply 
(RaftClientReply.commitInfos), but if there is an exception, it seems the 
RaftClientReply is not accessible to the client.
   
   However, if the exception is a client exception (e.g. due to Raft client 
watch timeout configuration), the client might have no choice but to send 
another watch request.
   
   So in this patch, I propose to include CommitInfoProto into 
NotReplicatedException. 
   
   This only introduces a client-side change by reusing the commitInfos in 
RaftClientReply.
   
   ## What is the link to the Apache JIRA
   
   https://issues.apache.org/jira/browse/RATIS-2089
   
   ## How was this patch tested?
   
   Add a unit test to ensure commitInfoProto is not null during 
NotReplicateException.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@ratis.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to