summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-10-09 15:07:07 -0700
committerGreg Farnum <greg@inktank.com>2013-10-17 13:11:45 -0700
commit9326a95055fa0d9431f31e8619f646b5ea8e6fc1 (patch)
treeb3b225ffeb93542ee731387e6a6a8e536d0ebcb6
parentb441406e308dc309a1801b64fea26ae967f5db67 (diff)
downloadceph-9326a95055fa0d9431f31e8619f646b5ea8e6fc1.tar.gz
Objecter: expose the copy-get()'ed object's category
In the OSD, store the category in the CopyOp using this. Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r--src/osd/ReplicatedPG.cc4
-rw-r--r--src/osd/ReplicatedPG.h1
-rw-r--r--src/osdc/Objecter.h12
3 files changed, 12 insertions, 5 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 65381b237d9..7ac102c188a 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -4370,8 +4370,8 @@ void ReplicatedPG::_copy_some(ObjectContextRef obc, CopyOpRef cop)
assert(cop->cursor.is_initial());
}
op.copy_get(&cop->cursor, cct->_conf->osd_copyfrom_max_chunk,
- &cop->size, &cop->mtime, &cop->attrs,
- &cop->data, &cop->omap,
+ &cop->size, &cop->mtime, &cop->category,
+ &cop->attrs, &cop->data, &cop->omap,
&cop->rval);
C_Copyfrom *fin = new C_Copyfrom(this, obc->obs.oi.soid,
diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h
index a7c49bebb67..4486c9fae2d 100644
--- a/src/osd/ReplicatedPG.h
+++ b/src/osd/ReplicatedPG.h
@@ -108,6 +108,7 @@ public:
object_copy_cursor_t cursor;
uint64_t size;
utime_t mtime;
+ string category;
map<string,bufferlist> attrs;
bufferlist data;
map<string,bufferlist> omap;
diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h
index b48c6bfcc14..37c66103e0d 100644
--- a/src/osdc/Objecter.h
+++ b/src/osdc/Objecter.h
@@ -572,6 +572,7 @@ struct ObjectOperation {
object_copy_cursor_t *cursor;
uint64_t *out_size;
utime_t *out_mtime;
+ string *out_category;
std::map<std::string,bufferlist> *out_attrs;
bufferlist *out_data;
std::map<std::string,bufferlist> *out_omap;
@@ -579,13 +580,14 @@ struct ObjectOperation {
C_ObjectOperation_copyget(object_copy_cursor_t *c,
uint64_t *s,
utime_t *m,
+ string *cat,
std::map<std::string,bufferlist> *a,
bufferlist *d,
std::map<std::string,bufferlist> *o,
int *r)
: cursor(c),
- out_size(s), out_mtime(m), out_attrs(a),
- out_data(d), out_omap(o), prval(r) {}
+ out_size(s), out_mtime(m), out_category(cat),
+ out_attrs(a), out_data(d), out_omap(o), prval(r) {}
void finish(int r) {
if (r < 0)
return;
@@ -597,6 +599,8 @@ struct ObjectOperation {
*out_size = copy_reply.size;
if (out_mtime)
*out_mtime = copy_reply.mtime;
+ if (out_category)
+ *out_category = copy_reply.category;
if (out_attrs)
*out_attrs = copy_reply.attrs;
if (out_data)
@@ -616,6 +620,7 @@ struct ObjectOperation {
uint64_t max,
uint64_t *out_size,
utime_t *out_mtime,
+ string *out_category,
std::map<std::string,bufferlist> *out_attrs,
bufferlist *out_data,
std::map<std::string,bufferlist> *out_omap,
@@ -627,7 +632,8 @@ struct ObjectOperation {
unsigned p = ops.size() - 1;
out_rval[p] = prval;
C_ObjectOperation_copyget *h =
- new C_ObjectOperation_copyget(cursor, out_size, out_mtime, out_attrs, out_data, out_omap, prval);
+ new C_ObjectOperation_copyget(cursor, out_size, out_mtime, out_category,
+ out_attrs, out_data, out_omap, prval);
out_bl[p] = &h->bl;
out_handler[p] = h;
}