[SERVER-56619] Arbiters should explicitly clear their durable optime Created: 04/May/21 Updated: 06/Dec/22 |
|
| Status: | Backlog |
| Project: | Core Server |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Matthew Russotto | Assignee: | Backlog - Replication Team |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | former-quick-wins | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||
| Assigned Teams: |
Replication
|
||||||||||||
| Operating System: | ALL | ||||||||||||
| Backport Requested: |
v4.4, v4.2
|
||||||||||||
| Participants: | |||||||||||||
| Description |
|
Right now when a node starts up or has a config change, if it is not an arbiter it reads its last optime from the top of the oplog. If it is an arbiter it does not, but it does not clear the last optime either. So if a node goes from being not an arbiter (i.e. REMOVED, which can happen due to network errors) to being an arbiter, and it happens to have an oplog (which an arbiter might if it was ever started as a primary or secondary), it will end up with an old and possibly invalid (e.g. missing term or wall time) value for lastDurableOpTime, which will remain until the next restart. |