[ARVADOS] updated: 1.1.2-19-gaa18bbe
Git user
git at public.curoverse.com
Thu Dec 21 01:47:23 EST 2017
Summary of changes:
sdk/go/arvados/fs_base.go | 35 ++++++++++++++---------------------
sdk/go/arvados/fs_collection.go | 28 +++++++++++++++++++++-------
sdk/go/arvados/fs_site.go | 6 +++---
3 files changed, 38 insertions(+), 31 deletions(-)
via aa18bbe2333f293d329efdae4a13ff79b03a1d8c (commit)
via 58ff77b474d97c6274786de171120f3bb288a200 (commit)
via 86f54fd63e2e7e41cd3810428b0105521e5c4e95 (commit)
from b650bbcce190f5940398bf7861034fd08adb706d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit aa18bbe2333f293d329efdae4a13ff79b03a1d8c
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu Dec 21 01:23:32 2017 -0500
12308: Update parent dir modtime when adding/removing/renaming.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/sdk/go/arvados/fs_base.go b/sdk/go/arvados/fs_base.go
index 9978c43..a3df168 100644
--- a/sdk/go/arvados/fs_base.go
+++ b/sdk/go/arvados/fs_base.go
@@ -232,8 +232,9 @@ func (n *treenode) Child(name string, replace func(inode) inode) (child inode) {
if newchild == nil {
delete(n.inodes, name)
} else if newchild != child {
- n.inodes[name] = newchild
newchild.SetParent(n, name)
+ n.inodes[name] = newchild
+ n.fileinfo.modTime = time.Now()
child = newchild
}
}
@@ -458,8 +459,6 @@ func (fs *fileSystem) Rename(oldname, newname string) error {
// Leave oldinode in olddir.
return oldinode
}
- //TODO: olddirf.setModTime(time.Now())
- //TODO: newdirf.setModTime(time.Now())
return nil
})
return err
diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go
index 0121d2d..e7e6f19 100644
--- a/sdk/go/arvados/fs_collection.go
+++ b/sdk/go/arvados/fs_collection.go
@@ -67,10 +67,23 @@ func (c *Collection) FileSystem(client apiClient, kc keepClient) (CollectionFile
if err := root.loadManifest(c.ManifestText); err != nil {
return nil, err
}
+ backdateTree(root, modTime)
fs.root = root
return fs, nil
}
+func backdateTree(n inode, modTime time.Time) {
+ switch n := n.(type) {
+ case *filenode:
+ n.fileinfo.modTime = modTime
+ case *dirnode:
+ n.fileinfo.modTime = modTime
+ for _, n := range n.inodes {
+ backdateTree(n, modTime)
+ }
+ }
+}
+
func (fs *collectionFileSystem) newNode(name string, perm os.FileMode, modTime time.Time) (node inode, err error) {
if name == "" || name == "." || name == ".." {
return nil, ErrInvalidArgument
diff --git a/sdk/go/arvados/fs_site.go b/sdk/go/arvados/fs_site.go
index 8a54b44..d3ca510 100644
--- a/sdk/go/arvados/fs_site.go
+++ b/sdk/go/arvados/fs_site.go
@@ -94,6 +94,7 @@ func (vn *vdirnode) Child(name string, _ func(inode) inode) inode {
n := vn.create(vn, name)
if n != nil {
n.SetParent(vn, name)
+ vn.inode.(*treenode).fileinfo.modTime = time.Now()
}
return n
}
commit 58ff77b474d97c6274786de171120f3bb288a200
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu Dec 21 01:07:22 2017 -0500
12308: Sync name when changing parents.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/sdk/go/arvados/fs_base.go b/sdk/go/arvados/fs_base.go
index ebf2ad6..9978c43 100644
--- a/sdk/go/arvados/fs_base.go
+++ b/sdk/go/arvados/fs_base.go
@@ -85,7 +85,7 @@ type FileSystem interface {
}
type inode interface {
- SetParent(inode)
+ SetParent(parent inode, name string)
Parent() inode
FS() FileSystem
Read([]byte, filenodePtr) (int, filenodePtr, error)
@@ -207,10 +207,11 @@ func (n *treenode) FS() FileSystem {
return n.fs
}
-func (n *treenode) SetParent(p inode) {
- n.RLock()
- defer n.RUnlock()
+func (n *treenode) SetParent(p inode, name string) {
+ n.Lock()
+ defer n.Unlock()
n.parent = p
+ n.fileinfo.name = name
}
func (n *treenode) Parent() inode {
@@ -232,7 +233,7 @@ func (n *treenode) Child(name string, replace func(inode) inode) (child inode) {
delete(n.inodes, name)
} else if newchild != child {
n.inodes[name] = newchild
- newchild.SetParent(n)
+ newchild.SetParent(n, name)
child = newchild
}
}
@@ -442,28 +443,21 @@ func (fs *fileSystem) Rename(oldname, newname string) error {
err = os.ErrNotExist
return nil
}
- newdirf.inode.Child(newname, func(existing inode) inode {
+ accepted := newdirf.inode.Child(newname, func(existing inode) inode {
if existing != nil && existing.IsDir() {
err = ErrIsDirectory
return existing
}
return oldinode
})
- if err != nil {
+ if accepted != oldinode {
+ if err == nil {
+ // newdirf didn't accept oldinode.
+ err = ErrInvalidArgument
+ }
+ // Leave oldinode in olddir.
return oldinode
}
- oldinode.Lock()
- defer oldinode.Unlock()
- switch n := oldinode.(type) {
- case *dirnode:
- n.parent = newdirf.inode
- n.fileinfo.name = newname
- case *filenode:
- n.parent = newdirf.inode
- n.fileinfo.name = newname
- default:
- panic(fmt.Sprintf("bad inode type %T", n))
- }
//TODO: olddirf.setModTime(time.Now())
//TODO: newdirf.setModTime(time.Now())
return nil
diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go
index 96977cb..0121d2d 100644
--- a/sdk/go/arvados/fs_collection.go
+++ b/sdk/go/arvados/fs_collection.go
@@ -63,7 +63,7 @@ func (c *Collection) FileSystem(client apiClient, kc keepClient) (CollectionFile
inodes: make(map[string]inode),
},
}
- root.SetParent(root)
+ root.SetParent(root, ".")
if err := root.loadManifest(c.ManifestText); err != nil {
return nil, err
}
@@ -219,10 +219,11 @@ func (fn *filenode) appendSegment(e segment) {
fn.fileinfo.size += int64(e.Len())
}
-func (fn *filenode) SetParent(p inode) {
- fn.RLock()
- defer fn.RUnlock()
+func (fn *filenode) SetParent(p inode, name string) {
+ fn.Lock()
+ defer fn.Unlock()
fn.parent = p
+ fn.fileinfo.name = name
}
func (fn *filenode) Parent() inode {
@@ -522,7 +523,7 @@ func (dn *dirnode) Child(name string, replace func(inode) inode) inode {
}
return data, err
}}
- gn.SetParent(dn)
+ gn.SetParent(dn, name)
return gn
}
return dn.treenode.Child(name, replace)
diff --git a/sdk/go/arvados/fs_site.go b/sdk/go/arvados/fs_site.go
index 974dad8..8a54b44 100644
--- a/sdk/go/arvados/fs_site.go
+++ b/sdk/go/arvados/fs_site.go
@@ -71,8 +71,7 @@ func (fs *siteFileSystem) mountCollection(parent inode, id string) inode {
return nil
}
root := cfs.rootnode()
- root.SetParent(parent)
- root.(*dirnode).fileinfo.name = id
+ root.SetParent(parent, id)
return root
}
@@ -94,7 +93,7 @@ func (vn *vdirnode) Child(name string, _ func(inode) inode) inode {
} else {
n := vn.create(vn, name)
if n != nil {
- n.SetParent(vn)
+ n.SetParent(vn, name)
}
return n
}
commit 86f54fd63e2e7e41cd3810428b0105521e5c4e95
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu Dec 21 01:01:44 2017 -0500
12308: Fix collectionfs crash.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go
index af0068f..96977cb 100644
--- a/sdk/go/arvados/fs_collection.go
+++ b/sdk/go/arvados/fs_collection.go
@@ -480,7 +480,7 @@ func (fn *filenode) pruneMemSegments() {
if !ok || seg.Len() < maxBlockSize {
continue
}
- locator, _, err := fn.parent.(fsBackend).PutB(seg.buf)
+ locator, _, err := fn.FS().PutB(seg.buf)
if err != nil {
// TODO: stall (or return errors from)
// subsequent writes until flushing
@@ -489,7 +489,7 @@ func (fn *filenode) pruneMemSegments() {
}
fn.memsize -= int64(seg.Len())
fn.segments[idx] = storedSegment{
- kc: fn.parent.FS(),
+ kc: fn.FS(),
locator: locator,
size: seg.Len(),
offset: 0,
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list