[
https://issues.apache.org/jira/browse/IGNITE-18011?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Roman Puchkovskiy updated IGNITE-18011:
---------------------------------------
Description:
When freezing an outgoing snapshot scope (see
{{{}OutgoingSnapshot#freezeScope(){}}}), we need to get snapshot metadata
corresponding to the contents of our storages (MV+TX) at that precise moment.
The snapshot metadata includes last applied index (which we have), also term
and lists of followers and learners which we need to obtain. In JRaft, we can
take them from LogManager.
The problem is that JRaft does not provide a way to get the corresponding
{{LogManager}} from this code. The 'right' way to fix this would be to change
JRaft internals so that LogManager instance is made available to snapshot
readers. But we should not touch JRaft core when we can avoid this (because, in
the future, we might need to merge new version of JRaft into our codebase). So
current implementation adds a way to obtain the current JRaft Node and then
take LogManager instance from it.
A facility to get peers (followers/learners) is planned in the future, it could
be used instead of a LogManager. But it's not clear how a term could be
obtained without it.
was:TBD
> Avoid hacky way to get LogManager for streaming RAFT snapshot reading
> ---------------------------------------------------------------------
>
> Key: IGNITE-18011
> URL: https://issues.apache.org/jira/browse/IGNITE-18011
> Project: Ignite
> Issue Type: Improvement
> Components: persistence
> Reporter: Roman Puchkovskiy
> Assignee: Roman Puchkovskiy
> Priority: Major
> Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> When freezing an outgoing snapshot scope (see
> {{{}OutgoingSnapshot#freezeScope(){}}}), we need to get snapshot metadata
> corresponding to the contents of our storages (MV+TX) at that precise moment.
> The snapshot metadata includes last applied index (which we have), also term
> and lists of followers and learners which we need to obtain. In JRaft, we can
> take them from LogManager.
> The problem is that JRaft does not provide a way to get the corresponding
> {{LogManager}} from this code. The 'right' way to fix this would be to change
> JRaft internals so that LogManager instance is made available to snapshot
> readers. But we should not touch JRaft core when we can avoid this (because,
> in the future, we might need to merge new version of JRaft into our
> codebase). So current implementation adds a way to obtain the current JRaft
> Node and then take LogManager instance from it.
> A facility to get peers (followers/learners) is planned in the future, it
> could be used instead of a LogManager. But it's not clear how a term could be
> obtained without it.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)