diff options
author | Sage Weil <sage@inktank.com> | 2013-10-22 18:26:01 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-22 19:40:49 -0700 |
commit | 3dd18cca7014489fd11e68c9a6ed568ab6013c44 (patch) | |
tree | 147e72fd6d978367b3eeabae2a555aeaff4d411c | |
parent | 4bfeae43209de282fbb03b8b11e554b254dd22ba (diff) | |
download | ceph-3dd18cca7014489fd11e68c9a6ed568ab6013c44.tar.gz |
librados: add cache_flush(), cache_evict() methods
Not yet implemented by the OSD.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/common/ceph_strings.cc | 2 | ||||
-rw-r--r-- | src/include/rados.h | 3 | ||||
-rw-r--r-- | src/include/rados/librados.hpp | 10 | ||||
-rw-r--r-- | src/librados/librados.cc | 12 | ||||
-rw-r--r-- | src/osd/osd_types.cc | 2 | ||||
-rw-r--r-- | src/osdc/Objecter.h | 22 |
6 files changed, 51 insertions, 0 deletions
diff --git a/src/common/ceph_strings.cc b/src/common/ceph_strings.cc index a693953711f..4ad8175a2f3 100644 --- a/src/common/ceph_strings.cc +++ b/src/common/ceph_strings.cc @@ -53,6 +53,8 @@ const char *ceph_osd_op_name(int op) case CEPH_OSD_OP_COPY_FROM: return "copy-from"; case CEPH_OSD_OP_UNDIRTY: return "undirty"; case CEPH_OSD_OP_ISDIRTY: return "isdirty"; + case CEPH_OSD_OP_CACHE_FLUSH: return "cache-flush"; + case CEPH_OSD_OP_CACHE_EVICT: return "cache-evict"; case CEPH_OSD_OP_CLONERANGE: return "clonerange"; case CEPH_OSD_OP_ASSERT_SRC_VERSION: return "assert-src-version"; diff --git a/src/include/rados.h b/src/include/rados.h index bf4f5b5fce4..2415652ddfc 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -217,11 +217,14 @@ enum { CEPH_OSD_OP_OMAPRMKEYS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 24, CEPH_OSD_OP_OMAP_CMP = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 25, + /* tiering */ CEPH_OSD_OP_COPY_FROM = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 26, CEPH_OSD_OP_COPY_GET_CLASSIC = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 27, CEPH_OSD_OP_UNDIRTY = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 28, CEPH_OSD_OP_ISDIRTY = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 29, CEPH_OSD_OP_COPY_GET = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 30, + CEPH_OSD_OP_CACHE_FLUSH = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 31, + CEPH_OSD_OP_CACHE_EVICT = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 32, /** multi **/ CEPH_OSD_OP_CLONERANGE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_MULTI | 1, diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index a6449c58d9b..44f1d174b3a 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -297,6 +297,16 @@ namespace librados */ void undirty(); + /** + * flush a cache tier object to backing tier + */ + void cache_flush(); + + /** + * evict a clean cache tier object + */ + void cache_evict(); + friend class IoCtx; }; diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 002e58f9f4c..9a6f91e138c 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -402,6 +402,18 @@ void librados::ObjectWriteOperation::undirty() o->undirty(); } +void librados::ObjectWriteOperation::cache_flush() +{ + ::ObjectOperation *o = (::ObjectOperation *)impl; + o->cache_flush(); +} + +void librados::ObjectWriteOperation::cache_evict() +{ + ::ObjectOperation *o = (::ObjectOperation *)impl; + o->cache_evict(); +} + void librados::ObjectWriteOperation::tmap_put(const bufferlist &bl) { ::ObjectOperation *o = (::ObjectOperation *)impl; diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 4b853130ad4..ef8c498bb74 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -3780,6 +3780,8 @@ ostream& operator<<(ostream& out, const OSDOp& op) case CEPH_OSD_OP_LIST_SNAPS: case CEPH_OSD_OP_UNDIRTY: case CEPH_OSD_OP_ISDIRTY: + case CEPH_OSD_OP_CACHE_FLUSH: + case CEPH_OSD_OP_CACHE_EVICT: break; case CEPH_OSD_OP_ASSERT_VER: out << " v" << op.op.assert_ver.ver; diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 6e85167a001..bb7be991bf4 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -867,6 +867,28 @@ struct ObjectOperation { ::encode(src, osd_op.indata); ::encode(src_oloc, osd_op.indata); } + + /** + * writeback content to backing tier + * + * If object is marked dirty in the cache tier, write back content + * to backing tier. If the object is clean this is a no-op. + * + * If writeback races with an update, return EAGAIN. + */ + void cache_flush() { + add_op(CEPH_OSD_OP_CACHE_FLUSH); + } + + /** + * evict object from cache tier + * + * If object is marked clean, remove the object from the cache tier. + * Otherwise, return EBUSY. + */ + void cache_evict() { + add_op(CEPH_OSD_OP_CACHE_EVICT); + } }; |