package Ġuk . t vid al . k raft . engine Ċ Ċ import Ġuk . t vid al . k raft . Raft Node Ċ import Ġuk . t vid al . k raft . message . client . Client Append Ack Message Ċ import Ġuk . t vid al . k raft . message . client . Client Append Message Ċ import Ġuk . t vid al . k raft . message . client . Client ErrorType Ċ import Ġuk . t vid al . k raft . message . raft . Append Ack Message Ċ import Ġuk . t vid al . k raft . message . raft . Append Message Ċ import Ġuk . t vid al . k raft . message . raft . Request Vote Message Ċ import Ġuk . t vid al . k raft . message . raft . Vote Message Ċ import Ġuk . t vid al . k raft . storage . KR aft Entries Ċ import Ġuk . t vid al . k raft . transport . KR aft Transport Ċ Ċ internal Ġinterface ĠR aft Message Sender Ġ: ĠR aft State Ġ{ ĊĊĠĠĠ Ġval Ġtransport : ĠK Raft Transport ĊĊĠĠĠ Ġfun Ġsender ( to : ĠR aft Node ) Ġ= Ġtransport . sender ( to ) ĊĊĠĠĠ Ġfun Ġappend ( to : ĠR aft Node , Ġprev Index : ĠLong , Ġprev Term : ĠLong , Ġdata : ĠK Raft Entries ) Ġ= Ġsender ( to ) ĊĠĠĠĠĠĠĠ Ġ. send ( Append Message ( self , Ġterm , Ġprev Term , Ġprev Index , Ġleader Commit Index , Ġdata )) ĊĊĠĠĠ Ġfun Ġack ( to : ĠR aft Node , Ġmatch Index : ĠLong ) Ġ= Ġsender ( to ) ĊĠĠĠĠĠĠĠ Ġ. respond ( Append Ack Message ( self , Ġterm , Ġtrue , Ġmatch Index )) ĊĊĠĠĠ Ġfun Ġn ack ( to : ĠR aft Node , Ġn ack Index : ĠLong ) Ġ= Ġsender ( to ) ĊĠĠĠĠĠĠĠ Ġ. respond ( Append Ack Message ( self , Ġterm , Ġfalse , Ġn ack Index )) ĊĊĠĠĠ Ġfun Ġrequest Votes () Ġ= Ġothers ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġrequest Vote ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġrequest Vote ( to : ĠR aft Node ) Ġ= Ġsender ( to ) ĊĠĠĠĠĠĠĠ Ġ. send ( Request Vote Message ( self , Ġterm , Ġlast Log Term , Ġlast Log Index )) ĊĊĠĠĠ Ġfun Ġvote ( to : ĠR aft Node , Ġvote : ĠBoolean ) Ġ= Ġsender ( to ) ĊĠĠĠĠĠĠĠ Ġ. respond ( Vote Message ( self , Ġterm , Ġvote )) ĊĊĠĠĠ Ġfun ĠClient Append Message . relay ( leader : ĠR aft Node ) Ġ= Ġsender ( leader ) ĊĠĠĠĠĠĠĠ Ġ. send ( Client Append Message ( self , Ġdata , Ġfrom , Ġack Type )) ĊĊĠĠĠ Ġfun ĠClient Append Message . ack ( range : ĠLong Range ) Ġ= Ġsender ( from ) ĊĠĠĠĠĠĠĠ Ġ. send ( Client Append Ack Message ( self , Ġid !! , Ġnull , Ġleader , Ġrange , Ġterm , Ġrelay )) ĊĊĠĠĠ Ġfun ĠClient Append Message . n ack ( error : ĠClient ErrorType ) Ġ= Ġsender ( from ) ĊĠĠĠĠĠĠĠ Ġ. send ( Client Append Ack Message ( self , Ġid !! , Ġerror , Ġleader , Ġnull , Ġterm , Ġrelay )) ĊĊĠĠĠ Ġfun ĠClient Append Ack Message . relay () Ġ= Ġsender ( relay !! ) ĊĠĠĠĠĠĠĠ Ġ. send ( Client Append Ack Message ( self , Ġid , Ġerror , Ġleader , Ġrange , Ġterm , Ġnull )) Ċ } Ċ