Beispiel #1
0
// AddVolume add a volume data in zk.
func (z *Zookeeper) AddVolume(v *volume.Volume) (err error) {
	var vpath = z.volumePath(v.Id)
	if _, err = z.c.Create(vpath, v.Meta(), 0, zk.WorldACL(zk.PermAll)); err != nil {
		log.Errorf("zk.Create(\"%s\") error(%v)", vpath, err)
	}
	return
}
Beispiel #2
0
// SetVolume set the data into fpath.
func (z *Zookeeper) SetVolume(v *volume.Volume) (err error) {
	var (
		stat  *zk.Stat
		vpath = z.volumePath(v.Id)
	)
	if _, stat, err = z.c.Get(vpath); err != nil {
		log.Errorf("zk.Get(\"%s\") error(%v)", vpath, err)
		return
	}
	if _, err = z.c.Set(vpath, v.Meta(), stat.Version); err != nil {
		log.Errorf("zk.Set(\"%s\") error(%v)", vpath, err)
	}
	return
}
Beispiel #3
0
// saveVolumeIndex save volumes index info to disk.
func (s *Store) saveVolumeIndex() (err error) {
	var (
		tn, n int
		v     *volume.Volume
	)
	if _, err = s.vf.Seek(0, os.SEEK_SET); err != nil {
		return
	}
	for _, v = range s.Volumes {
		if n, err = s.vf.WriteString(fmt.Sprintf("%s\n", string(v.Meta()))); err != nil {
			return
		}
		tn += n
	}
	if err = s.vf.Sync(); err != nil {
		return
	}
	err = os.Truncate(s.conf.VolumeIndex, int64(tn))
	return
}