[
https://issues.apache.org/jira/browse/RATIS-2102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Siyao Meng updated RATIS-2102:
------------------------------
Component/s: server
> AsyncApi#send() is not handling retry and reply correctly for replication
> levels higher than MAJORITY
> -----------------------------------------------------------------------------------------------------
>
> Key: RATIS-2102
> URL: https://issues.apache.org/jira/browse/RATIS-2102
> Project: Ratis
> Issue Type: Bug
> Components: server
> Affects Versions: 3.1.0
> Reporter: Siyao Meng
> Assignee: Siyao Meng
> Priority: Major
>
> RATIS-1994 adds a feature allowing AsyncApi#send() to return only when a
> specified replication level is reached. This was done by adding
> waitForReplication() in RaftServer.
> However, two bugs are found with RATIS-1994 when the (write) replication
> level is set to higher than MAJORITY (the default):
> 1. When the request is retried (e.g. when timed out), the future retrieved
> from cache is not correctly waited on with waitForReplication() again. This
> causes divergence in the desired behavior depending on if the request is
> retried or not. This is fixed by invoking waitForReplication() in
> writeAsync() rather than appendTransaction().
> 2. waitForReplication()'s watch request reply was incorrectly ignored, this
> is fixed by combining the reply from write and watch together using
> combineReplies()
--
This message was sent by Atlassian Jira
(v8.20.10#820010)