[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