]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: implement touch
authorSage Weil <sage@newdream.net>
Wed, 12 Nov 2008 20:22:21 +0000 (12:22 -0800)
committerSage Weil <sage@newdream.net>
Wed, 12 Nov 2008 20:26:45 +0000 (12:26 -0800)
src/os/FileStore.cc
src/os/FileStore.h

index fe6f2b53f3dd9303f57e1bc5e025d259da1171e1..de3a109317bb5b461bbb0f19f1ee58a984fad756 100644 (file)
@@ -595,6 +595,16 @@ unsigned FileStore::_apply_transaction(Transaction& t)
   while (t.have_op()) {
     int op = t.get_op();
     switch (op) {
+    case Transaction::OP_TOUCH:
+      {
+       coll_t cid;
+       t.get_cid(cid);
+       pobject_t oid;
+       t.get_oid(oid);
+       _touch(cid, oid);
+      }
+      break;
+      
     case Transaction::OP_WRITE:
       {
        coll_t cid;
@@ -1292,6 +1302,22 @@ int FileStore::_truncate(coll_t cid, pobject_t oid, __u64 size)
 }
 
 
+int FileStore::_touch(coll_t cid, pobject_t oid)
+{
+  char fn[200];
+  get_coname(cid, oid, fn);
+
+  dout(20) << "touch " << fn << dendl;
+
+  int flags = O_WRONLY|O_CREAT;
+  int fd = ::open(fn, flags, 0644);
+  if (fd >= 0) {
+    ::close(fd);
+    return 0;
+  } else
+    return -errno;
+}
+
 int FileStore::_write(coll_t cid, pobject_t oid, 
                      __u64 offset, size_t len,
                      const bufferlist& bl)
index 6f37151f9775c3c775a4e3fa34079655166bf37f..44809c1ceed2eae255770a9b184876c8c7d92f93 100644 (file)
@@ -107,13 +107,14 @@ class FileStore : public JournalingObjectStore {
   int stat(coll_t cid, pobject_t oid, struct stat *st);
   int read(coll_t cid, pobject_t oid, __u64 offset, size_t len, bufferlist& bl);
 
-  int _remove(coll_t cid, pobject_t oid);
-  int _truncate(coll_t cid, pobject_t oid, __u64 size);
+  int _touch(coll_t cid, pobject_t oid);
   int _write(coll_t cid, pobject_t oid, __u64 offset, size_t len, const bufferlist& bl);
   int _zero(coll_t cid, pobject_t oid, __u64 offset, size_t len);
+  int _truncate(coll_t cid, pobject_t oid, __u64 size);
   int _clone(coll_t cid, pobject_t oldoid, pobject_t newoid);
   int _clone_range(coll_t cid, pobject_t oldoid, pobject_t newoid, __u64 off, __u64 len);
   int _do_clone_range(int from, int to, __u64 off, __u64 len);
+  int _remove(coll_t cid, pobject_t oid);
 
   void sync();
   void sync(Context *onsafe);