From 1fefb146a77d05598d2c8a351b1b5a542daeb922 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Tue, 6 Mar 2012 13:40:17 -0800 Subject: [PATCH] librados: add high level omap calls also rename get_vals_by_key to get_vals_by_keys Signed-off-by: Yehuda Sadeh --- src/include/ceph_strings.cc | 2 +- src/include/rados.h | 2 +- src/include/rados/librados.hpp | 21 ++++++++ src/librados.cc | 97 ++++++++++++++++++++++++++++++++-- src/osd/ReplicatedPG.cc | 2 +- src/osdc/Objecter.h | 4 +- 6 files changed, 120 insertions(+), 8 deletions(-) diff --git a/src/include/ceph_strings.cc b/src/include/ceph_strings.cc index e94a8daeaf8eb..026ca4e2f99ea 100644 --- a/src/include/ceph_strings.cc +++ b/src/include/ceph_strings.cc @@ -82,7 +82,7 @@ const char *ceph_osd_op_name(int op) case CEPH_OSD_OP_OMAPGETKEYS: return "omap-get-keys"; case CEPH_OSD_OP_OMAPGETVALS: return "omap-get-vals"; case CEPH_OSD_OP_OMAPGETHEADER: return "omap-get-header"; - case CEPH_OSD_OP_OMAPGETVALSBYKEY: return "omap-get-vals-by-key"; + case CEPH_OSD_OP_OMAPGETVALSBYKEYS: return "omap-get-vals-by-keys"; case CEPH_OSD_OP_OMAPSETVALS: return "omap-set-vals"; case CEPH_OSD_OP_OMAPSETHEADER: return "omap-set-header"; case CEPH_OSD_OP_OMAPCLEAR: return "omap-clear"; diff --git a/src/include/rados.h b/src/include/rados.h index b95ac75459567..44f7162bd15ee 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -201,7 +201,7 @@ enum { CEPH_OSD_OP_OMAPGETKEYS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 17, CEPH_OSD_OP_OMAPGETVALS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 18, CEPH_OSD_OP_OMAPGETHEADER = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 19, - CEPH_OSD_OP_OMAPGETVALSBYKEY = + CEPH_OSD_OP_OMAPGETVALSBYKEYS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 20, CEPH_OSD_OP_OMAPSETVALS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 21, CEPH_OSD_OP_OMAPSETHEADER = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 22, diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 2309343652de1..56fe400c4f56b 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -334,6 +334,27 @@ namespace librados int tmap_put(const std::string& oid, bufferlist& bl); int tmap_get(const std::string& oid, bufferlist& bl); + int omap_get_vals(const std::string& oid, + const std::string& start_after, + uint64_t max_return, + std::map *out_vals); + int omap_get_keys(const std::string& oid, + const std::string& start_after, + uint64_t max_return, + std::set *out_keys); + int omap_get_header(const std::string& oid, + bufferlist *bl); + int omap_get_vals_by_keys(const std::string& oid, + const std::set& keys, + std::map *vals); + int omap_set(const std::string& oid, + const map& map); + int omap_set_header(const std::string& oid, + const bufferlist& bl); + int omap_clear(const std::string& oid); + int omap_rm_keys(const std::string& oid, + const std::set& keys); + void snap_set_read(snap_t seq); int selfmanaged_snap_set_write_ctx(snap_t seq, std::vector& snaps); diff --git a/src/librados.cc b/src/librados.cc index 3e8084b8b87c8..b3b5c792d1a19 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -238,13 +238,13 @@ void librados::ObjectReadOperation::omap_get_header(bufferlist *bl, int *prval) o->omap_get_header(bl, prval); } -void librados::ObjectReadOperation::omap_get_vals_by_key( +void librados::ObjectReadOperation::omap_get_vals_by_keys( const std::set &keys, std::map *map, int *prval) { ::ObjectOperation *o = (::ObjectOperation *)impl; - o->omap_get_vals_by_key(keys, map, prval); + o->omap_get_vals_by_keys(keys, map, prval); } void librados::ObjectReadOperation::getxattrs(map *pattrs, int *prval) @@ -2180,7 +2180,6 @@ int librados::RadosClient::tmap_get(IoCtxImpl& io, const object_t& oid, bufferli return r; } - int librados::RadosClient::exec(IoCtxImpl& io, const object_t& oid, const char *cls, const char *method, bufferlist& inbl, bufferlist& outbl) @@ -3017,6 +3016,98 @@ int librados::IoCtx::tmap_get(const std::string& oid, bufferlist& bl) return io_ctx_impl->client->tmap_get(*io_ctx_impl, obj, bl); } +int librados::IoCtx::omap_get_vals(const std::string& oid, + const std::string& start_after, + uint64_t max_return, + std::map *out_vals) +{ + ObjectReadOperation op; + int r; + op.omap_get_vals(start_after, max_return, out_vals, &r); + bufferlist bl; + int ret = operate(oid, &op, &bl); + if (ret < 0) + return ret; + + return r; +} + +int librados::IoCtx::omap_get_keys(const std::string& oid, + const std::string& start_after, + uint64_t max_return, + std::set *out_keys) +{ + ObjectReadOperation op; + int r; + op.omap_get_keys(start_after, max_return, out_keys, &r); + bufferlist bl; + int ret = operate(oid, &op, &bl); + if (ret < 0) + return ret; + + return r; +} + +int librados::IoCtx::omap_get_header(const std::string& oid, + bufferlist *bl) +{ + ObjectReadOperation op; + int r; + op.omap_get_header(bl, &r); + bufferlist b; + int ret = operate(oid, &op, &b); + if (ret < 0) + return ret; + + return r; +} + +int librados::IoCtx::omap_get_vals_by_keys(const std::string& oid, + const std::set& keys, + std::map *vals) +{ + ObjectReadOperation op; + int r; + bufferlist bl; + op.omap_get_vals_by_keys(keys, vals, &r); + int ret = operate(oid, &op, &bl); + if (ret < 0) + return ret; + + return r; +} + +int librados::IoCtx::omap_set(const std::string& oid, + const map& m) +{ + ObjectWriteOperation op; + op.omap_set(m); + return operate(oid, &op); +} + +int librados::IoCtx::omap_set_header(const std::string& oid, + const bufferlist& bl) +{ + ObjectWriteOperation op; + op.omap_set_header(bl); + return operate(oid, &op); +} + +int librados::IoCtx::omap_clear(const std::string& oid) +{ + ObjectWriteOperation op; + op.omap_clear(); + return operate(oid, &op); +} + +int librados::IoCtx::omap_rm_keys(const std::string& oid, + const std::set& keys) +{ + ObjectWriteOperation op; + op.omap_rm_keys(keys); + return operate(oid, &op); +} + int librados::IoCtx::operate(const std::string& oid, librados::ObjectWriteOperation *o) { object_t obj(oid); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 595b434c1fb87..b8d1c6c5bf964 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2514,7 +2514,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) osd->store->omap_get_header(coll, soid, &osd_op.outdata); } break; - case CEPH_OSD_OP_OMAPGETVALSBYKEY: + case CEPH_OSD_OP_OMAPGETVALSBYKEYS: { set keys_to_get; ::decode(keys_to_get, bp); diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 2b3b8a323762e..d40ffcc65e639 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -403,10 +403,10 @@ struct ObjectOperation { } } - void omap_get_vals_by_key(const std::set &to_get, + void omap_get_vals_by_keys(const std::set &to_get, std::map *out_set, int *prval) { - OSDOp &op = add_op(CEPH_OSD_OP_OMAPGETVALSBYKEY); + OSDOp &op = add_op(CEPH_OSD_OP_OMAPGETVALSBYKEYS); bufferlist bl; ::encode(to_get, bl); op.op.extent.offset = 0; -- 2.39.5