ool_record_t& record) {
return trans_intr::do_for_each(record.get_extents(),
[this, &t](auto& ool_extent) {
+ LOG_PREFIX(SegmentedAllocator::Writer::finish_write);
auto& lextent = ool_extent.get_lextent();
- logger().debug("SegmentedAllocator::Writer::finish_write: "
- "extent: {}, ool_paddr: {}",
+ DEBUGT("extent: {}, ool_paddr: {}",
+ t,
*lextent,
ool_extent.get_ool_paddr());
return lba_manager.update_mapping(
bufferlist bl = record.encode(current_segment->segment->get_segment_id(), 0);
seastar::promise<> pr;
current_segment->inflight_writes.emplace_back(pr.get_future());
+ LOG_PREFIX(SegmentedAllocator::Writer::_write);
- logger().debug(
- "SegmentedAllocator::Writer::write: written {} extents,"
- " {} bytes to segment {} at {}",
+ DEBUGT(
+ "written {} extents, {} bytes to segment {} at {}",
+ t,
record.get_num_extents(),
bl.length(),
current_segment->segment->get_segment_id(),
return trans_intr::make_interruptible(
current_segment->segment->write(record.get_base(), bl).safe_then(
- [this, pr=std::move(pr),
+ [this, pr=std::move(pr), &t,
it=(--current_segment->inflight_writes.end()),
cs=current_segment]() mutable {
+ LOG_PREFIX(SegmentedAllocator::Writer::_write);
if (cs->outdated) {
+ DEBUGT("segment rolled", t);
pr.set_value();
} else{
+ DEBUGT("segment not rolled", t);
current_segment->inflight_writes.erase(it);
}
return seastar::now();
return !rolling_segment;
},
[this, &record, &extents, &t]() -> write_iertr::future<> {
+ LOG_PREFIX(SegmentedAllocator::Writer::write);
record.set_base(allocated_to);
for (auto it = extents.begin();
it != extents.end();) {
assert(!rolling_segment);
rolling_segment = true;
auto num_extents = record.get_num_extents();
- logger().debug(
- "SegmentedAllocator::Writer::write: end of segment, writing {} extents to segment {} at {}",
+ DEBUGT(
+ "end of segment, writing {} extents to segment {} at {}",
+ t,
num_extents,
current_segment->segment->get_segment_id(),
allocated_to);
}
record_size_t rsize = record.get_encoded_record_length();
- logger().debug(
- "SegmentedAllocator::Writer::write: writing {} extents to segment {} at {}",
+ DEBUGT(
+ "writing {} extents to segment {} at {}",
+ t,
record.get_num_extents(),
current_segment->segment->get_segment_id(),
allocated_to);
SegmentedAllocator::Writer::roll_segment_ertr::future<>
SegmentedAllocator::Writer::roll_segment(bool set_rolling) {
+ LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
+ DEBUG("set_rolling {}", set_rolling);
if (set_rolling) {
rolling_segment = true;
}
return fut.then(
[cs=std::move(current_segment), this, it=(--open_segments.end())] {
return cs->segment->close().safe_then([this, cs, it] {
+ LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
assert((*it).get() == cs.get());
segment_provider.close_segment(cs->segment->get_segment_id());
open_segments.erase(it);
+ DEBUG("closed segment: {}", cs->segment->get_segment_id());
});
});
}).handle_exception_type([](seastar::gate_closed_exception e) {
- logger().debug(
- "SegmentedAllocator::Writer::roll_segment:"
- " writer_guard closed, should be stopping");
+ LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
+ DEBUG(" writer_guard closed, should be stopping");
return seastar::now();
});
}
return segment_provider.get_segment().safe_then([this](auto segment) {
return segment_manager.open(segment);
}).safe_then([this](auto segref) {
+ LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
+ DEBUG("opened new segment: {}", segref->get_segment_id());
return init_segment(*segref).safe_then([segref=std::move(segref), this] {
+ LOG_PREFIX(SegmentedAllocator::Writer::roll_segment);
assert(!current_segment.get());
current_segment.reset(new open_segment_wrapper_t());
current_segment->segment = segref;
open_segments.emplace_back(current_segment);
rolling_segment = false;
segment_rotation_guard.broadcast();
+ DEBUG("inited new segment: {}", segref->get_segment_id());
});
}).handle_error(
roll_segment_ertr::pass_further{},
#include "seastar/core/gate.hh"
#include "crimson/common/condition_variable.h"
-#include "crimson/common/log.h"
+#include "crimson/os/seastore/logging.h"
#include "crimson/os/seastore/cache.h"
#include "crimson/os/seastore/cached_extent.h"
#include "crimson/os/seastore/lba_manager.h"
alloc_paddr_iertr::future<> alloc_ool_extents_paddr(
Transaction& t,
std::list<LogicalCachedExtentRef>& extents) final {
+ LOG_PREFIX(SegmentedAllocator::alloc_ool_extents_paddr);
+ DEBUGT("start", t);
return seastar::do_with(
std::map<Writer*, std::list<LogicalCachedExtentRef>>(),
[this, extents=std::move(extents), &t](auto& alloc_map) {
using alloc_paddr_iertr = ExtentOolWriter::write_iertr;
alloc_paddr_iertr::future<> delayed_alloc_or_ool_write(
Transaction& t) {
+ LOG_PREFIX(ExtentPlacementManager::delayed_alloc_or_ool_write);
+ DEBUGT("start", t);
return seastar::do_with(
std::map<ExtentAllocator*, std::list<LogicalCachedExtentRef>>(),
std::list<std::pair<paddr_t, LogicalCachedExtentRef>>(),
[this, &t](auto& alloc_map, auto& inline_list) mutable {
+ LOG_PREFIX(ExtentPlacementManager::delayed_alloc_or_ool_write);
auto& alloc_list = t.get_delayed_alloc_list();
+ uint64_t num_ool_extents = 0;
for (auto& extent : alloc_list) {
// extents may be invalidated
if (!extent->is_valid()) {
}
auto& allocator_ptr = get_allocator(extent->backend_type, extent->hint);
alloc_map[allocator_ptr.get()].emplace_back(extent);
+ num_ool_extents++;
}
+ DEBUGT("{} inline extents, {} ool extents",
+ t,
+ inline_list.size(),
+ num_ool_extents);
return trans_intr::do_for_each(alloc_map, [&t](auto& p) {
auto allocator = p.first;
auto& extents = p.second;
return allocator->alloc_ool_extents_paddr(t, extents);
}).si_then([&inline_list, this, &t] {
+ LOG_PREFIX(ExtentPlacementManager::delayed_alloc_or_ool_write);
+ DEBUGT("processing {} inline extents", t, inline_list.size());
return trans_intr::do_for_each(inline_list, [this, &t](auto& p) {
auto old_addr = p.first;
auto& extent = p.second;