From: Sage Weil Date: Wed, 12 Nov 2008 20:22:21 +0000 (-0800) Subject: filestore: implement touch X-Git-Tag: v0.5~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a13845e921305f56e77ce0bcb3c24192f7f9100e;p=ceph.git filestore: implement touch --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index fe6f2b53f3d..de3a109317b 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -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) diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 6f37151f977..44809c1ceed 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -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);