func (dl directoryLayer) subdirNames(rtr fdb.ReadTransaction, node subspace.Subspace) ([]string, error) { sd := node.Sub(_SUBDIRS) rr := rtr.GetRange(sd, fdb.RangeOptions{}) ri := rr.Iterator() var ret []string for ri.Advance() { kv := ri.MustGet() p, e := sd.Unpack(kv.Key) if e != nil { return nil, e } ret = append(ret, p[0].(string)) } return ret, nil }
func (dl directoryLayer) nodeContainingKey(rtr fdb.ReadTransaction, key []byte) (subspace.Subspace, error) { if bytes.HasPrefix(key, dl.nodeSS.Bytes()) { return dl.rootNode, nil } bk, _ := dl.nodeSS.FDBRangeKeys() kr := fdb.KeyRange{bk, fdb.Key(append(dl.nodeSS.Pack(tuple.Tuple{key}), 0x00))} kvs := rtr.GetRange(kr, fdb.RangeOptions{Reverse: true, Limit: 1}).GetSliceOrPanic() if len(kvs) == 1 { pp, e := dl.nodeSS.Unpack(kvs[0].Key) if e != nil { return nil, e } prevPrefix := pp[0].([]byte) if bytes.HasPrefix(key, prevPrefix) { return dl.nodeWithPrefix(prevPrefix), nil } } return nil, nil }
func isRangeEmpty(rtr fdb.ReadTransaction, r fdb.Range) bool { kvs := rtr.GetRange(r, fdb.RangeOptions{Limit: 1}).GetSliceOrPanic() return len(kvs) == 0 }