github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/engine/consensus/sealing_tracker.go (about) 1 package consensus 2 3 import "github.com/onflow/flow-go/model/flow" 4 5 // SealingTracker is an auxiliary component for tracking progress of the sealing 6 // logic (specifically sealing.Core). It has access to the storage, to collect data 7 // that is not be available directly from sealing.Core. The SealingTracker is immutable 8 // and therefore intrinsically thread safe. 9 // 10 // The SealingTracker essentially acts as a factory for individual SealingObservations, 11 // which capture information about the progress of a _single_ go routine. Consequently, 12 // SealingObservations don't need to be concurrency safe, as they are supposed to 13 // be thread-local structure. 14 type SealingTracker interface { 15 16 // NewSealingObservation constructs a SealingObservation, which capture information 17 // about the progress of a _single_ go routine. Consequently, SealingObservations 18 // don't need to be concurrency safe, as they are supposed to be thread-local structure. 19 NewSealingObservation(finalizedBlock *flow.Header, seal *flow.Seal, sealedBlock *flow.Header) SealingObservation 20 } 21 22 // SealingObservation captures information about the progress of a _single_ go routine. 23 // Consequently, it is _not concurrency safe_, as SealingObservation is intended to be 24 // a thread-local structure. 25 // SealingObservation is supposed to track the status of various (unsealed) incorporated 26 // results, which sealing.Core processes (driven by that single goroutine). 27 type SealingObservation interface { 28 29 // QualifiesForEmergencySealing captures whether sealing.Core has 30 // determined that the incorporated result qualifies for emergency sealing. 31 QualifiesForEmergencySealing(ir *flow.IncorporatedResult, emergencySealable bool) 32 33 // ApprovalsMissing captures whether sealing.Core has determined that 34 // some approvals are still missing for the incorporated result. Calling this 35 // method with empty `chunksWithMissingApprovals` indicates that all chunks 36 // have sufficient approvals. 37 ApprovalsMissing(ir *flow.IncorporatedResult, chunksWithMissingApprovals map[uint64]flow.IdentifierList) 38 39 // ApprovalsRequested captures the number of approvals that the business 40 // logic has re-requested for the incorporated result. 41 ApprovalsRequested(ir *flow.IncorporatedResult, requestCount uint) 42 43 // Complete is supposed to be called when a single execution of the sealing logic 44 // has been completed. It compiles the information about the incorporated results. 45 Complete() 46 }