Skip to content

Trace validation: receiving a partial update doesn't validate #7635

@cjen1-msft

Description

@cjen1-msft

I don't have a reliable repro for this apart from the long-sync-divergence test (create a multi-term divergence in the ledgers).

The shape of the problem seems to be that if we have a primary and a backup, and the primary sends an append entries which is rooted within the backup's prefix of the ledger, but is completely valid, that this is not covered by any of the AcceptAppendEntries cases.

  • AppendEntriesAlreadyDone is obviously false
  • NoConflictAppendEntries requires the append entries to be rooted at the end of the prefix
  • ConflictAppendEntries requires the terms to not match of an entry in the ledger

So none of the options are valid even though this is a behaviour of raft.h

This seems to happen during sufficiently complex divergence fixup, but nowhere else, and I am having trouble creating a scenario showing this happen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    tlaTLA+ specifications

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions