summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchris erway <chris.erway@algorand.com>2023-08-03 09:18:23 -0400
committerchris erway <chris.erway@algorand.com>2023-08-03 09:21:56 -0400
commit8a987a43cd0bc1d470c80c4fd740a9ae0b46bdfb (patch)
treeaa664f8a5c858a3b0b3d373cd76461e75732834d
parentf4c9674adb900794a7e084669a929aa9ead7d7e7 (diff)
add/adapt code from pipelinePlayer.resizeArrivals on feature/pipelinefeature/dynamic-lambda
-rw-r--r--agreement/player.go17
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...)
}