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

Alexander Lapin updated IGNITE-17263:
-------------------------------------
    Description: 
In order to perform replica reads, it's required either to use read index or 
check the safe time. Let's recall corresponding section from tx design document.

RO transactions can be executed on non-primary replicas. write intent 
resolution doesn’t help because a write intent for a committed transaction may 
not be yet replicated to the replica. To mitigate this issue, it’s enough to 
run readIndex on each mapped partition leader, fetch the commit index and wait 
on a replica until it’s applied. This will guarantee that all required write 
intents are replicated and present locally. After that the normal write intern 
resolution should do the job.

There is a second option, which doesn’t require the network RTT. We can use a 
special low watermark timestamp (safeTs) per replication group, which 
corresponds to the apply index of a replicated entry, so then an apply index is 
advanced during the replication, then the safeTs is monotonically incremented 
too. The HLC used for safeTs advancing is assigned to a replicated entry in an 
ordered way.

Special measures are needed to periodically advance the safeTs if no updates 
are happening. It’s enough to use a special replication command for this 
purpose.

All we need during RO txn is to wait until a safeTs advances past the RO txn 
readTs. 
 !Screenshot from 2022-07-06 16-48-30.png! 

> Implement leader to replica safe time propagation
> -------------------------------------------------
>
>                 Key: IGNITE-17263
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17263
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Alexander Lapin
>            Priority: Major
>              Labels: ignite-3, transaction3_ro
>         Attachments: Screenshot from 2022-07-06 16-48-30.png, Screenshot from 
> 2022-07-06 16-48-41.png
>
>
> In order to perform replica reads, it's required either to use read index or 
> check the safe time. Let's recall corresponding section from tx design 
> document.
> RO transactions can be executed on non-primary replicas. write intent 
> resolution doesn’t help because a write intent for a committed transaction 
> may not be yet replicated to the replica. To mitigate this issue, it’s enough 
> to run readIndex on each mapped partition leader, fetch the commit index and 
> wait on a replica until it’s applied. This will guarantee that all required 
> write intents are replicated and present locally. After that the normal write 
> intern resolution should do the job.
> There is a second option, which doesn’t require the network RTT. We can use a 
> special low watermark timestamp (safeTs) per replication group, which 
> corresponds to the apply index of a replicated entry, so then an apply index 
> is advanced during the replication, then the safeTs is monotonically 
> incremented too. The HLC used for safeTs advancing is assigned to a 
> replicated entry in an ordered way.
> Special measures are needed to periodically advance the safeTs if no updates 
> are happening. It’s enough to use a special replication command for this 
> purpose.
> All we need during RO txn is to wait until a safeTs advances past the RO txn 
> readTs. 
>  !Screenshot from 2022-07-06 16-48-30.png! 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to