diff options
author | chris erway <chris.erway@algorand.com> | 2023-08-03 09:18:23 -0400 |
---|---|---|
committer | chris erway <chris.erway@algorand.com> | 2023-08-03 09:21:56 -0400 |
commit | 8a987a43cd0bc1d470c80c4fd740a9ae0b46bdfb (patch) | |
tree | aa664f8a5c858a3b0b3d373cd76461e75732834d | |
parent | f4c9674adb900794a7e084669a929aa9ead7d7e7 (diff) |
add/adapt code from pipelinePlayer.resizeArrivals on feature/pipelinefeature/dynamic-lambda
-rw-r--r-- | agreement/player.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/agreement/player.go b/agreement/player.go index 87fa7f2d5..3d4932786 100644 --- a/agreement/player.go +++ b/agreement/player.go @@ -263,9 +263,20 @@ func (p *player) handleCheckpointEvent(r routerHandle, e checkpointEvent) []acti }} } -func (p *player) handleWinningPayloadArrival(payload proposal) { +func (p *player) handleWinningPayloadArrival(payload proposal, ver protocol.ConsensusVersion) { // ignoring validatedAt p.payloadArrivals = append(p.payloadArrivals, payload.receivedAt) + p.resizePayloadArrivals(ver) +} + +func (p *player) resizePayloadArrivals(ver protocol.ConsensusVersion) { + proto := config.Consensus[ver] + if len(p.payloadArrivals) > proto.AgreementPipelineDelayHistory { + p.payloadArrivals = p.payloadArrivals[len(p.payloadArrivals)-proto.AgreementPipelineDelayHistory:] + } + for len(p.payloadArrivals) < proto.AgreementPipelineDelayHistory { + p.payloadArrivals = append([]time.Duration{FilterTimeout(0, ver)}, p.payloadArrivals...) + } } // calculateFilterTimeout chooses the appropriate filter timeout for a new round. @@ -317,7 +328,7 @@ func (p *player) handleThresholdEvent(r routerHandle, e thresholdEvent) []action cert := Certificate(e.Bundle) a0 := ensureAction{Payload: res.Payload, Certificate: cert} actions = append(actions, a0) - p.handleWinningPayloadArrival(res.Payload) + p.handleWinningPayloadArrival(res.Payload, e.Proto) as := p.enterRound(r, e, p.Round+1) return append(actions, as...) } @@ -637,7 +648,7 @@ func (p *player) handleMessageEvent(r routerHandle, e messageEvent) (actions []a cert := Certificate(freshestRes.Event.Bundle) a0 := ensureAction{Payload: e.Input.Proposal, Certificate: cert} actions = append(actions, a0) - p.handleWinningPayloadArrival(e.Input.Proposal) + p.handleWinningPayloadArrival(e.Input.Proposal, e.Proto.Version) as := p.enterRound(r, delegatedE, cert.Round+1) return append(actions, as...) } |