Documentation ¶
Index ¶
- Variables
- func ClearViewChangeStates(clearProposedView bool)
- func InitiateStartViewChange()
- func SendStartViewChange(port, viewNum, id int)
- type ViewChangeRPC
- func (v *ViewChangeRPC) DoViewChange(args *vrrpc.DoViewChangeArgs, resp *vrrpc.DoViewChangeResp) error
- func (v *ViewChangeRPC) StartView(args *vrrpc.StartViewArgs, resp *vrrpc.StartViewResp) error
- func (v *ViewChangeRPC) StartViewChange(args *vrrpc.StartViewChangeArgs, resp *vrrpc.StartViewChangeResp) error
Constants ¶
This section is empty.
Variables ¶
var ( // A buffered channel to signal the monitor thread to change to view change mode. // Note: we use a buffered channel here because multiple threads running StartViewChange() could be // sending signals to the channel at the same time, but the monitor thread can only consume one of them. // Having a buffered channel ensures that while only the first signal is consumed, the rest of the threads do not block. StartViewChangeChan chan int = make(chan int, len(globals.AllPorts)) // A channel to notify the monitor that view change is done and what mode should the replica switch to. ViewChangeDone chan string = make(chan string) )
Functions ¶
func ClearViewChangeStates ¶
func ClearViewChangeStates(clearProposedView bool)
ClearViewChangeStates clears the intermediate states of the current view change. This function is atomic and thread-safe.
func InitiateStartViewChange ¶
func InitiateStartViewChange()
InitiateStartViewChange initiates a view change protocol by sending StartViewChange messages to all other replicas.
func SendStartViewChange ¶
func SendStartViewChange(port, viewNum, id int)
SendStartViewChange sends a StartViewChange message with a proposed viewNum and the current node id to a replica at port.
Types ¶
type ViewChangeRPC ¶
type ViewChangeRPC int
ViewChangeRPC implements the ViewService interface.
func (*ViewChangeRPC) DoViewChange ¶
func (v *ViewChangeRPC) DoViewChange(args *vrrpc.DoViewChangeArgs, resp *vrrpc.DoViewChangeResp) error
DoViewChange handles the DoViewChange RPC. This function is triggered when the new primary receives a DoViewChange message. It only starts a new view when enough DoViewChange messages are received. It is thread-safe so multiple nodes can send DoViewChange messages to the new primary concurrently.
func (*ViewChangeRPC) StartView ¶
func (v *ViewChangeRPC) StartView(args *vrrpc.StartViewArgs, resp *vrrpc.StartViewResp) error
StartView handles the StartView RPC.
func (*ViewChangeRPC) StartViewChange ¶
func (v *ViewChangeRPC) StartViewChange(args *vrrpc.StartViewChangeArgs, resp *vrrpc.StartViewChangeResp) error
StartViewChange handles the StartViewChange RPC. This function is triggered whenever the node receives a StartViewChange message. When triggered, the node will stop what it is doing right now and start the view change protocol. It implements step 1 and 2 in section 4.2 in the paper. This function is thread-safe, so multiple nodes can call this RPC on the same node concurrently.