BlueStore::Writer wr(this, txc, &wctx, o);
uint64_t start = p2align(offset, min_alloc_size);
uint64_t end = p2roundup(offset + length, min_alloc_size);
+ wr.left_affected_range = start;
+ wr.right_affected_range = end;
std::tie(wr.left_shard_bound, wr.right_shard_bound) =
o->extent_map.fault_range_ex(db, start, end - start);
wr.do_write(offset, bl);
+ o->extent_map.dirty_range(wr.left_affected_range, wr.right_affected_range - wr.left_affected_range);
+ o->extent_map.maybe_reshard(wr.left_affected_range, wr.right_affected_range);
return r;
}
// we can just expand existing Extent
ex->length += map_end - map_begin;
dout(20) << __func__ << " expanded extent " << ex->print(pp_mode) << dendl;
+ left_affected_range = std::min(left_affected_range, ex->logical_offset);
} else {
// disjointed, new extent needed
Extent *le = new Extent(
map_begin, in_blob_offset, map_end - map_begin, ex->blob);
dout(20) << __func__ << " new extent " << le->print(pp_mode) << dendl;
onode->extent_map.extent_map.insert(*le);
+ left_affected_range = std::min(left_affected_range, le->logical_offset);
}
} else if (ex->logical_offset >= map_end) {
// we are adding to left side of target
ex->blob_offset -= (map_end - map_begin);
ex->length += (map_end - map_begin);
dout(20) << __func__ << " expanded extent " << ex->print(pp_mode) << dendl;
+ right_affected_range = std::max(right_affected_range, ex->logical_end());
} else {
// disjointed, new extent needed
Extent *le = new Extent(
map_begin, in_blob_offset, map_end - map_begin, ex->blob);
dout(20) << __func__ << " new extent " << le->print(pp_mode) << dendl;
onode->extent_map.extent_map.insert(*le);
+ right_affected_range = std::max(right_affected_range, le->logical_end());
}
}
}
_collect_released_allocated();
// update statfs
txc->statfs_delta += statfs_delta;
- onode->extent_map.dirty_range(location, data_end-location);
- onode->extent_map.maybe_reshard(location, data_end);
// note: compress extent is not needed; _try_reuse_allocated_* joins extents if possible
// in other cases new blobs cannot be joined with existing ones
dout(25) << "result: " << std::endl << onode->print(pp_mode) << dendl;