You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2021/07/22 08:17:00 UTC
[jira] [Updated] (HDDS-5481) Fix stream() and link() method in
ContainerStateMachine
[ https://issues.apache.org/jira/browse/HDDS-5481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated HDDS-5481:
---------------------------------
Labels: pull-request-available (was: )
> 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
> Labels: pull-request-available
>
> 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