Research Article

Virtual Net: A Decentralized Architecture for Interaction in Mobile Virtual Worlds

Algorithm 7

Leader election.
1. On any replica:
2. Upon rL∉Rrcself
3.  LE true
4.  rc SelectLeader()
5.  If rc = self then
6.   Reliably broadcast LE_QUERY to G∩R
7.
8. SelectLeader()
9.  Rc  :=
10.  If = 1, then
11.   Return ri: ri∈Rc
12.  Else
13.   Return ri: ri∈Rc  ∧ ri.ID =
14.
15.
16 Upon LE_QUERY from rc
17.  If rc∈Rrc = SelectLeader(), then
18.   LE true
19.   LE_STATE (Qd, E, cid, G, epoch)
20.   Reliably send LAST_STATE to rc
21.  Else
22.   Reliably send NACK to rc
23.
24. Upon LOAD_LEADER(Qd’, E’, epoch’, cid’, G’, Init)
    from rc  ∧ rc∈Rrc = SelectLeader()
25.  (Qd, E, cid, G, epoch) (Qd’, E’, cid’, G’, epoch’ + 1)
26.  (rL, rc) (rc, ⊥)
27.  LE false
28.  If newReplica = true, then                 // New replica initialization is
29.   Initialize(Init)                      needed, in case that a group
30.   newReplica false                   reconfiguration is interrupted
                              by a leader election
31.
32.
33. Upon NACK from ri
34.  If self = Selectleader()
35.   Reliably send LE_QUERY to ri
36.  Else
37.   rc
38.
39. Upon LE_STATE(Qd,i, Ei, cidi, Gi, epochi) from ri
40.  Events←Events∪  
41.  Decisions←Decision∪  
42.  Configs←Configs∪  
43.  Epochs←Epochs∪  
44.  Senders←Senders∪  
45.
46. Upon G∩R ⊆ Senders
47.  Qd Longest(Events)
48.  E Merge(Decisions)
49.   (cid, G) Latest(Configs)
50.  epoch Latest(Epochs)
51.  Init← (t0,, (λc, state),          // state: current application
    ,S)                          state
52.  LOAD_ LEADER (Qd, E, epoch, cid, G, Init)
53.  Reliably broadcast LOAD_LEADER to G∩R
54.  Broadcast G to S