Research Article

HT-Paxos: High Throughput State-Machine Replication Protocol for Large Clustered Data Centers

Algorithm 1

Dissemination layer of HT-Paxos.
(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.