coll_cache->lock.unlock();
} while (true);
- auto cct = onode->c->store->cct;
- bool inject_21040 =
- cct->_conf->bluestore_debug_inject_bug21040;
vector<BlobRef> id_to_blob(oldo->extent_map.extent_map.size());
for (auto& e : oldo->extent_map.extent_map) {
e.blob->last_encoded_id = -1;
// make sure it is shared
if (!blob.is_shared()) {
c->make_blob_shared(b->_assign_blobid(txc), e.blob);
- if (!inject_21040 && !src_dirty) {
+ if (!src_dirty) {
src_dirty = true;
dirty_range_begin = e.logical_offset;
- } else if (inject_21040 &&
- dirty_range_begin == 0 && dirty_range_end == 0) {
- dirty_range_begin = e.logical_offset;
}
ceph_assert(e.logical_end() > 0);
// -1 to exclude next potential shard
dout(20) << __func__ << " dst " << *ne << dendl;
++n;
}
- if ((!inject_21040 && src_dirty) ||
- (inject_21040 && dirty_range_end > dirty_range_begin)) {
+ if (src_dirty) {
oldo->extent_map.dirty_range(dirty_range_begin,
dirty_range_end - dirty_range_begin);
txc->write_onode(oldo);
ASSERT_EQ(bstore->fsck(true), 0);
- // reproducing issues #21040 & 20983
- SetVal(g_conf(), "bluestore_debug_inject_bug21040", "true");
- g_ceph_context->_conf.apply_changes(nullptr);
- bstore->mount();
-
- cerr << "repro bug #21040" << std::endl;
- {
- auto ch = store->open_collection(cid);
- {
- ObjectStore::Transaction t;
- bl.append("0123456789012345");
- t.write(cid, hoid3, offs_base, bl.length(), bl);
- bl.clear();
- bl.append('!');
- t.write(cid, hoid3, 0, bl.length(), bl);
-
- r = queue_transaction(store, ch, std::move(t));
- ASSERT_EQ(r, 0);
- }
- {
- ObjectStore::Transaction t;
- t.clone(cid, hoid3, hoid3_cloned);
- r = queue_transaction(store, ch, std::move(t));
- ASSERT_EQ(r, 0);
- }
-
- bstore->umount();
- // depending on statfs tracking we might meet or miss relevant error
- // hence error count >= 3
- ASSERT_GE(bstore->fsck(false), 3);
- ASSERT_LE(bstore->repair(false), 0);
- ASSERT_EQ(bstore->fsck(false), 0);
- }
-
cerr << "Zombie spanning blob" << std::endl;
{
bstore->mount();