]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueFS: all overwrites on open_for_write
authorSage Weil <sage@redhat.com>
Thu, 10 Dec 2015 22:21:03 +0000 (17:21 -0500)
committerSage Weil <sage@redhat.com>
Fri, 1 Jan 2016 18:06:58 +0000 (13:06 -0500)
rocksdb will occasionally overwrite an existing file
if it is not present/valid in the manifest.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueFS.cc

index 9cd90605c307b29c9fea37179bfcb49204b17c58..f41efd89caf96e998a4319474ec9663daf93f629 100644 (file)
@@ -1117,13 +1117,18 @@ int BlueFS::open_for_write(
     log_t.op_dir_link(dirname, filename, file->fnode.ino);
   } else {
     // overwrite existing file?
+    file = q->second;
     if (!overwrite) {
       dout(20) << __func__ << " dir " << dirname << " (" << dir
               << ") file " << filename
-              << " already exists" << dendl;
-      return -EEXIST;
+              << " already exists, overwriting" << dendl;
+    } else {
+      dout(20) << __func__ << " dir " << dirname << " (" << dir
+              << ") file " << filename
+              << " already exists, overwriting" << dendl;
+      file->fnode.size = 0;
     }
-    file = q->second;
+    file->fnode.mtime = ceph_clock_now(NULL);
     log_t.op_file_update(file->fnode);
   }