]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/ObjectStore: add bufferlist-based omap_setkeys() and omap_rmkeys()
authorSage Weil <sage@redhat.com>
Mon, 19 Oct 2015 18:29:18 +0000 (14:29 -0400)
committerSage Weil <sage@redhat.com>
Mon, 19 Oct 2015 18:38:07 +0000 (14:38 -0400)
Often the caller has a bufferlist and not an STL map/set.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/ObjectStore.h

index ec14dcd766c4dd407daab10027c37ac7b23eb481..ba4c7d2852d1002fa6f15b2127eb185ed9ded0bb 100644 (file)
@@ -1335,6 +1335,29 @@ public:
       }
       data.ops++;
     }
+
+    /// Set keys on an oid omap (bufferlist variant).
+    void omap_setkeys(
+      coll_t cid,                           ///< [in] Collection containing oid
+      const ghobject_t &oid,                ///< [in] Object to update
+      const bufferlist &attrset_bl          ///< [in] Replacement keys and values
+      ) {
+      if (use_tbl) {
+        __u32 op = OP_OMAP_SETKEYS;
+        ::encode(op, tbl);
+        ::encode(cid, tbl);
+        ::encode(oid, tbl);
+        tbl.append(attrset_bl);
+      } else {
+        Op* _op = _get_next_op();
+        _op->op = OP_OMAP_SETKEYS;
+        _op->cid = _get_coll_id(cid);
+        _op->oid = _get_object_id(oid);
+        data_bl.append(attrset_bl);
+      }
+      data.ops++;
+    }
+
     /// Remove keys from oid omap
     void omap_rmkeys(
       coll_t cid,             ///< [in] Collection containing oid
@@ -1357,6 +1380,28 @@ public:
       data.ops++;
     }
 
+    /// Remove keys from oid omap
+    void omap_rmkeys(
+      coll_t cid,             ///< [in] Collection containing oid
+      const ghobject_t &oid,  ///< [in] Object from which to remove the omap
+      const bufferlist &keys_bl ///< [in] Keys to clear
+      ) {
+      if (use_tbl) {
+        __u32 op = OP_OMAP_RMKEYS;
+        ::encode(op, tbl);
+        ::encode(cid, tbl);
+        ::encode(oid, tbl);
+        tbl.append(keys_bl);
+      } else {
+        Op* _op = _get_next_op();
+        _op->op = OP_OMAP_RMKEYS;
+        _op->cid = _get_coll_id(cid);
+        _op->oid = _get_object_id(oid);
+        data_bl.append(keys_bl);
+      }
+      data.ops++;
+    }
+
     /// Remove key range from oid omap
     void omap_rmkeyrange(
       coll_t cid,             ///< [in] Collection containing oid