github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/module/jobqueue/jobs.go (about) 1 package jobqueue 2 3 import ( 4 "fmt" 5 6 "github.com/onflow/flow-go/model/flow" 7 "github.com/onflow/flow-go/module" 8 ) 9 10 // JobID returns the corresponding unique job id of the BlockJob for this job. 11 func JobID(blockID flow.Identifier) module.JobID { 12 return module.JobID(fmt.Sprintf("%v", blockID)) 13 } 14 15 // BlockJob implements the Job interface. It converts a Block into a Job to be used by job queue. 16 // 17 // In current architecture, BlockJob represents a finalized block enqueued to be processed by the 18 // BlockConsumer that implements the JobQueue interface. 19 type BlockJob struct { 20 Block *flow.Block 21 } 22 23 // ID converts block id into job id, which guarantees uniqueness. 24 func (j BlockJob) ID() module.JobID { 25 return JobID(j.Block.ID()) 26 } 27 28 // JobToBlock converts a block job into its corresponding block. 29 func JobToBlock(job module.Job) (*flow.Block, error) { 30 blockJob, ok := job.(*BlockJob) 31 if !ok { 32 return nil, fmt.Errorf("could not assert job to block, job id: %x", job.ID()) 33 } 34 return blockJob.Block, nil 35 } 36 37 // BlockToJob converts the block to a BlockJob. 38 func BlockToJob(block *flow.Block) *BlockJob { 39 return &BlockJob{Block: block} 40 } 41 42 // BlockHeaderJob implements the Job interface. It converts a Block Header into a Job to be used by 43 // job queue. 44 // 45 // In current architecture, BlockHeaderJob represents a finalized block enqueued to be processed by 46 // a consumer that implements the JobQueue interface. 47 type BlockHeaderJob struct { 48 Header *flow.Header 49 } 50 51 // ID converts block id into job id, which guarantees uniqueness. 52 func (j BlockHeaderJob) ID() module.JobID { 53 return JobID(j.Header.ID()) 54 } 55 56 // JobToBlockHeader converts a block job into its corresponding block header. 57 func JobToBlockHeader(job module.Job) (*flow.Header, error) { 58 headerJob, ok := job.(*BlockHeaderJob) 59 if !ok { 60 return nil, fmt.Errorf("could not assert job to block header, job id: %x", job.ID()) 61 } 62 return headerJob.Header, nil 63 } 64 65 // BlockHeaderToJob converts the block to a BlockHeaderJob. 66 func BlockHeaderToJob(header *flow.Header) *BlockHeaderJob { 67 return &BlockHeaderJob{Header: header} 68 }