func (fs *FS) CreateFile(anchor string, owner circuit.Addr) error { // Probably should save addr using durable-like techniques var w bytes.Buffer if err := gob.NewEncoder(&w).Encode(&ZFile{owner}); err != nil { panic(err) } parts, _, err := anchorfs.Sanitize(anchor) if err != nil { return err } _anchor := path.Join(append([]string{fs.root}, parts...)...) println(_anchor) if err = zutil.CreateRecursive(fs.zookeeper, _anchor, zutil.PermitAll); err != nil { return err } _, err = fs.zookeeper.Create( path.Join(_anchor, owner.WorkerID().String()), string(w.Bytes()), zookeeper.EPHEMERAL, zutil.PermitAll, ) if err != nil { return err } fs.Lock() defer fs.Unlock() fs.created[anchor] = struct{}{} return nil }
func (fs *FS) OpenDir(anchor string) (anchorfs.Dir, error) { _, anchor, err := anchorfs.Sanitize(anchor) if err != nil { return nil, err } fs.Lock() defer fs.Unlock() // Directory open already? dir, present := fs.anchors[anchor] if present { return dir, nil } // No, make new instance if dir, err = makeDir(fs, anchor); err != nil { return nil, err } fs.anchors[anchor] = dir return dir, nil }