You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Kaijie Chen (Jira)" <ji...@apache.org> on 2021/07/22 08:02:00 UTC

[jira] [Commented] (HDDS-5481) Fix stream() and link() method in ContainerStateMachine

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

Kaijie Chen commented on HDDS-5481:
-----------------------------------

For more info, checkout this [commit|https://github.com/ckj996/ozone/commit/a2da593cfdb608c0de496acdea3ce98114bbe5ca] in our POC code. 

> Fix stream() and link() method in ContainerStateMachine
> -------------------------------------------------------
>
>                 Key: HDDS-5481
>                 URL: https://issues.apache.org/jira/browse/HDDS-5481
>             Project: Apache Ozone
>          Issue Type: Sub-task
>            Reporter: Kaijie Chen
>            Assignee: Kaijie Chen
>            Priority: Critical
>
> The link() method is missing `Override` annotation.
> The stream() method has a bug: the parsing of request.message is inconsistent with the ContainerStateMachine#startTransaction(), which will be called during the close of the stream. This caused the stream closing issue in our POC.
>  
> Here is the details about the issue in stream() method, by diving deep into the Ratis streaming implementation: 
>  
> When initializing the stream, we need pass a headerMessage to DataStreamApi#stream().
> {code:java}
> DataStreamOutput stream(ByteBuffer headerMessage, RoutingTable routingTable); 
> {code}
> This message will be used again when calling the DataStreamOutput#close, by the primary DataNode, in DataStreamManageMent#startTransaction.
> It is wrapped in a Raft FORWARD request, then unwrapped in the RaftServerImpl#SubmitClientRequestAsync. The filter here is doing the unwrap job.
> {code:java}
> TransactionContext context = stateMachine.startTransaction(filterDataStreamRaftClientRequest(request));{code}
> Then it hands the headerMessage to ContainerStateMachine#startTransaction.
>  
> In ContainerStateMachine#startTransaction, it's expecting the request being a ContainerCommandRequestMessage.
> However, in ContainerStateMachine#stream, it's expecting the same request being a ContainerCommandRequestProto.
> So we have to change the ContainerStateMachine#stream to match ContainerStateMachine#startTransaction.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org