lotus-4 代码详解之miner调度及work处理

代码流程
        1、./lotus wallet new 
            钱包类型(不同类型,签名算法不一样),不传参数默认secp256k1类型钱包
                bls:
                secp256k1:
            客户端调用lotus/api/apistruct/struct.go  WalletNew函数 RPC调用->(服务端 ./lotus daemon ...) lotus/node/impl/full/wallet.go  WalletNew
        2、./lotus send代码流程
        3、miner接单流程(./lotus client deal [cid] t01000 0.000000005 100)
            lotus分发:lotus/node/impl/client/client.go:ClientStartDeal->ProposeStorageDeal->
                      err = c.statemachines.Send(deal.ProposalCid, storagemarket.ClientEventOpen) 订单文件目录  ~/.lotusstorage/fstmp*
            miner接收:
                        ->github.com/filecoin-project/go-statemachine/machine.go  Run reflect.ValueOf -->
                        ->github.com/filecoin-project/go-statemachine/fsm/fsm.go handler reflect.ValueOf -->
                        ->github.com/filecoin-project/go-fil-market/storagemarket/impl/providerstates/provider_states.go HandoffDeal(订单文件目录  ~/.lotusstorage/fstmp*) -->
                        ->lotus/markets/storageadapter/provider.go   OnDealComplete -->
                        ->lotus/storage/sectorblocks/blocks.go:AddPiece -->
                        ->lotus/storage/sealing.go AllocatePiece() lotus/storage/sealing.go SealPiece() -->
                        ->lotus/extern/storage-fms/sealing.go SealPiece() m.newSector() -->
                        ->lotus/extern/sector-storage/manager.go AddPiece() -->
                        ->lotus/extern/sector-storage/sched.go Schedule() 写入通道 ->runSched()->maybeSchedRequest()->assignWorker分配work处理 -->
                        ->lotus/extern/sector-storage/localworker.go AddPiece()    
                        ->lotus/extern/sector-storage/ffiwrapper/sealer_cgo.go AddPiece()                                
                        
                            lotus/extern/storage-fms/sealing.go SealPiece -->
                              ->lotus/extern/sector-storage/manager.goMiner.SealPiece(lotus/storage/sealing.go) -->
                                lotus/extern/storage-fms/states.go newSector() -->
                                ->github.com/filecoin-project/go-statemachine/group.go Send()->loadOrCreate() (创建状态机结构体StateMachine{... planner:  s.hnd.Plan,...}) 
                                ->github.com/filecoin-project/go-statemachine/machine.go run()  
                                ->            
             
        4、miner调度及work处理
            1、miner调度器(schedule):miner初始化创建并启动(./lotus-storage-miner init ...) 
                主要代码:lotus/extern/sector-storage/manager.go New()
                func New(...) ...
                    {
                        ...
                        m := &Manager{
                            scfg: cfg,

                            ls:         ls,
                            storage:    stor,
                            localStore: lstor,
                            remoteHnd:  &stores.FetchHandler{Local: lstor},
                            index:      si,

                            sched: newScheduler(cfg.SealProofType),

                            Prover: prover,
                        }

                        go m.sched.runSched()//启动调度
                        ...
                    }
            2、miner状态机(machine):miner收到存储订单,AddPiece创建状态机并启动(具体在github.com/filecoin-project/go-statemachine/group.go loadOrCreate()),
                状态机所有运行状态切换如下,可在lotus/extern/storage-fms/fsm.go plan()中找到,也可以直接参考map变量fsmPlanners
                    /*

                    *   Empty
                    |   |
                    |   v
                    *<- Packing <- incoming
                    |   |
                    |   v
                    *<- PreCommit1 <--> SealFailed
                    |   |                 ^^^
                    |   v           &nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值