Esempio n. 1
0
File: zk.go Progetto: Terry-Mao/bfs
// SetStore set the data into fpath.
func (z *Zookeeper) SetStore(s *meta.Store) (err error) {
	var (
		data []byte
		stat *myzk.Stat
		os   = new(meta.Store)
	)
	s.Id = z.conf.Zookeeper.ServerId
	s.Rack = z.conf.Zookeeper.Rack
	s.Status = meta.StoreStatusInit
	if data, stat, err = z.c.Get(z.fpath); err != nil {
		log.Errorf("zk.Get(\"%s\") error(%v)", z.fpath, err)
		return
	}
	if len(data) > 0 {
		if err = json.Unmarshal(data, os); err != nil {
			log.Errorf("json.Unmarshal() error(%v)", err)
			return
		}
		log.Infof("\nold store meta: %s, \ncurrent store meta: %s", os, s)
		s.Status = os.Status
	}
	// meta.Status not modifify, may update by pitchfork
	if data, err = json.Marshal(s); err != nil {
		log.Errorf("json.Marshal() error(%v)", err)
		return
	}
	if _, err = z.c.Set(z.fpath, data, stat.Version); err != nil {
		log.Errorf("zk.Set(\"%s\") error(%v)", z.fpath, err)
	}
	return
}