From db6623fa3ec0c3d693af9d6770f29351e1ef352c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 7 Oct 2013 19:03:23 -0700 Subject: RadosModel: send racing read on write Signed-off-by: Samuel Just --- src/test/osd/RadosModel.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index aba6a531c6f..ac2f336f110 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -767,9 +767,13 @@ public: string oid; ContDesc cont; set waiting; + librados::AioCompletion *rcompletion; uint64_t waiting_on; uint64_t last_acked_tid; + librados::ObjectReadOperation read_op; + bufferlist rbuffer; + WriteOp(int n, RadosTestContext *context, const string &oid, @@ -824,6 +828,21 @@ public: context->io_ctx.aio_write(context->prefix+oid, completion, to_write, i.get_len(), i.get_start()); } + + pair *cb_arg = + new pair( + this, + new TestOp::CallbackInfo(tid)); + rcompletion = context->rados.aio_create_completion( + (void*) cb_arg, &write_callback, NULL); + waiting_on++; + read_op.read(0, 1, &rbuffer, 0); + context->io_ctx.aio_operate( + context->prefix+oid, rcompletion, + &read_op, + librados::SNAP_HEAD, + librados::OPERATION_ORDER_READS_WRITES, // order wrt previous write/update + 0); } void _finish(CallbackInfo *info) @@ -860,6 +879,13 @@ public: } context->update_object_version(oid, version); + if (rcompletion->get_version64() != version) { + cerr << "Error: racing read on " << oid << " returned version " + << rcompletion->get_version64() << " rather than version " + << version << std::endl; + assert(0 == "racing read got wrong version"); + } + rcompletion->release(); context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); context->kick(); -- cgit v1.2.1