diff options
author | Sage Weil <sage@inktank.com> | 2013-08-25 11:12:44 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-30 16:54:16 -0700 |
commit | c6d0b10ed705aa682668943e4b5e4111d1c6fa1e (patch) | |
tree | b1902efeee8ec94fb377ef9b682ae09481684fab | |
parent | 8ba50c0e95f94bd7e5407205beba4e2e3446ffdf (diff) | |
download | ceph-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.h | 4 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.cc | 2 | ||||
-rw-r--r-- | src/osd/osd_types.cc | 3 | ||||
-rw-r--r-- | src/osdc/Objecter.h | 4 |
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; |