13111: Combine newDirnode and newFIlenode to just newNode.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 21 Dec 2017 03:01:09 +0000 (22:01 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Wed, 3 Jan 2018 05:24:19 +0000 (00:24 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

sdk/go/arvados/fs_base.go
sdk/go/arvados/fs_collection.go

index fe185a4874d42745fc26afb9f9da3f0efd6eed95..ebf2ad605018b9875af0936ccdae8089c8577ba0 100644 (file)
@@ -52,8 +52,9 @@ type FileSystem interface {
        fsBackend
 
        rootnode() inode
-       newDirnode(parent inode, name string, perm os.FileMode, modTime time.Time) (node inode, err error)
-       newFilenode(parent inode, name string, perm os.FileMode, modTime time.Time) (node inode, err error)
+
+       // create a new node with nil parent.
+       newNode(name string, perm os.FileMode, modTime time.Time) (node inode, err error)
 
        // analogous to os.Stat()
        Stat(name string) (os.FileInfo, error)
@@ -319,11 +320,7 @@ func (fs *fileSystem) openFile(name string, flag int, perm os.FileMode) (*fileha
                }
                var err error
                n = parent.Child(name, func(inode) inode {
-                       if perm.IsDir() {
-                               n, err = parent.FS().newDirnode(parent, name, perm|0755, time.Now())
-                       } else {
-                               n, err = parent.FS().newFilenode(parent, name, perm|0755, time.Now())
-                       }
+                       n, err = parent.FS().newNode(name, perm|0755, time.Now())
                        return n
                })
                if err != nil {
@@ -371,7 +368,7 @@ func (fs *fileSystem) Mkdir(name string, perm os.FileMode) (err error) {
                return os.ErrExist
        }
        child := n.Child(name, func(inode) (child inode) {
-               child, err = n.FS().newDirnode(n, name, perm, time.Now())
+               child, err = n.FS().newNode(name, perm|os.ModeDir, time.Now())
                return
        })
        if err != nil {
index 36a92aff7edf94fa85ea1027e540d312cb6399b6..a64ce8c7a0a0a24a6dafe4e75108f105a048c779 100644 (file)
@@ -93,37 +93,32 @@ type collectionFileSystem struct {
        uuid string
 }
 
-// Caller must have parent lock, and must have already ensured
-// parent.Child(name,nil) is nil.
-func (fs *collectionFileSystem) newDirnode(parent inode, name string, perm os.FileMode, modTime time.Time) (node inode, err error) {
+func (fs *collectionFileSystem) newNode(name string, perm os.FileMode, modTime time.Time) (node inode, err error) {
        if name == "" || name == "." || name == ".." {
                return nil, ErrInvalidArgument
        }
-       return &dirnode{
-               fs: fs,
-               treenode: treenode{
+       if perm.IsDir() {
+               return &dirnode{
+                       fs: fs,
+                       treenode: treenode{
+                               fileinfo: fileinfo{
+                                       name:    name,
+                                       mode:    perm | os.ModeDir,
+                                       modTime: modTime,
+                               },
+                               inodes: make(map[string]inode),
+                       },
+               }, nil
+       } else {
+               return &filenode{
+                       fs: fs,
                        fileinfo: fileinfo{
                                name:    name,
-                               mode:    perm os.ModeDir,
+                               mode:    perm & ^os.ModeDir,
                                modTime: modTime,
                        },
-                       inodes: make(map[string]inode),
-               },
-       }, nil
-}
-
-func (fs *collectionFileSystem) newFilenode(parent inode, name string, perm os.FileMode, modTime time.Time) (node inode, err error) {
-       if name == "" || name == "." || name == ".." {
-               return nil, ErrInvalidArgument
+               }, nil
        }
-       return &filenode{
-               fs: fs,
-               fileinfo: fileinfo{
-                       name:    name,
-                       mode:    perm & ^os.ModeDir,
-                       modTime: modTime,
-               },
-       }, nil
 }
 
 func (fs *collectionFileSystem) Sync() error {
@@ -852,7 +847,7 @@ func (dn *dirnode) createFileAndParents(path string) (fn *filenode, err error) {
                }
                node.Child(name, func(child inode) inode {
                        if child == nil {
-                               node, err = node.FS().newDirnode(node, name, 0755|os.ModeDir, node.Parent().FileInfo().ModTime())
+                               node, err = node.FS().newNode(name, 0755|os.ModeDir, node.Parent().FileInfo().ModTime())
                                child = node
                        } else if !child.IsDir() {
                                err = ErrFileExists
@@ -868,7 +863,7 @@ func (dn *dirnode) createFileAndParents(path string) (fn *filenode, err error) {
        node.Child(basename, func(child inode) inode {
                switch child := child.(type) {
                case nil:
-                       child, err = node.FS().newFilenode(node, basename, 0755, node.FileInfo().ModTime())
+                       child, err = node.FS().newNode(basename, 0755, node.FileInfo().ModTime())
                        fn = child.(*filenode)
                        return child
                case *filenode: