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

Aleksandr Polovtsev updated IGNITE-24694:
-----------------------------------------
    Description: 
When a new table processor is added to the `ZonePartitionRaftListener` its 
storage gets initialized with some information, like the last applied index and 
Raft group configuration. However, a node can die or be restarted before this 
information gets flushed onto a persistent storage which means that upon the 
consecutive startup, this storage will return 0 as its last applied index. 
Since on startup we use the minimum last applied index across all storages 
during Raft recovery, this value will also be 0 and JRaft will think that it 
needs to replay the log from the beginning of time, while actually this came 
from a storage for an empty table, and its applied index shouldn't even be 
taken into account. An even bigger problem is that the log might have been 
truncated and cannot be restored from the 0 index, so the node won't even be 
able to start.

It is proposed to modify JRaft recovery procedure to replay the log from the 
smallest available index in case the index from the startup information 
provided by our storages is equal to 0.

> JRaft should be able to replay the log from a non-zero position
> ---------------------------------------------------------------
>
>                 Key: IGNITE-24694
>                 URL: https://issues.apache.org/jira/browse/IGNITE-24694
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Aleksandr Polovtsev
>            Assignee: Aleksandr Polovtsev
>            Priority: Major
>              Labels: ignite-3
>
> When a new table processor is added to the `ZonePartitionRaftListener` its 
> storage gets initialized with some information, like the last applied index 
> and Raft group configuration. However, a node can die or be restarted before 
> this information gets flushed onto a persistent storage which means that upon 
> the consecutive startup, this storage will return 0 as its last applied 
> index. Since on startup we use the minimum last applied index across all 
> storages during Raft recovery, this value will also be 0 and JRaft will think 
> that it needs to replay the log from the beginning of time, while actually 
> this came from a storage for an empty table, and its applied index shouldn't 
> even be taken into account. An even bigger problem is that the log might have 
> been truncated and cannot be restored from the 0 index, so the node won't 
> even be able to start.
> It is proposed to modify JRaft recovery procedure to replay the log from the 
> smallest available index in case the index from the startup information 
> provided by our storages is equal to 0.



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

Reply via email to