(1) /* Task of a proposer (client) */ |
(2) Create a new request |
(3) Choose any disseminator randomly. |
(4) Send <request> to using first LAN |
(5) Upon not receiving any reply message <request_id> from any disseminator until time, |
(6) Repeat from step 3 |
(7) Upon receiving a reply message <request_id> from any disseminator |
(8) Send <request_id> to using second LAN |
(9) If (want to send more requests?) |
(10) Repeat from step 2, |
(11) Else, exit. |
(12) /* Task of a disseminator */ |
(13) Upon receiving <request> from any client |
(14) Multicast <request> to all disseminators and learners using first LAN |
(15) Upon receiving <request> from any disseminator |
(16) |
(17) Send <request_id> to d using second LAN |
(18) Multicast <request_id> to all sequencers using second LAN, |
(19) Repeat from step 18 after every Δ2 time, until |
(20) Upon receiving <request_id> message from at least a majority of disseminators or |
(21) If (received the corresponding request from the client) |
(22) Then |
(23) Send <request_id> to the corresponding client using second LAN |
(24) Repeat from step 23 after every Δ3 time, until it receives a reply message <request_id> from the corresponding client |
or client’s failure is detected |
(25) Upon receiving <request_id> from any disseminator , and after time |
(26) Send <Resend, request_id> to using second LAN |
(27) Upon receiving <Resend, request_id> from any disseminator p |
(28) Send <request> to using first LAN |
(29) Upon receiving <Resend, request_id > from a learner |
(30) If |
(31) Send < request > to using first LAN |
(32) If |
(33) Send <Resend, request_id> to any other disseminator using second LAN |
(34) Upon not receiving corresponding request after time Repeat from step 32 |
(35) /* Task of a sequencer */ |
(36) Upon receivingsame <request_id> from at least a majority of disseminators |
(37) |
(38) /* Task of a learner */ |
(39) If (learner is not at disseminator’s site) |
(40) Then |
(41) Upon receiving <request> from any disseminator |
(42) |
(43) If |
|
(44) Send <Resend, request_id> to any disseminator using second LAN |
(45) Upon not receiving corresponding request after time Repeat from step 43 |
(46) Execute requests in an order as provided by ordering layer. |