]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_test_objectstore: queue split on parent pg sequencer 23748/head
authorSage Weil <sage@redhat.com>
Tue, 14 Aug 2018 13:58:31 +0000 (08:58 -0500)
committerPrashant D <pdhange@redhat.com>
Mon, 27 Aug 2018 04:39:53 +0000 (00:39 -0400)
This matches the OSD.

It also ensure that we drain transactions that precede the split, which
will include any finish_write calls that might otherwise attach the
Buffer to the wrong cache shard: _txc_finish() calls finish_write and
passes the cache shard without the cache shard lock held, but may block
waiting for split_cache() which then changes the destination collection's
shard.  Once it gets the lock and proceeds it would operate on the wrong
cache shard, leading to a failed assert later when the sharedblob is
trimmed.

Fixes: http://tracker.ceph.com/issues/24439
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit de747b0dc1ec63e134e4839e420a66c2ec6b845b)

src/test/objectstore/store_test.cc

index 031214a872647051ab5578104fd870d0fd94f505..49221af10f574ee5df1153c6c1efe2be82d10b99 100644 (file)
@@ -5128,10 +5128,10 @@ void colsplittest(
     ObjectStore::Transaction t;
     t.create_collection(tid, common_suffix_size + 1);
     t.split_collection(cid, common_suffix_size+1, 1<<common_suffix_size, tid);
-    r = queue_transaction(store, tch, std::move(t));
+    r = queue_transaction(store, ch, std::move(t));
     ASSERT_EQ(r, 0);
   }
-  tch->flush();
+  ch->flush();
 
   ObjectStore::Transaction t;
   vector<ghobject_t> objects;