Failure Detectors
Concurrency Trilogy Part IV
Failure Detectors Concurrency Trilogy Part IV Announcements - - PowerPoint PPT Presentation
Failure Detectors Concurrency Trilogy Part IV Announcements Project proposals are due tonight, unless you got an extension. Announcements Project proposals are due tonight, unless you got an extension. Only a few hours left to submit
Concurrency Trilogy Part IV
Application Application Application Application Ordering Ordering Ordering Ordering
Application Application Application Application Ordering Ordering Ordering Ordering
Client Client Client Client
Application Application Application Application Ordering Ordering Ordering Ordering
Client Client Client Client
Application Application Application Application Ordering Ordering Ordering Ordering
Client Client Client Client
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
Raft Raft Raft Raft
Client Client Client Client
Raft Raft Raft Raft
Client Client Client Client
Application Application Application Application Raft Raft Raft Raft
Client Client Client Client The act of executing a command at the application is destructive. Cannot undo a command.
Application Application Application Application Raft Raft Raft Raft
Client Client Client Client Requirement: All application replicas end up in the same state.
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1
M0 M1 M2 M3
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1 2 2 2 AppendEntries
M0 M1 M2 M3
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1 2 2 2 AppendEntries
set(x, 5)
3
M0 M1 M2 M3
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1 2 2 2 AppendEntries
set(x, 5)
3 4
M0 M1 M2 M3
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1 2 2 2 AppendEntries
set(x, 5)
3 4
success
5
M0 M1 M2 M3
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client
set(x, 5)
1 2 2 2 AppendEntries
set(x, 5)
3
success
5 4
M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
For which replicas is x=5?
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
When?
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
set(x, 5)
6
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
set(x, 5)
6
Is this safe?
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
set(x, 5)
6
Is this safe?
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
AppendEntries
b
get(x), 1, 2
leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
get(x)
c leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
get(x)
c
Is this correct?
leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
get(x)
c
Is this correct?
leaderCommit =-1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
set(x,5)
c leaderCommit = 0
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
set(x,5)
c
get(x)
d
KeyValue(x, 5)
e leaderCommit = 1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
get(x)
a
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
b
set(x,5)
c
get(x)
d
KeyValue(x, 5)
e
KeyValue(x, 5)
f leaderCommit = 1
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
cas(x, 5, 4)
i leaderCommit = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
cas(x, 5, 4)
i
cas(x,5,4), 2, 2
leaderCommit = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
h
cas(x, 5, 4)
i
cas(x,5,4), 2, 2
leaderCommit = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
h
cas(x, 5, 4)
i
cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2
leaderCommit = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
h
cas(x, 5, 4)
i
cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2
Is this correct?
leaderCommit = 2
KVStore KVStore KVStore KVStore Raft Raft Raft Raft
Client Client Client Client M0 M1 M2 M3
M0 M1 M2 M3
set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1 set(x, 5), 0, 1
Term = 2
cas(x, 5, 4)
g
get(x), 1, 2 get(x), 1, 2 get(x), 1, 2 get(x), 1, 2
AppendEntries
h
cas(x, 5, 4)
i
cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2 cas(x,5,4), 2, 2
KeyValue(x, 4)
j
k leaderCommit = 2
Term Config Index
Term Config Index
Term Config Index
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
C
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
C
5
...
3
...
4
C
5
...
2
...
3
...
4
C
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2
...
3
...
4
C
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2
...
3
...
4
C
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2
...
3
...
4
C
5 1
...
3
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2
...
3
...
4
C
5 1
...
3
...
2 1
...
3
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2 1
...
3
...
2 1
...
3
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2 1
...
3
...
2 1
...
3
...
2 1
...
3
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
2 1
...
3
...
2 1
...
3
...
2 1
...
3
What happens now?
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
C-all
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
C-all
5
...
3
...
4
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
...
2
C-all
5
...
3
...
4
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
C-new
5
set(x, 5) set(x, 5) set(x, 6)
1
set(x, 6)
1
...
2
...
3
...
4
C-all
5
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
set(x, 5) set(x, 6)
1
...
2
...
3
...
4
C-all
5
C-new
5
C-new
5
C-new
5
C-new
5
Application Failure Detector
Application Failure Detector
suspect p0 is failed.
Application Failure Detector
suspect p0 is failed. suspect p0, p1 are failed.
Application Failure Detector
suspect p0 is failed. suspect p0, p1 are failed. suspect p1, p2 are failed.
Application Failure Detector
suspect p0 is failed. suspect p0, p1 are failed. suspect p1, p2 are failed. suspect p1 is failed.
Completeness Accuracy
Completeness Accuracy Failed nodes:
Completeness Accuracy Failed nodes:
Live nodes:
Completeness Accuracy Strong Weak
Completeness Accuracy Strong Weak Every failed node is eventually detected by all correct nodes.
Completeness Accuracy Strong Weak Every failed node is eventually detected by all correct nodes. Every failed node is eventually detected by some correct nodes.
Completeness Accuracy Strong Weak Every failed node is eventually detected by all correct nodes. Every failed node is eventually detected by some correct nodes. No correct node is ever suspected.
Completeness Accuracy Strong Weak Every failed node is eventually detected by all correct nodes. Every failed node is eventually detected by some correct nodes. No correct node is ever suspected. Some correct node is never suspected by any node.
Strong Weak
Strong Weak Eventually No correct node is ever suspected.
Strong Weak Eventually No correct node is ever suspected. No correct node is ever suspected.
Strong Weak Eventually No correct node is ever suspected. No correct node is ever suspected. Eventually some correct node is never suspected by any node.
Strong Weak Eventually No correct node is ever suspected. No correct node is ever suspected. Eventually some correct node is never suspected by any node. Some correct node is never suspected by any node.