You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexey Scherbakov (Jira)" <ji...@apache.org> on 2021/09/23 09:14:00 UTC

[jira] [Updated] (IGNITE-15568) Striped Disruptror doesn't work with JRaft event handlers properly

     [ https://issues.apache.org/jira/browse/IGNITE-15568?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexey Scherbakov updated IGNITE-15568:
---------------------------------------
    Description: 
The following scenario is broken:
 # Two raft groups are started and mapped to the same stripe.
 # Two LogEntryAndClosure events are added in quick succession so they form distruptor batch: first for group 1, second for group 2.

First event is delivered to group 1 with endOfBatch=false, so it's cached in org.apache.ignite.raft.jraft.core.NodeImpl.LogEntryAndClosureHandler#tasks and not processed.

Second event is delivered to group 2 with endOfBatch=true and processed, but first event will remain in queue unprocessed forever, because LogEntryAndClosureHandler are different instances per raft group.

The possible WA for this is to set org.apache.ignite.raft.jraft.option.RaftOptions#applyBatch=1

.

  was:
The following scenario is broken:
 # Two raft groups are started and mapped to the same stripe.
 # Two LogEntryAndClosure events are added in quick succession so they form distruptor batch: first for group 1, second for group 2.

First event is delivered to group 1 with endOfBatch=false, so it's cached in org.apache.ignite.raft.jraft.core.NodeImpl.LogEntryAndClosureHandler#tasks and not processed.

Second event is delivered to group 2 with endOfBatch=true and processed, but first event will remain in queue unprocessed forever, because LogEntryAndClosureHandler are different instances per raft group.

The possible WA for this is to ignore disruptor event batching and process each event as soon as it is received.


> Striped Disruptror doesn't work with JRaft event handlers properly
> ------------------------------------------------------------------
>
>                 Key: IGNITE-15568
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15568
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Alexey Scherbakov
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-alpha3
>
>
> The following scenario is broken:
>  # Two raft groups are started and mapped to the same stripe.
>  # Two LogEntryAndClosure events are added in quick succession so they form distruptor batch: first for group 1, second for group 2.
> First event is delivered to group 1 with endOfBatch=false, so it's cached in org.apache.ignite.raft.jraft.core.NodeImpl.LogEntryAndClosureHandler#tasks and not processed.
> Second event is delivered to group 2 with endOfBatch=true and processed, but first event will remain in queue unprocessed forever, because LogEntryAndClosureHandler are different instances per raft group.
> The possible WA for this is to set org.apache.ignite.raft.jraft.option.RaftOptions#applyBatch=1
> .



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