Commit 7c8e7c98 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 96451811
...@@ -482,6 +482,8 @@ type BigFileDir struct { ...@@ -482,6 +482,8 @@ type BigFileDir struct {
// visited BTree nodes of all BigFiles // visited BTree nodes of all BigFiles
// -> which file + ordering for toposort on δbtree // -> which file + ordering for toposort on δbtree
//
// (used only for head/, not revX/)
indexMu sync.Mutex indexMu sync.Mutex
indexLooked *δbtree.PathSet // XXX naming indexLooked *δbtree.PathSet // XXX naming
} }
...@@ -921,7 +923,7 @@ func (root *Root) mkrevfile(rev zodb.Tid, fid zodb.Oid) (_ *BigFile, err error) ...@@ -921,7 +923,7 @@ func (root *Root) mkrevfile(rev zodb.Tid, fid zodb.Oid) (_ *BigFile, err error)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer f.Close() defer f.Close() // XXX -> return to caller to release when inode no longer needed
xfrev = fsconn.LookupNode(root.Inode(), frevpath) xfrev = fsconn.LookupNode(root.Inode(), frevpath)
// must be !nil as open succeeded XXX better recheck // must be !nil as open succeeded XXX better recheck
...@@ -1064,10 +1066,10 @@ func (root *Root) lookup(name string, fctx *fuse.Context) (_ *Head, err error) { ...@@ -1064,10 +1066,10 @@ func (root *Root) lookup(name string, fctx *fuse.Context) (_ *Head, err error) {
} }
bfdir := &BigFileDir{ bfdir := &BigFileDir{
Node: newDefaultNode(), Node: newDefaultNode(),
head: revDir, head: revDir,
fileTab: make(map[zodb.Oid]*BigFile), fileTab: make(map[zodb.Oid]*BigFile),
// indexLooked = nil for @revX/ indexLooked: nil, // δbtree index not needed/used for @revX/
} }
revDir.bfdir = bfdir revDir.bfdir = bfdir
...@@ -1141,9 +1143,12 @@ func (head *Head) bigopen(ctx context.Context, oid zodb.Oid) (_ *BigFile, err er ...@@ -1141,9 +1143,12 @@ func (head *Head) bigopen(ctx context.Context, oid zodb.Oid) (_ *BigFile, err er
loading: make(map[int64]*blkLoadState), loading: make(map[int64]*blkLoadState),
} }
head.bfdir.indexMu.Lock() // XXX locking ok? // only head/ needs δbtree index.
head.bfdir.indexLooked.Add(f, treePath) if head.rev == 0 {
head.bfdir.indexMu.Unlock() head.bfdir.indexMu.Lock() // XXX locking ok?
head.bfdir.indexLooked.Add(f, treePath)
head.bfdir.indexMu.Unlock()
}
return f, nil return f, nil
} }
...@@ -1292,10 +1297,13 @@ func (f *BigFile) readBlk(ctx context.Context, blk int64, dest []byte) error { ...@@ -1292,10 +1297,13 @@ func (f *BigFile) readBlk(ctx context.Context, blk int64, dest []byte) error {
loading.err = err loading.err = err
close(loading.ready) close(loading.ready)
bfdir := f.head.bfdir // only head/ has δbtree index.
bfdir.indexMu.Lock() // XXX locking correct? if f.head.rev == 0 {
bfdir.indexLooked.Add(f, treepath) // XXX needed only for head/ bfdir := f.head.bfdir
bfdir.indexMu.Unlock() bfdir.indexMu.Lock() // XXX locking correct?
bfdir.indexLooked.Add(f, treepath)
bfdir.indexMu.Unlock()
}
// XXX before loading.ready? // XXX before loading.ready?
blkrevmax, _ := f.δFtail.LastRevOf(blk, zbf.PJar().At()) blkrevmax, _ := f.δFtail.LastRevOf(blk, zbf.PJar().At())
......
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