double check if someone delete /path outside swarm

Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
This commit is contained in:
Chanwit Kaewkasi 2015-01-06 19:52:08 +07:00
parent 66ff423861
commit 1e2e60806d
1 changed files with 25 additions and 8 deletions

View File

@ -76,12 +76,31 @@ func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
func (s *ZkDiscoveryService) Register(addr string) error {
newpath := path.Join(s.path, addr)
exists, _, err := s.conn.Exists(newpath)
// check existing for the parent path first
exist, _, err := s.conn.Exists(s.path)
if err != nil {
return err
}
if exists {
// create parent first
if exist == false {
_, err = s.conn.Create(s.path, []byte{1}, 0, zk.WorldACL(zk.PermAll))
if err != nil {
return err
}
_, err = s.conn.Create(newpath, []byte(addr), 0, zk.WorldACL(zk.PermAll))
return err
} else {
exist, _, err = s.conn.Exists(newpath)
if err != nil {
return err
}
if exist {
err = s.conn.Delete(newpath, -1)
if err != nil {
return err
@ -89,10 +108,8 @@ func (s *ZkDiscoveryService) Register(addr string) error {
}
_, err = s.conn.Create(newpath, []byte(addr), 0, zk.WorldACL(zk.PermAll))
if err != zk.ErrNodeExists {
return err
} else {
return nil
}
return nil
}