Filecoin

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时,如果

  1. IPFS中没有对应cid的文件
  2. StorageConfig中AllowUnfreeze打开
    会发检索请求到Filecoin, 接受文件并存到热存储中.
上一篇下一篇

猜你喜欢

热点阅读