// 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 }