Exemple #1
0
// 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
}