[
https://issues.apache.org/jira/browse/SOLR-8372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15051213#comment-15051213
]
Yonik Seeley commented on SOLR-8372:
------------------------------------
Buffering is done during recovery-via-index-replication... the leader starts
forwarding updates and then does a commit we can replicate from. If that whole
process is canceled and restarted, we only need to replay from the last time
bufferUpdates() was called (all of the previously buffered updates should be in
the new index snapshot we are going to get).
Are there other scenarios where this wouldn't be the right thing to do? I
guess we need an audit of every place that bufferUpdates() is called.
> Canceled recovery can lead to data loss
> ---------------------------------------
>
> Key: SOLR-8372
> URL: https://issues.apache.org/jira/browse/SOLR-8372
> Project: Solr
> Issue Type: Bug
> Reporter: Yonik Seeley
>
> A recovery via index replication tells the update log to start buffering
> updates. If that recovery is canceled for whatever reason by the replica,
> the RecoveryStrategy calls ulog.dropBufferedUpdates() which stops buffering
> and places the UpdateLog back in active mode. If updates come from the
> leader after this point (and before ReplicationStrategy retries recovery),
> the update will be processed as normal and added to the transaction log. If
> the server is bounced, those last updates to the transaction log look normal
> (no FLAG_GAP) and can be used to determine who is more up to date.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]