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-30 16:54:16 -0700
commitc6d0b10ed705aa682668943e4b5e4111d1c6fa1e (patch)
treeb1902efeee8ec94fb377ef9b682ae09481684fab
parent8ba50c0e95f94bd7e5407205beba4e2e3446ffdf (diff)
downloadceph-c6d0b10ed705aa682668943e4b5e4111d1c6fa1e.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 e5d50ef28b4..6e047fb6367 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -2536,7 +2536,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)
diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc
index fafea2c816e..6511d802952 100644
--- a/src/osd/osd_types.cc
+++ b/src/osd/osd_types.cc
@@ -3416,6 +3416,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 be756054497..4fdaa407a58 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;