Directory下载

  • 调用hbase客户端,根据bucket,filename获取图片元数据(vid,key,cookie,mine)
    • bucket_{bucket}表的rowkey是filename,从表取出key,sha1,mine,status,mtime
    • bfsmetarowkey就是key,从表中取出vid,cookie,update_time
  • 根据vid获取到store机器(/volume路径下的)
  • 判断哪些机器可读,返回到最终的store列表
// GetStores get readable stores for http get
func (d *Directory) GetStores(bucket, filename string) (n *meta.Needle, f *meta.File, stores []string, err error) {
    var (
        store     string
        svrs      []string
        storeMeta *meta.Store
        ok        bool
    )
    if n, f, err = d.hBase.Get(bucket, filename); err != nil {
        log.Errorf("hBase.Get error(%v)", err)
        if err != errors.ErrNeedleNotExist {
            err = errors.ErrHBase
        }
        return
    }
    if n == nil {
        err = errors.ErrNeedleNotExist
        return
    }
    if svrs, ok = d.volumeStore[n.Vid]; !ok {
        err = errors.ErrZookeeperDataError
        return
    }
    stores = make([]string, 0, len(svrs))
    for _, store = range svrs {
        if storeMeta, ok = d.store[store]; !ok {
            log.Errorf("store cannot match store:", store)
            continue
        }
        if !storeMeta.CanRead() {
            continue
        }
        stores = append(stores, storeMeta.Api)
    }
    if len(stores) == 0 {
        err = errors.ErrStoreNotAvailable
    }
    return
}

results matching ""

    No results matching ""