Skip to content

Partition detection #27

@manuelbernhardt

Description

@manuelbernhardt

Summarizing the discussion I've had with @lalithsuresh per e-mail on this topic so far:

In the event of a 2-way network partition, consensus can be reached on the majority but not on the minority side. Note that in order to do so reliable, the reinforcement mechanism described in the last paragraph of section 4.2 of the paper needs to be implemented.

On the minority side, no consensus can be reached. I currently have two ideas that would allow to make progress (where progress means informing the application that we are out).

Consensus timeout

After fast-paxos times out and paxos times out, conclude that we can't reach consensus fast enough and leave. Note that I am not sure yet that even with the reinforcement mechanism as described in the paper there'd be a way to reach a cut detection under those circumstances.

Extend the reinforcement mechanism to include partition detection

I think it may be possible to evolve the reinforcement mechanisms so that:

  • the timeout starts to count down only once there have not been any new alerts received as a whole (and not on a per-subject basis)
  • all reinforced-REMOVEs are broadcasted at once. This broadcast retries alerts and/or has a higher timeout (i.e. we really would like to get a good sense of who else is there with us)
  • when it broadcasts the reinforced-REMOVEs, it keeps a count of how many responses it gets / how many requests made it through
  • if a majority of nodes can be reached, proceed as usual
  • if only a minority can be reached, infer / detect that there has been a partition and that we are in the minority side

I think there could be a way for the system to detect that there has been a partition and go into "partition consensus" mode. For example I think that by counting the reinforced-REMOVEs it would be possible to confirm that there's only as many nodes left in the same side of the partition as inferred by the broadcast count. I.e. if I broadcast to m nodes and I also receive at most m reinforced-REMOVE alerts then that should give me a high confidence that we're the only ones left on that side. If I receive more than m, then a two-way partition cannot be assumed. (note that I think that reinforced-REMOVE needs to become its own alert type to be able to distinguish late REMOVEs from the reinforced ones).

Once a minority partition has been detected the minority side can proceed to shut down.

I have not yet thought this through for 3-way partitions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions