From 95710f0e9d7691edcd99b9b17b76ae09490e5a60 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 3 Apr 2009 08:48:54 -0700 Subject: [PATCH] objecter: add support for compound read ops (ObjectRead) --- src/osd/osd_types.h | 75 ------------------------------- src/osdc/Objecter.cc | 1 + src/osdc/Objecter.h | 104 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 75 deletions(-) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index bc7ac6b07963e..d621f1ae2ac9f 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -532,81 +532,6 @@ inline ostream& operator<<(ostream& out, ObjectExtent &ex) -// ----------------------------------------- - - -struct ObjectMutation { - vector ops; - bufferlist data; - utime_t mtime; - - // object data - void add_data(int op, __u64 off, __u64 len) { - int s = ops.size(); - ops.resize(s+1); - memset(&ops[s], 0, sizeof(ops[s])); - ops[s].op = op; - ops[s].offset = off; - ops[s].length = len; - } - - void write(__u64 off, __u64 len, bufferlist& bl) { - add_data(CEPH_OSD_OP_WRITE, off, len); - data.claim_append(bl); - } - void write_full(bufferlist& bl) { - add_data(CEPH_OSD_OP_WRITEFULL, 0, bl.length()); - data.claim_append(bl); - } - void zero(__u64 off, __u64 len) { - add_data(CEPH_OSD_OP_ZERO, off, len); - } - void remove() { - add_data(CEPH_OSD_OP_DELETE, 0, 0); - } - - // object attrs - void add_xattr(int op, int namelen, int valuelen) { - int s = ops.size(); - ops.resize(s+1); - memset(&ops[s], 0, sizeof(ops[s])); - ops[s].op = op; - ops[s].name_len = namelen; - ops[s].value_len = valuelen; - } - void setxattr(const char *name, const bufferlist& bl) { - int l = strlen(name); - add_xattr(CEPH_OSD_OP_SETXATTR, l, bl.length()); - data.append(name, l); - data.append(bl); - } - void setxattr(const char *name, const string& s) { - int l = strlen(name); - add_xattr(CEPH_OSD_OP_SETXATTR, l, s.length()); - data.append(name, l); - data.append(s); - } - void rmxattr(const char *name) { - int l = strlen(name); - add_xattr(CEPH_OSD_OP_RMXATTR, l, 0); - data.append(name, l); - } - void setxattrs(map& attrs) { - bufferlist bl; - ::encode(attrs, bl); - add_xattr(CEPH_OSD_OP_RESETXATTRS, 0, bl.length()); - data.claim_append(bl); - } - void resetxattrs(const char *prefix, map& attrs) { - int l = strlen(prefix); - bufferlist bl; - ::encode(attrs, bl); - add_xattr(CEPH_OSD_OP_RESETXATTRS, l, bl.length()); - data.append(prefix, l); - data.claim_append(bl); - } -}; - diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 5f2ac3267dd49..cbf3b7354b320 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -386,6 +386,7 @@ tid_t Objecter::read_submit(ReadOp *rd) rd->oid, rd->layout, osdmap->get_epoch(), flags); m->ops = rd->ops; + m->set_data(rd->bl); if (inc_lock > 0) { rd->inc_lock = inc_lock; m->set_inc_lock(inc_lock); diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index a69452532dbe7..29e9d9617cad4 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -37,6 +37,101 @@ class Message; +// ----------------------------------------- + +struct ObjectOperation { + vector ops; + bufferlist data; + + void add_data(int op, __u64 off, __u64 len) { + int s = ops.size(); + ops.resize(s+1); + memset(&ops[s], 0, sizeof(ops[s])); + ops[s].op = op; + ops[s].offset = off; + ops[s].length = len; + } + void add_xattr(int op, int namelen, int valuelen) { + int s = ops.size(); + ops.resize(s+1); + memset(&ops[s], 0, sizeof(ops[s])); + ops[s].op = op; + ops[s].name_len = namelen; + ops[s].value_len = valuelen; + } +}; + +struct ObjectRead : public ObjectOperation { + void read(__u64 off, __u64 len) { + add_data(CEPH_OSD_OP_READ, off, len); + } + void getxattr(const char *name) { + int l = strlen(name); + add_xattr(CEPH_OSD_OP_GETXATTR, l, 0); + data.append(name, l); + } + void getxattrs() { + add_xattr(CEPH_OSD_OP_GETXATTRS, 0, 0); + } +}; + +struct ObjectMutation : public ObjectOperation { + utime_t mtime; + + // object data + void write(__u64 off, __u64 len, bufferlist& bl) { + add_data(CEPH_OSD_OP_WRITE, off, len); + data.claim_append(bl); + } + void write_full(bufferlist& bl) { + add_data(CEPH_OSD_OP_WRITEFULL, 0, bl.length()); + data.claim_append(bl); + } + void zero(__u64 off, __u64 len) { + add_data(CEPH_OSD_OP_ZERO, off, len); + } + void remove() { + add_data(CEPH_OSD_OP_DELETE, 0, 0); + } + + // object attrs + void setxattr(const char *name, const bufferlist& bl) { + int l = strlen(name); + add_xattr(CEPH_OSD_OP_SETXATTR, l, bl.length()); + data.append(name, l); + data.append(bl); + } + void setxattr(const char *name, const string& s) { + int l = strlen(name); + add_xattr(CEPH_OSD_OP_SETXATTR, l, s.length()); + data.append(name, l); + data.append(s); + } + void rmxattr(const char *name) { + int l = strlen(name); + add_xattr(CEPH_OSD_OP_RMXATTR, l, 0); + data.append(name, l); + } + void setxattrs(map& attrs) { + bufferlist bl; + ::encode(attrs, bl); + add_xattr(CEPH_OSD_OP_RESETXATTRS, 0, bl.length()); + data.claim_append(bl); + } + void resetxattrs(const char *prefix, map& attrs) { + int l = strlen(prefix); + bufferlist bl; + ::encode(attrs, bl); + add_xattr(CEPH_OSD_OP_RESETXATTRS, l, bl.length()); + data.append(prefix, l); + data.claim_append(bl); + } +}; + + +// ---------------- + + class Objecter { public: Messenger *messenger; @@ -74,6 +169,7 @@ class Objecter { object_t oid; ceph_object_layout layout; vector ops; + bufferlist bl; bufferlist *pbl; __u64 *psize; int flags; @@ -213,6 +309,13 @@ class Objecter { rd->psize = psize; return read_submit(rd); } + tid_t read(object_t oid, ceph_object_layout ol, + ObjectRead& read, bufferlist *pbl, int flags, Context *onfinish) { + ReadOp *rd = new ReadOp(oid, ol, read.ops, flags, onfinish); + rd->bl = read.data; + rd->pbl = pbl; + return read_submit(rd); + } tid_t modify(object_t oid, ceph_object_layout ol, vector& ops, const SnapContext& snapc, bufferlist &bl, utime_t mtime, int flags, @@ -243,6 +346,7 @@ class Objecter { return read(oid, ol, ops, pbl, 0, flags, onfinish); } + tid_t mutate(object_t oid, ceph_object_layout ol, ObjectMutation& mutation, const SnapContext& snapc, int flags, -- 2.39.5