Filecoin之Powergate文件检索
2020-10-13 本文已影响0人
rleor
文件检索
powergate仅提供ffs get接口用于查询文件,并且仅从热存储ipfs中查询文件.
ffs/api/api_actions.go
func (i *API) Get(ctx context.Context, c cid.Cid) (io.Reader, error) {
if !c.Defined() {
return nil, fmt.Errorf("cid is undefined")
}
conf, err := i.is.getStorageConfig(c)
if err != nil {
return nil, fmt.Errorf("getting cid config: %s", err)
}
if !conf.Hot.Enabled {
return nil, ErrHotStorageDisabled
}
r, err := i.sched.GetCidFromHot(ctx, c)
if err != nil {
return nil, fmt.Errorf("getting from hot layer %s: %s", c, err)
}
return r, nil
}
powergate中冷存储检索
powergate冷存储实现逻辑:
接口位于ffs/api/api_retrieval.go的StartRetrieval方法,但是目前为止并未被调用过.(d1840e23251c53b03457d8eb33cc72baf7b0253f)
func (i *API) StartRetrieval(payloadCid, pieceCid cid.Cid, selector string, miners []string, opts ...RetrievalOption) (Retrieval, error)
调用流程:
ffs/api/api_retrieval.go Start_Retrieval
-> scheduler_retrieval.go StartRetrieval方法,将retrieval请求放入队列
-> scheduler.go中循环处理队列中的retrieval请求
-> filcold.go中的Fetch方法
-> deals.go中最终调用lotus的api ClientMinerQueryOffer.
powergate目前调用了冷存储检索的地方在PushStorageCofig时,scheduler_storage.go中,执行executeHotStorage时,如果
- IPFS中没有对应cid的文件
- StorageConfig中AllowUnfreeze打开
会发检索请求到Filecoin, 接受文件并存到热存储中.