13111: Fix inode not updated during rename().
authorTom Clegg <tclegg@veritasgenetics.com>
Sun, 17 Dec 2017 22:46:53 +0000 (17:46 -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/collection_fs.go

index dcfd098ab64dd3d905eebe8f2ba26752b01f6f31..46470557a40c16838c42931da2eda5f34d922a6d 100644 (file)
@@ -356,14 +356,22 @@ func (fs *fileSystem) Rename(oldname, newname string) error {
                if err != nil {
                        return oldinode
                }
+               oldinode.Lock()
+               defer oldinode.Unlock()
+               olddn := olddirf.inode.(*dirnode)
+               newdn := newdirf.inode.(*dirnode)
                switch n := oldinode.(type) {
                case *dirnode:
                        n.parent = newdirf.inode
+                       n.treenode.fileinfo.name = newname
                case *filenode:
-                       n.parent = newdirf.inode.(*dirnode)
+                       n.parent = newdn
+                       n.fileinfo.name = newname
                default:
                        panic(fmt.Sprintf("bad inode type %T", n))
                }
+               olddn.treenode.fileinfo.modTime = time.Now()
+               newdn.treenode.fileinfo.modTime = time.Now()
                return nil
        })
        return err