add missing events

This commit is contained in:
Sean Braithwaite 2019-07-19 10:42:08 +03:00
parent 10ff7bd342
commit 38eb781138

View File

@ -433,6 +433,8 @@ func (sdr *Scheduler) handleAddPeer(peerID p2p.ID) Event {
return Skip{} return Skip{}
} }
type Events []Event
func (sdr *Scheduler) handleRemovePeer(peerID p2p.ID) Event { func (sdr *Scheduler) handleRemovePeer(peerID p2p.ID) Event {
err := sdr.sc.removePeer(peerID) err := sdr.sc.removePeer(peerID)
if err != nil { if err != nil {
@ -510,19 +512,28 @@ func (sdr *Scheduler) handleBlockProcessError(peerID p2p.ID, height int64) Event
return Skip{} return Skip{}
} }
// XXX: Probably split this into two methods type scPrunePeerEv struct {
// + handlePurgePeers peerID p2p.ID
// + handleNextSchehedule reason error
func (sdr *Scheduler) handleTimeCheck(now time.Time) interface{} { }
type scSchedulerFailure struct {
peerID p2p.ID
time time.Time
reason error
}
func (sdr *Scheduler) handleTimeCheck(now time.Time) Events {
prunablePeers := sdr.sc.prunablePeers(sdr.peerTimeout, sdr.minRecvRate, now) prunablePeers := sdr.sc.prunablePeers(sdr.peerTimeout, sdr.minRecvRate, now)
events := []Event{}
for _, peerID := range prunablePeers { for _, peerID := range prunablePeers {
// XXX: Emit these events err := sdr.sc.removePeer(peerID)
_ = sdr.sc.removePeer(peerID) if err != nil {
events = append(events, scPrunePeerEv{peerID: peerID, reason: err})
}
} }
// produce new schedule
events := []scBlockRequestMessage{}
pendingBlocks := sdr.sc.numBlockInState(blockStatePending) pendingBlocks := sdr.sc.numBlockInState(blockStatePending)
receivedBlocks := sdr.sc.numBlockInState(blockStateReceived) receivedBlocks := sdr.sc.numBlockInState(blockStateReceived)
todo := math.Min(float64(sdr.targetPending-pendingBlocks), float64(sdr.targetReceived-receivedBlocks)) todo := math.Min(float64(sdr.targetPending-pendingBlocks), float64(sdr.targetReceived-receivedBlocks))
@ -535,7 +546,9 @@ func (sdr *Scheduler) handleTimeCheck(now time.Time) interface{} {
bestPeer := sdr.sc.selectPeer(allPeers) bestPeer := sdr.sc.selectPeer(allPeers)
err := sdr.sc.markPending(peerID, height, now) err := sdr.sc.markPending(peerID, height, now)
if err != nil { if err != nil {
// TODO // this should be fatal
events = append(events, scSchedulerFailure{peerID: peerID, time: now, reason: err})
return events
} }
events = append(events, scBlockRequestMessage{peerID: bestPeer.peerID, height: height}) events = append(events, scBlockRequestMessage{peerID: bestPeer.peerID, height: height})
todo-- todo--