Commit bdd6be33 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent a974edc9
...@@ -631,13 +631,22 @@ func (f *BigFile) invalidateBlk(ctx context.Context, blk int64) error { ...@@ -631,13 +631,22 @@ func (f *BigFile) invalidateBlk(ctx context.Context, blk int64) error {
// /(head/<rev>)/bigfile/ -> Lookup receives client request to create (head|<rev>)/bigfile/<bigfileX>. // /(head/<rev>)/bigfile/ -> Lookup receives client request to create (head|<rev>)/bigfile/<bigfileX>.
func (bfdir *BigFileDir) Lookup(out *fuse.Attr, name string, fctx *fuse.Context) (*nodefs.Inode, fuse.Status) { func (bfdir *BigFileDir) Lookup(out *fuse.Attr, name string, fctx *fuse.Context) (*nodefs.Inode, fuse.Status) {
inode, err := bfdir.lookup(out, name, fctx) // XXX reorder out? f, err := bfdir.lookup(out, name, fctx) // XXX reorder out?
var inode *nodefs.Inode
if f != nil {
inode = f.Inode()
}
return inode, err2LogStatus(err) return inode, err2LogStatus(err)
} }
func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context) (_ *nodefs.Inode, err error) { func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context) (f *BigFile, err error) {
defer xerr.Contextf(&err, "/bigfile: lookup %q", name) defer xerr.Contextf(&err, "/bigfile: lookup %q", name)
defer func() {
if f != nil {
f.getattr(out)
}
}()
oid, err := zodb.ParseOid(name) oid, err := zodb.ParseOid(name)
if err != nil { if err != nil {
...@@ -650,8 +659,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context) ...@@ -650,8 +659,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context)
bfdir.mu.Unlock() bfdir.mu.Unlock()
if already { if already {
// XXX fill out return f, nil
return f.Inode(), nil
} }
// not there - without bfdir lock proceed to open BigFile from ZODB // not there - without bfdir lock proceed to open BigFile from ZODB
...@@ -667,7 +675,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context) ...@@ -667,7 +675,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context)
if already { if already {
bfdir.mu.Unlock() bfdir.mu.Unlock()
f.Close() f.Close()
return f2.Inode(), nil // XXX fill out return f2, nil
} }
bfdir.tab[oid] = f bfdir.tab[oid] = f
...@@ -676,8 +684,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context) ...@@ -676,8 +684,7 @@ func (bfdir *BigFileDir) lookup(out *fuse.Attr, name string, fctx *fuse.Context)
// mkfile takes filesystem treeLock - do it outside bfdir.mu // mkfile takes filesystem treeLock - do it outside bfdir.mu
mkfile(bfdir, name, f) mkfile(bfdir, name, f)
// XXX fill out return f, nil
return f.Inode(), nil
} }
// XXX do we need to support unlink? (probably no) // XXX do we need to support unlink? (probably no)
...@@ -812,9 +819,13 @@ func (f *BigFile) Close() error { ...@@ -812,9 +819,13 @@ func (f *BigFile) Close() error {
} }
// /(head|<rev>)/bigfile/<bigfileX> -> Getattr serves stat. // /(head|<rev>)/bigfile/<bigfileX> -> Getattr serves stat.
func (f *BigFile) GetAttr(out *fuse.Attr, _ nodefs.File, fctx *fuse.Context) fuse.Status { func (f *BigFile) GetAttr(out *fuse.Attr, _ nodefs.File, _ *fuse.Context) fuse.Status {
// XXX locking // XXX locking
f.getattr(out)
return fuse.OK
}
func (f *BigFile) getattr(out *fuse.Attr) {
out.Mode = fuse.S_IFREG | 0444 out.Mode = fuse.S_IFREG | 0444
out.Size = uint64(f.zbfSize) out.Size = uint64(f.zbfSize)
// .Blocks // .Blocks
...@@ -826,8 +837,6 @@ func (f *BigFile) GetAttr(out *fuse.Attr, _ nodefs.File, fctx *fuse.Context) fus ...@@ -826,8 +837,6 @@ func (f *BigFile) GetAttr(out *fuse.Attr, _ nodefs.File, fctx *fuse.Context) fus
mtime := lastChange.Time().Time mtime := lastChange.Time().Time
out.SetTimes(/*atime=*/nil, /*mtime=*/&mtime, /*ctime=*/&mtime) out.SetTimes(/*atime=*/nil, /*mtime=*/&mtime, /*ctime=*/&mtime)
return fuse.OK
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment