Directory上传

  • 调度器计算出分配的vid
  • 根据vid找到stores机器列表(/volume里面的信息),将这些机器验证(/rack中的信息)
  • 为图片生成唯一的id
  • 调用hbase客户端,将图片的元数据存储在hbase数据库中
    • bucket_{bucket}表的rowkey是filename,存储key,sha1,mine,status,mtime
      • bfsmeta表的rowkey是key,存储vid,cookie,update_time
  • 返回结果vid,key,cookie,store机器列表
// UploadStores get writable stores for http upload
func (d *Directory) UploadStores(bucket string, f *meta.File) (n *meta.Needle, stores []string, err error) {
    var (
        key       int64
        vid       int32
        svrs      []string
        store     string
        storeMeta *meta.Store
        ok        bool
    )
    if vid, err = d.dispatcher.VolumeId(d.group, d.storeVolume); err != nil {
        log.Errorf("dispatcher.VolumeId error(%v)", err)
        err = errors.ErrStoreNotAvailable
        return
    }
    svrs = d.volumeStore[vid]
    stores = make([]string, 0, len(svrs))
    for _, store = range svrs {
        if storeMeta, ok = d.store[store]; !ok {
            err = errors.ErrZookeeperDataError
            return
        }
        stores = append(stores, storeMeta.Api)
    }
    if key, err = d.genkey.Getkey(); err != nil {
        log.Errorf("genkey.Getkey() error(%v)", err)
        err = errors.ErrIdNotAvailable
        return
    }

    n = new(meta.Needle)
    n.Key = key
    n.Vid = vid
    n.Cookie = d.cookie()
    f.Key = key
    if err = d.hBase.Put(bucket, f, n); err != nil {
        if err != errors.ErrNeedleExist {
            log.Errorf("hBase.Put error(%v)", err)
            err = errors.ErrHBase
        }
    }
    return
}

results matching ""

    No results matching ""