summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-25 11:12:44 -0700
committerSage Weil <sage@inktank.com>2013-08-26 16:17:10 -0700
commit0fb8c0dccedfbe2a565a43db759b4c4ec87f7d8e (patch)
treee7329e65bd4c6b6c6363bc3c5344a90ce6b53961
parent17c2770a6981de27de0bffc7e01109e1598d0503 (diff)
downloadceph-0fb8c0dccedfbe2a565a43db759b4c4ec87f7d8e.tar.gz
osd, objecter: clean up assert_ver()
Create a separate union in the args and clean up the code a bit so that this doesn't reuse the (unrelated) watch helpers. No change in protocol. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/include/rados.h4
-rw-r--r--src/osd/ReplicatedPG.cc2
-rw-r--r--src/osd/osd_types.cc3
-rw-r--r--src/osdc/Objecter.h4
4 files changed, 10 insertions, 3 deletions
diff --git a/src/include/rados.h b/src/include/rados.h
index de9b449ed15..9037606d154 100644
--- a/src/include/rados.h
+++ b/src/include/rados.h
@@ -398,6 +398,10 @@ struct ceph_osd_op {
__u8 flag; /* 0 = unwatch, 1 = watch */
} __attribute__ ((packed)) watch;
struct {
+ __le64 unused;
+ __le64 ver;
+ } __attribute__ ((packed)) assert_ver;
+ struct {
__le64 offset, length;
__le64 src_offset;
} __attribute__ ((packed)) clonerange;
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 84095e3e326..21dc09848a9 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -2525,7 +2525,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
case CEPH_OSD_OP_ASSERT_SRC_VERSION:
++ctx->num_read;
{
- uint64_t ver = op.watch.ver;
+ uint64_t ver = op.assert_ver.ver;
if (!ver)
result = -EINVAL;
else if (ver < src_obc->obs.oi.user_version.version)
diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc
index ea3e5d5c3eb..308fc0348d3 100644
--- a/src/osd/osd_types.cc
+++ b/src/osd/osd_types.cc
@@ -3358,6 +3358,9 @@ ostream& operator<<(ostream& out, const OSDOp& op)
case CEPH_OSD_OP_LIST_WATCHERS:
case CEPH_OSD_OP_LIST_SNAPS:
break;
+ case CEPH_OSD_OP_ASSERT_VER:
+ out << " v" << op.op.assert_ver.ver;
+ break;
case CEPH_OSD_OP_TRUNCATE:
out << " " << op.op.extent.offset;
break;
diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h
index 090fb331611..1276972cc4b 100644
--- a/src/osdc/Objecter.h
+++ b/src/osdc/Objecter.h
@@ -647,8 +647,8 @@ struct ObjectOperation {
}
void assert_version(uint64_t ver) {
- bufferlist bl;
- add_watch(CEPH_OSD_OP_ASSERT_VER, 0, ver, 0, bl);
+ OSDOp& osd_op = add_op(CEPH_OSD_OP_ASSERT_VER);
+ osd_op.op.assert_ver.ver = ver;
}
void assert_src_version(const object_t& srcoid, snapid_t srcsnapid, uint64_t ver) {
bufferlist bl;