Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix PurgeEx replay with sequence & keep succeeds (#4213)
PR #4212 fixed the issue I reported in #4196. However, I believe there might be a bug when both `sequence` and `keep` are set during recovery. In the `PurgeEx` the following check is done (for both `filestore.go` and `memstore.go`): ```go if sequence > 1 && keep > 0 { return 0, ErrPurgeArgMismatch } ``` The `TestJetStreamClusterPurgeExReplayAfterRestart` also triggers this case, meaning that during the test this error is returned but it succeeds because the purge was already performed. Is this intended behaviour? To elaborate a bit more, I believe the following happens: - when running the purge normally it will properly run the `keep` (since it's not combined with `sequence` yet) - when replaying the purge though, the `sequence` is added to the `keep`, which errors out in the above if Which means that during normal operation all will be well, but purges with `keep` will be ignored upon replaying. I'm proposing to remove the `sequence > 1 && keep > 0` check and subsequent error. Which, for reference, was introduced in #3121. Hoping this ensures that during recovery, purges that haven't executed yet will still be executed. An alternative approach, which wouldn't remove the error: not allow combining `sequence` and `keep` normally and only allowing it during recovery. Which would preserve the current behaviour, and correctly apply `sequence+keep` during recovery still. However, not sure if it's possible to know if we're in "recovery mode" from within `PurgeEx`. Resolves #4196
- Loading branch information