]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_test_rados: IsDirty on random snaps
authorSage Weil <sage@inktank.com>
Sat, 28 Dec 2013 01:12:54 +0000 (17:12 -0800)
committerSage Weil <sage@inktank.com>
Tue, 14 Jan 2014 00:19:44 +0000 (16:19 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/test/osd/RadosModel.h

index 197e952f3b7a155f63365460313f62ee332797e7..b521569b7d2918549b7a26bed208060eaf4adfba 100644 (file)
@@ -1688,6 +1688,7 @@ public:
   string oid;
   bool dirty;
   ObjectDesc old_value;
+  int snap;
 
   IsDirtyOp(int n,
            RadosTestContext *context,
@@ -1704,6 +1705,13 @@ public:
   {
     context->state_lock.Lock();
 
+    if (!(rand() % 4) && !context->snaps.empty()) {
+      snap = rand_choose(context->snaps)->first;
+    } else {
+      snap = -1;
+    }
+    std::cout << num << ": snap " << snap << std::endl;
+
     pair<TestOp*, TestOp::CallbackInfo*> *cb_arg =
       new pair<TestOp*, TestOp::CallbackInfo*>(this,
                                               new TestOp::CallbackInfo(0));
@@ -1714,10 +1722,18 @@ public:
     context->oid_not_in_use.erase(oid);
     context->state_lock.Unlock();
 
+    if (snap >= 0) {
+      context->io_ctx.snap_set_read(context->snaps[snap]);
+    }
+
     op.is_dirty(&dirty, NULL);
     int r = context->io_ctx.aio_operate(context->prefix+oid, completion,
                                        &op, 0);
     assert(!r);
+
+    if (snap >= 0) {
+      context->io_ctx.snap_set_read(0);
+    }
   }
 
   void _finish(CallbackInfo *info)
@@ -1728,7 +1744,7 @@ public:
     context->oid_in_use.erase(oid);
     context->oid_not_in_use.insert(oid);
 
-    assert(context->find_object(oid, &old_value)); // FIXME snap?
+    assert(context->find_object(oid, &old_value, snap));
 
     int r = completion->get_return_value();
     if (r == 0) {