Ensure latest frame monotonicity (#350)

This commit is contained in:
petricadaipegsp 2024-11-13 17:41:23 +01:00 committed by GitHub
parent 5b05ed03d5
commit f06d2c0ff2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 4 deletions

View File

@ -26,6 +26,7 @@ import (
qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time"
qcrypto "source.quilibrium.com/quilibrium/monorepo/node/crypto"
"source.quilibrium.com/quilibrium/monorepo/node/execution"
"source.quilibrium.com/quilibrium/monorepo/node/internal/cas"
"source.quilibrium.com/quilibrium/monorepo/node/keys"
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
@ -413,7 +414,7 @@ func (e *DataClockConsensusEngine) Start() <-chan error {
},
}
e.latestFrameReceived = frame.FrameNumber
cas.IfLessThanUint64(&e.latestFrameReceived, frame.FrameNumber)
e.logger.Info(
"preparing peer announce",
zap.Uint64("frame_number", frame.FrameNumber),

View File

@ -8,6 +8,7 @@ import (
"github.com/iden3/go-iden3-crypto/poseidon"
"go.uber.org/zap"
"source.quilibrium.com/quilibrium/monorepo/node/consensus"
"source.quilibrium.com/quilibrium/monorepo/node/internal/cas"
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
"source.quilibrium.com/quilibrium/monorepo/node/tries"
)
@ -108,9 +109,7 @@ func (e *DataClockConsensusEngine) processFrame(
latestFrame = dataFrame
}
if e.latestFrameReceived < latestFrame.FrameNumber {
e.latestFrameReceived = latestFrame.FrameNumber
}
cas.IfLessThanUint64(&e.latestFrameReceived, latestFrame.FrameNumber)
e.frameProverTriesMx.Lock()
e.frameProverTries = e.dataTimeReel.GetFrameProverTries()
e.frameProverTriesMx.Unlock()

12
node/internal/cas/cas.go Normal file
View File

@ -0,0 +1,12 @@
package cas
import "sync/atomic"
// IfLessThanInt64 sets the value of a to lt if the current value of a is less than lt.
func IfLessThanUint64(a *uint64, lt uint64) {
for val := atomic.LoadUint64(a); val < lt; val = atomic.LoadUint64(a) {
if atomic.CompareAndSwapUint64(a, val, lt) {
return
}
}
}