mirror of
https://github.com/ceph/ceph
synced 2025-02-19 00:47:49 +00:00
osdc: Add omap operation stubs to Objecter::ObjectOperation
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
This commit is contained in:
parent
b85f7d7b13
commit
d2bf68d1df
@ -79,6 +79,14 @@ const char *ceph_osd_op_name(int op)
|
||||
|
||||
case CEPH_OSD_OP_PGLS: return "pgls";
|
||||
case CEPH_OSD_OP_PGLS_FILTER: return "pgls-filter";
|
||||
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_OMAPSETVALS: return "omap-set-vals";
|
||||
case CEPH_OSD_OP_OMAPSETHEADER: return "omap-set-header";
|
||||
case CEPH_OSD_OP_OMAPCLEAR: return "omap-clear";
|
||||
case CEPH_OSD_OP_OMAPRMKEYS: return "omap-rm-keys";
|
||||
}
|
||||
return "???";
|
||||
}
|
||||
|
@ -197,6 +197,17 @@ enum {
|
||||
|
||||
CEPH_OSD_OP_WATCH = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 15,
|
||||
|
||||
/* omap */
|
||||
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_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,
|
||||
CEPH_OSD_OP_OMAPCLEAR = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 23,
|
||||
CEPH_OSD_OP_OMAPRMKEYS = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 24,
|
||||
|
||||
/** multi **/
|
||||
CEPH_OSD_OP_CLONERANGE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_MULTI | 1,
|
||||
CEPH_OSD_OP_ASSERT_SRC_VERSION = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_MULTI | 2,
|
||||
@ -290,7 +301,6 @@ static inline int ceph_osd_op_mode_modify(int op)
|
||||
|
||||
extern const char *ceph_osd_op_name(int op);
|
||||
|
||||
|
||||
/*
|
||||
* osd op flags
|
||||
*
|
||||
|
@ -2402,7 +2402,33 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
|
||||
}
|
||||
break;
|
||||
|
||||
// OMAP Read ops
|
||||
case CEPH_OSD_OP_OMAPGETKEYS:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPGETVALS:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPGETHEADER:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPGETVALSBYKEY:
|
||||
{
|
||||
}
|
||||
|
||||
// OMAP Write ops
|
||||
case CEPH_OSD_OP_OMAPSETVALS:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPSETHEADER:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPCLEAR:
|
||||
{
|
||||
}
|
||||
case CEPH_OSD_OP_OMAPRMKEYS:
|
||||
{
|
||||
}
|
||||
default:
|
||||
dout(1) << "unrecognized osd op " << op.op
|
||||
<< " " << ceph_osd_op_name(op.op)
|
||||
|
@ -267,11 +267,31 @@ struct ObjectOperation {
|
||||
out_bl[p] = pbl;
|
||||
out_rval[p] = prval;
|
||||
}
|
||||
struct C_ObjectOperation_getxattrs : public Context {
|
||||
struct C_ObjectOperation_decodevals : public Context {
|
||||
bufferlist bl;
|
||||
std::map<std::string,bufferlist> *pattrs;
|
||||
int *prval;
|
||||
C_ObjectOperation_getxattrs(std::map<std::string,bufferlist> *pa, int *pr)
|
||||
C_ObjectOperation_decodevals(std::map<std::string,bufferlist> *pa, int *pr)
|
||||
: pattrs(pa), prval(pr) {}
|
||||
void finish(int r) {
|
||||
if (r >= 0) {
|
||||
bufferlist::iterator p = bl.begin();
|
||||
try {
|
||||
if (pattrs)
|
||||
::decode(*pattrs, p);
|
||||
}
|
||||
catch (buffer::error& e) {
|
||||
if (prval)
|
||||
*prval = -EIO;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
struct C_ObjectOperation_decodekeys : public Context {
|
||||
bufferlist bl;
|
||||
std::set<std::string> *pattrs;
|
||||
int *prval;
|
||||
C_ObjectOperation_decodekeys(std::set<std::string> *pa, int *pr)
|
||||
: pattrs(pa), prval(pr) {}
|
||||
void finish(int r) {
|
||||
if (r >= 0) {
|
||||
@ -291,7 +311,7 @@ struct ObjectOperation {
|
||||
add_op(CEPH_OSD_OP_GETXATTRS);
|
||||
if (pattrs || prval) {
|
||||
unsigned p = ops.size() - 1;
|
||||
C_ObjectOperation_getxattrs *h = new C_ObjectOperation_getxattrs(pattrs, prval);
|
||||
C_ObjectOperation_decodevals *h = new C_ObjectOperation_decodevals(pattrs, prval);
|
||||
out_handler[p] = h;
|
||||
out_bl[p] = &h->bl;
|
||||
out_rval[p] = prval;
|
||||
@ -340,6 +360,95 @@ struct ObjectOperation {
|
||||
add_op(CEPH_OSD_OP_TMAPGET);
|
||||
}
|
||||
|
||||
// objectmap
|
||||
void omap_get_keys(const string &start_after,
|
||||
uint64_t max_to_get,
|
||||
std::set<std::string> *out_set,
|
||||
int *prval) {
|
||||
OSDOp &op = add_op(CEPH_OSD_OP_OMAPGETKEYS);
|
||||
bufferlist bl;
|
||||
::encode(start_after, bl);
|
||||
::encode(max_to_get, bl);
|
||||
op.op.extent.offset = 0;
|
||||
op.op.extent.length = bl.length();
|
||||
op.indata.claim_append(bl);
|
||||
if (prval || out_set) {
|
||||
unsigned p = ops.size() - 1;
|
||||
C_ObjectOperation_decodekeys *h =
|
||||
new C_ObjectOperation_decodekeys(out_set, prval);
|
||||
out_handler[p] = h;
|
||||
out_bl[p] = &h->bl;
|
||||
out_rval[p] = prval;
|
||||
}
|
||||
}
|
||||
|
||||
void omap_get_vals(const string &start_after,
|
||||
uint64_t max_to_get,
|
||||
std::map<std::string, bufferlist> *out_set,
|
||||
int *prval) {
|
||||
OSDOp &op = add_op(CEPH_OSD_OP_OMAPGETVALS);
|
||||
bufferlist bl;
|
||||
::encode(start_after, bl);
|
||||
::encode(max_to_get, bl);
|
||||
op.op.extent.offset = 0;
|
||||
op.op.extent.length = bl.length();
|
||||
op.indata.claim_append(bl);
|
||||
if (prval || out_set) {
|
||||
unsigned p = ops.size() - 1;
|
||||
C_ObjectOperation_decodevals *h =
|
||||
new C_ObjectOperation_decodevals(out_set, prval);
|
||||
out_handler[p] = h;
|
||||
out_bl[p] = &h->bl;
|
||||
out_rval[p] = prval;
|
||||
}
|
||||
}
|
||||
|
||||
void omap_get_vals_by_key(const std::set<std::string> &to_get,
|
||||
std::map<std::string, bufferlist> *out_set,
|
||||
int *prval) {
|
||||
OSDOp &op = add_op(CEPH_OSD_OP_OMAPGETVALSBYKEY);
|
||||
bufferlist bl;
|
||||
::encode(to_get, bl);
|
||||
op.op.extent.offset = 0;
|
||||
op.op.extent.length = bl.length();
|
||||
op.indata.claim_append(bl);
|
||||
if (prval || out_set) {
|
||||
unsigned p = ops.size() - 1;
|
||||
C_ObjectOperation_decodevals *h =
|
||||
new C_ObjectOperation_decodevals(out_set, prval);
|
||||
out_handler[p] = h;
|
||||
out_bl[p] = &h->bl;
|
||||
out_rval[p] = prval;
|
||||
}
|
||||
}
|
||||
|
||||
void omap_get_header(bufferlist *bl, int *prval) {
|
||||
add_op(CEPH_OSD_OP_OMAPGETHEADER);
|
||||
unsigned p = ops.size() - 1;
|
||||
out_bl[p] = bl;
|
||||
out_rval[p] = prval;
|
||||
}
|
||||
|
||||
void omap_set(const map<string, bufferlist> &map) {
|
||||
bufferlist bl;
|
||||
::encode(map, bl);
|
||||
add_data(CEPH_OSD_OP_OMAPSETVALS, 0, bl.length(), bl);
|
||||
}
|
||||
|
||||
void omap_set_header(bufferlist &bl) {
|
||||
add_data(CEPH_OSD_OP_OMAPSETHEADER, 0, bl.length(), bl);
|
||||
}
|
||||
|
||||
void omap_clear() {
|
||||
add_op(CEPH_OSD_OP_OMAPCLEAR);
|
||||
}
|
||||
|
||||
void omap_rm_keys(const std::set<std::string> &to_remove) {
|
||||
bufferlist bl;
|
||||
::encode(to_remove, bl);
|
||||
add_data(CEPH_OSD_OP_OMAPRMKEYS, 0, bl.length(), bl);
|
||||
}
|
||||
|
||||
// object classes
|
||||
void call(const char *cname, const char *method, bufferlist &indata) {
|
||||
add_call(CEPH_OSD_OP_CALL, cname, method, indata);
|
||||
|
Loading…
Reference in New Issue
Block a user