]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: add cache_flush(), cache_try_flus(), cache_evict() methods
authorSage Weil <sage@inktank.com>
Wed, 23 Oct 2013 01:26:01 +0000 (18:26 -0700)
committerSage Weil <sage@inktank.com>
Sat, 14 Dec 2013 00:35:54 +0000 (16:35 -0800)
Not yet implemented by the OSD.

Signed-off-by: Sage Weil <sage@inktank.com>
src/common/ceph_strings.cc
src/include/rados.h
src/include/rados/librados.hpp
src/librados/librados.cc
src/osd/osd_types.cc
src/osdc/Objecter.h

index a693953711fcc78a80006bae8e1fbe609e7cb4bb..dd6563376916f8b1a0138b9a15386e17f2acb2d0 100644 (file)
@@ -53,6 +53,9 @@ 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_CACHE_TRY_FLUSH: return "cache-try-flush";
 
        case CEPH_OSD_OP_CLONERANGE: return "clonerange";
        case CEPH_OSD_OP_ASSERT_SRC_VERSION: return "assert-src-version";
index bf4f5b5fce414a33d4b4a56e875bae4917529888..2ab293daa689cd29ac34c13cf05cb01bf5ef6c31 100644 (file)
@@ -217,11 +217,15 @@ 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,
+       CEPH_OSD_OP_CACHE_TRY_FLUSH = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 33,
 
        /** multi **/
        CEPH_OSD_OP_CLONERANGE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_MULTI | 1,
index ecfd036378a0fd91619b8888ff8b1769bb8fec2d..e66ef224f2ef82f99a8845590c6e077bb0fbc554 100644 (file)
@@ -294,6 +294,32 @@ namespace librados
      */
     void undirty();
 
+    /**
+     * flush a cache tier object to backing tier; will block racing
+     * updates.
+     *
+     * This should be used in concert with OPERATION_IGNORE_CACHE to avoid
+     * triggering a promotion.
+     */
+    void cache_flush();
+
+    /**
+     * Flush a cache tier object to backing tier; will EAGAIN if we race
+     * with an update.  Must be used with the SKIPRWLOCKS flag.
+     *
+     * This should be used in concert with OPERATION_IGNORE_CACHE to avoid
+     * triggering a promotion.
+     */
+    void cache_try_flush();
+
+    /**
+     * evict a clean cache tier object
+     *
+     * This should be used in concert with OPERATION_IGNORE_CACHE to avoid
+     * triggering a promote on the OSD (that is then evicted).
+     */
+    void cache_evict();
+
     friend class IoCtx;
   };
 
index 0dc2be6ac48622fe261822c86a69a0ae0976a804..e58ccbdc92e13fa90a3418293dd941a25e630ce8 100644 (file)
@@ -402,6 +402,24 @@ void librados::ObjectWriteOperation::undirty()
   o->undirty();
 }
 
+void librados::ObjectWriteOperation::cache_flush()
+{
+  ::ObjectOperation *o = (::ObjectOperation *)impl;
+  o->cache_flush();
+}
+
+void librados::ObjectWriteOperation::cache_try_flush()
+{
+  ::ObjectOperation *o = (::ObjectOperation *)impl;
+  o->cache_try_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;
index d7d74dca3a9122be17d503136585f22a19cf7ea2..d0494104bc18b68adc7409355120b604f7b7529e 100644 (file)
@@ -3776,6 +3776,9 @@ 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_TRY_FLUSH:
+    case CEPH_OSD_OP_CACHE_EVICT:
       break;
     case CEPH_OSD_OP_ASSERT_VER:
       out << " v" << op.op.assert_ver.ver;
index a1d2d779a9b2cadce582bb786df19190dd35885b..478fa00f9a27b1ea9dcf4eb14415aa0a5c306f91 100644 (file)
@@ -867,6 +867,47 @@ 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, the update will block.
+   *
+   * use with IGNORE_CACHE to avoid triggering promote.
+   */
+  void cache_flush() {
+    add_op(CEPH_OSD_OP_CACHE_FLUSH);
+  }
+
+  /**
+   * 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.  Requires that
+   * the SKIPRWLOCKS flag be set.
+   *
+   * use with IGNORE_CACHE to avoid triggering promote.
+   */
+  void cache_try_flush() {
+    add_op(CEPH_OSD_OP_CACHE_TRY_FLUSH);
+  }
+
+  /**
+   * evict object from cache tier
+   *
+   * If object is marked clean, remove the object from the cache tier.
+   * Otherwise, return EBUSY.
+   *
+   * use with IGNORE_CACHE to avoid triggering promote.
+   */
+  void cache_evict() {
+    add_op(CEPH_OSD_OP_CACHE_EVICT);
+  }
 };