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

Tsz-wo Sze commented on RATIS-979:
----------------------------------

This is a good question.

In the current design, the primary server calls submitRaftClientRequest.  
close() is the contract -- close() success means that the data is persisted in 
the system.  In other words, the data is not yet persisted before close().  We 
may cleanup the data if the client dies before close() return success.

Suppose the client closes stream and then calls 
RaftClientAsynchronousProtocol.submitClientRequestAsync.  We need to define 
what does close() mean.  What should happen if the client has called close() 
but never calls submitClientRequestAsync()?  A problem is that there is a gap 
between the close and submitClientRequestAsync.  If the client does not call 
submitClientRequestAsync, Ratis cannot tell if the client is dead or the client 
is slow.  Then, it is hard to clean up the data.

> Ratis streaming
> ---------------
>
>                 Key: RATIS-979
>                 URL: https://issues.apache.org/jira/browse/RATIS-979
>             Project: Ratis
>          Issue Type: New Feature
>          Components: Streaming
>            Reporter: Tsz-wo Sze
>            Assignee: Tsz-wo Sze
>            Priority: Major
>         Attachments: RatisStreaming20200929.pdf
>
>
> In this JIRA, we design and implement Ratis Streaming with zero buffer 
> copying and asynchronous event driven.



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

Reply via email to