summaryrefslogtreecommitdiffstats
path: root/doc/mon/paxos-call-chain.dot
blob: cdca200f0b450ac0a2e2b790d1326119d27e420f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
digraph Paxos {
  concentrate=true
//  subgraph cluster0 {
    collect -> state_recovering;
    collect -> send_mmp_collect -> handle_collect [style=dotted];
    handle_collect -> send_mmp_last;
    send_mmp_last -> handle_last [style=dotted];
    handle_last -> collect [label="collect(last_pn)"];
    handle_last -> send_mmp_commit;
    handle_last -> state_active;
    handle_last -> begin;
    handle_last -> extend_lease;

//    color=grey;
//    style=filled;
//    label="Post-Election call chain";
//  }

  election_finished -> leader_init;
  leader_init -> collect [label="collect(0)"];
  send_mmp_commit -> handle_commit [style=dotted];

  begin -> state_updating;
  begin -> send_mmp_begin;
  begin -> commit;
  
  send_mmp_begin -> handle_begin [style=dotted];
  handle_begin -> state_updating;
  handle_begin -> send_mmp_accept;
  send_mmp_accept -> handle_accept [style=dotted];

  handle_accept -> extend_lease;
  handle_accept -> state_active;
  handle_accept -> commit;

  extend_lease -> send_mmp_lease;
  send_mmp_lease -> handle_lease [style=dotted];
  handle_lease -> state_active;
  handle_lease -> send_mmp_lease_ack;
  send_mmp_lease_ack -> handle_lease_ack [style=dotted];

  commit -> send_mmp_commit;
  commit -> "last_committed++" [shape=box];
  send_mmp_commit -> handle_commit [style=dotted];

  handle_commit -> store_state;

  propose_pending -> propose_new_value;
  propose_new_value -> begin;

  election_finished [label="Election Finished", shape=box, bgcolor=grey, style=filled];
  collect	    [label="collect()", shape=box];
  commit	    [label="commit()", shape=box];
  begin		    [label="begin()", shape=box];
  extend_lease	    [label="extend_lease()", shape=box];
  store_state	    [label="store_state()"]; // peon

  propose_pending   [label="PaxosService::propose_pending()"];
  propose_new_value [label="propose_new_value"];

  send_mmp_collect  [label="send(OP_COLLECT)", shape=box];
  send_mmp_last	    [label="send(OP_LAST)"];
  send_mmp_commit   [label="send(OP_COMMIT)", shape=box];
  send_mmp_begin    [label="send(OP_BEGIN)", shape=box];
  send_mmp_accept   [label="send(OP_ACCEPT)"];
  send_mmp_lease    [label="send(OP_LEASE)", shape=box];
  send_mmp_lease_ack [label="send(OP_LEASE_ACK)"];

  handle_collect    [label="handle_collect()"];
  handle_last	    [label="handle_last()", shape=box];
  handle_begin	    [label="handle_begin()"];
  handle_accept	    [label="handle_accept()", shape=box];
  handle_lease	    [label="handle_lease()"];
  handle_lease_ack  [label="handle_lease_ack()", shape=box];
  handle_commit	    [label="handle_commit()"];

  leader_init	    [label="Paxos::leader_init()", shape=box];

  state_recovering  [label="RECOVERING", shape=diamond];
  state_active	    [label="ACTIVE", shape=diamond];
  state_updating    [label="UPDATING", shape=diamond];
}