func ensurePathExists(conn *zk.Conn, path string) error { pathExists, _, _ := conn.Exists(path) if pathExists { return nil } _, err := conn.Create(path, []byte{}, 0, defaultACL()) if err != nil { return err } return nil }
func ListenToConn(c *zk.Conn, path string, deb bool, repDelay time.Duration) (chan zk.Event, chan bool) { exists, _, err := c.Exists(path) if err != nil { logger.Fatalf("Couldn't determine whether node %v exists in Zookeeper", path) } if !exists { logger.Printf("Node '%v' does not exist in Zookeeper, creating...", path) err := zkNodeCreateByPath(path, c) if err != nil { logger.Fatalf("Unable to create path '%v': %v", path, err) } } quit := make(chan bool) evts := make(chan zk.Event) go pollZooKeeper(c, path, evts, quit) if deb { evts = debounce(evts, 100*time.Millisecond) } if repDelay > 0 { evts = delay(evts, repDelay) } return evts, quit }
func zkCreateNodes(path string, nodes []string, c *zk.Conn) error { if len(nodes) > 0 { // strings.Split will return empty-strings for leading split chars, lets skip over these. if len(nodes[0]) == 0 { return zkCreateNodes(path, nodes[1:], c) } fqPath := path + "/" + nodes[0] log.Printf("Creating path: %v", fqPath) exists, _, err := c.Exists(fqPath) if err != nil { return err } if !exists { _, err := c.Create(fqPath, []byte{}, 0, zk.WorldACL(zk.PermAll)) if err != nil { return err } } return zkCreateNodes(fqPath, nodes[1:], c) } return nil }