func (zkts *Server) updateTabletEndpoint(oldValue string, oldStat zk.Stat, addr *topo.VtnsAddr) (newValue string, err error) { if oldStat == nil { // The incoming object doesn't exist - we haven't been placed in the serving // graph yet, so don't update. Assume the next process that rebuilds the graph // will get the updated tablet location. return "", skipUpdateErr } var addrs *topo.VtnsAddrs if oldValue != "" { addrs, err = topo.NewVtnsAddrs(oldValue, oldStat.Version()) if err != nil { return } foundTablet := false for i, entry := range addrs.Entries { if entry.Uid == addr.Uid { foundTablet = true if !topo.VtnsAddrEquality(&entry, addr) { addrs.Entries[i] = *addr } break } } if !foundTablet { addrs.Entries = append(addrs.Entries, *addr) } } else { addrs = topo.NewAddrs() addrs.Entries = append(addrs.Entries, *addr) } return jscfg.ToJson(addrs), nil }
func fmtPath(stat zk.Stat, zkPath string, showFullPath bool, longListing bool) { var name, perms string if !showFullPath { name = path.Base(zkPath) } else { name = zkPath } if longListing { if stat.NumChildren() > 0 { // FIXME(msolomon) do permissions check? perms = "drwxrwxrwx" if stat.DataLength() > 0 { // give a visual indication that this node has data as well as children perms = "nrw-rw-rw-" } } else if stat.EphemeralOwner() != 0 { perms = "erw-rw-rw-" } else { perms = "-rw-rw-rw-" } // always print the Local version of the time. zookeeper's // go / C library would return a local time anyway, but // might as well be sure. fmt.Printf("%v %v %v % 8v % 20v %v\n", perms, "zk", "zk", stat.DataLength(), stat.MTime().Local().Format(timeFmt), name) } else { fmt.Printf("%v\n", name) } }