mirror of https://github.com/docker/docs.git
double check if someone delete /path outside swarm
Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
This commit is contained in:
parent
66ff423861
commit
1e2e60806d
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue