func activate(st *store.Store, self string, c *doozer.Conn) int64 { rev, _ := st.Snap() entries := store.Getdir(st, calDir) base := entries[len(entries)-1] index, _ := strconv.ParseInt(base, 10, 32) index += 1 p := calDir + "/" + strconv.Itoa(int(index)) seqn, err := c.Set(p, rev, []byte(self)) if err != nil { panic(err) } // for _, base := range store.Getdir(st, calDir) { // p := calDir + "/" + base // v, rev := st.Get(p) // if rev != store.Dir && v[0] == "" { // seqn, err := c.Set(p, rev, []byte(self)) // if err != nil { // log.Println(err) // continue // } // return seqn // } // } // for { // ch, err := st.Wait(calGlob, rev+1) // if err != nil { // panic(err) // } // ev, ok := <-ch // if !ok { // panic(io.EOF) // } // rev = ev.Rev // // TODO ev.IsEmpty() // if ev.IsSet() && ev.Body == "" { // seqn, err := c.Set(ev.Path, ev.Rev, []byte(self)) // if err != nil { // log.Println(err) // continue // } // return seqn // } else if ev.IsSet() && ev.Body == self { // return ev.Seqn // } // } return seqn }
func Clean(c chan string, st *store.Store, p consensus.Proposer) { for addr := range c { _, g := st.Snap() name := getName(addr, g) if name != "" { go func() { clearSlot(p, g, name) removeInfo(p, g, name) }() } } }
func walk(path string, st *store.Store, ch chan store.Event) { for path != "/" && strings.HasSuffix(path, "/") { // TODO generalize and factor this into pkg store. path = path[0 : len(path)-1] } v, rev := st.Get(path) if rev != store.Dir { ch <- store.Event{0, path, v[0], rev, "", nil, nil} return } if path == "/" { path = "" } for _, ent := range v { walk(path+"/"+ent, st, ch) } }
func sendLearn(out chan<- Packet, p *packet, st *store.Store) { if p.msg.Cmd != nil && *p.msg.Cmd == msg_INVITE { ch, err := st.Wait(store.Any, *p.Seqn) if err == store.ErrTooLate { log.Println(err) } else { e := <-ch m := msg{ Seqn: &e.Seqn, Cmd: learn, Value: []byte(e.Mut), } buf, _ := proto.Marshal(&m) out <- Packet{p.Addr, buf} } } }
func Clean(st *store.Store, keep int64, ticker <-chan time.Time) { for _ = range ticker { last := (<-st.Seqns) - keep st.Clean(last) } }