func pollZooKeeper(conn *zk.Conn, path string, evts chan zk.Event, quit chan bool) { logger.Println("####################################Pooling zookeeper") logger.Println(path) children, _, err := conn.Children(path) if err != nil { fmt.Printf("%+v", err) panic(err) } watcherControl := make([]chan<- bool, len(children)+2) watcherControl[0] = sinkSelfEvents(conn, path, evts) watcherControl[1] = sinkChildEvents(conn, path, evts) for i, child := range children { p := path + "/" + child watcherControl[i+2] = sinkSelfEvents(conn, p, evts) } <-quit for _, ch := range watcherControl { ch <- true } }
func All(conn *zk.Conn, zkConf conf.Zookeeper) (map[string]Service, error) { err := ensurePathExists(conn, zkConf.Path) if err != nil { return nil, err } services := map[string]Service{} keys, _, err2 := conn.Children(zkConf.Path) if err2 != nil { return nil, err2 } for _, childPath := range keys { bite, _, e := conn.Get(zkConf.Path + "/" + childPath) if e != nil { return nil, e break } appId, _ := unescapeSlashes(childPath) services[appId] = Service{Id: appId, Acl: string(bite)} } return services, nil }
func deleteRecursive(conn *zk.Conn, path string) { children, _, err := conn.Children(path) if err != nil { log.Printf("failed to get children %s: %s", path, err) return } for _, child := range children { deleteRecursive(conn, path+"/"+child) } err = conn.Delete(path, -1) if err != nil { log.Printf("failed to delete %s: %s", path, err) } }