#include <seastar/core/metrics.hh>
-#include "crimson/common/log.h"
#include "crimson/os/seastore/logging.h"
#include "crimson/os/seastore/segment_cleaner.h"
#include "crimson/os/seastore/transaction_manager.h"
-namespace {
- seastar::logger& logger() {
- return crimson::get_logger(ceph_subsys_seastore_cleaner);
- }
-}
-
SET_SUBSYS(seastore_cleaner);
namespace crimson::os::seastore {
bool SpaceTrackerSimple::equals(const SpaceTrackerI &_other) const
{
+ LOG_PREFIX(SpaceTrackerSimple::equals);
const auto &other = static_cast<const SpaceTrackerSimple&>(_other);
if (other.live_bytes_by_segment.size() != live_bytes_by_segment.size()) {
- logger().error("{}: different segment counts, bug in test");
+ ERROR("different segment counts, bug in test");
assert(0 == "segment counts should match");
return false;
}
i != live_bytes_by_segment.end(); ++i, ++j) {
if (i->second.live_bytes != j->second.live_bytes) {
all_match = false;
- logger().debug(
- "{}: segment_id {} live bytes mismatch *this: {}, other: {}",
- __func__,
- i->first,
- i->second.live_bytes,
- j->second.live_bytes);
+ DEBUG("segment_id {} live bytes mismatch *this: {}, other: {}",
+ i->first, i->second.live_bytes, j->second.live_bytes);
}
}
return all_match;
extent_len_t len,
const extent_len_t block_size)
{
+ LOG_PREFIX(SegmentMap::allocate);
assert(offset % block_size == 0);
assert(len % block_size == 0);
for (auto i = b; i < e; ++i) {
if (bitmap[i]) {
if (!error) {
- logger().error(
- "SegmentMap::allocate found allocated in {}, {} ~ {}",
- segment,
- offset,
- len);
+ ERROR("found allocated in {}, {} ~ {}", segment, offset, len);
error = true;
}
- logger().debug(
- "SegmentMap::allocate block {} allocated",
- i * block_size);
+ DEBUG("block {} allocated", i * block_size);
}
bitmap[i] = true;
}
extent_len_t len,
const extent_len_t block_size)
{
+ LOG_PREFIX(SegmentMap::release);
assert(offset % block_size == 0);
assert(len % block_size == 0);
for (auto i = b; i < e; ++i) {
if (!bitmap[i]) {
if (!error) {
- logger().error(
- "SegmentMap::release found unallocated in {}, {} ~ {}",
- segment,
- offset,
- len);
+ ERROR("found unallocated in {}, {} ~ {}", segment, offset, len);
error = true;
}
- logger().debug(
- "SegmentMap::release block {} unallocated",
- i * block_size);
+ DEBUG("block {} unallocated", i * block_size);
}
bitmap[i] = false;
}
bool SpaceTrackerDetailed::equals(const SpaceTrackerI &_other) const
{
+ LOG_PREFIX(SpaceTrackerDetailed::equals);
const auto &other = static_cast<const SpaceTrackerDetailed&>(_other);
if (other.segment_usage.size() != segment_usage.size()) {
- logger().error("{}: different segment counts, bug in test");
+ ERROR("different segment counts, bug in test");
assert(0 == "segment counts should match");
return false;
}
i != segment_usage.end(); ++i, ++j) {
if (i->second.get_usage() != j->second.get_usage()) {
all_match = false;
- logger().error(
- "{}: segment_id {} live bytes mismatch *this: {}, other: {}",
- __func__,
- i->first,
- i->second.get_usage(),
- j->second.get_usage());
+ ERROR("segment_id {} live bytes mismatch *this: {}, other: {}",
+ i->first, i->second.get_usage(), j->second.get_usage());
}
}
return all_match;
void SpaceTrackerDetailed::SegmentMap::dump_usage(extent_len_t block_size) const
{
+ LOG_PREFIX(SegmentMap::dump_usage);
+ INFO("dump start");
for (unsigned i = 0; i < bitmap.size(); ++i) {
if (bitmap[i]) {
- logger().debug(" {} still live", i * block_size);
+ LOCAL_LOGGER.info(" {} still live", i * block_size);
}
}
}
void SpaceTrackerDetailed::dump_usage(segment_id_t id) const
{
- logger().debug("SpaceTrackerDetailed::dump_usage {}", id);
+ LOG_PREFIX(SpaceTrackerDetailed::dump_usage);
+ INFO("{}", id);
segment_usage[id].dump_usage(
block_size_by_segment_manager[id.device_id()]);
}
void SpaceTrackerSimple::dump_usage(segment_id_t id) const
{
- logger().info(
- "SpaceTrackerSimple::dump_usage id: {}, live_bytes: {}",
- id,
- live_bytes_by_segment[id].live_bytes);
+ LOG_PREFIX(SpaceTrackerSimple::dump_usage);
+ INFO("id: {}, live_bytes: {}",
+ id, live_bytes_by_segment[id].live_bytes);
}
SegmentCleaner::SegmentCleaner(
DEBUGT("rewrite {} dirty extents", t, dirty_list.size());
return seastar::do_with(
std::move(dirty_list),
- [this, &t](auto &dirty_list) {
+ [this, FNAME, &t](auto &dirty_list) {
return trans_intr::do_for_each(
dirty_list,
- [this, &t](auto &e) {
- LOG_PREFIX(SegmentCleaner::rewrite_dirty);
+ [this, FNAME, &t](auto &e) {
DEBUGT("cleaning {}", t, *e);
return ecb->rewrite_extent(t, e);
});
return trans_intr::do_for_each(
backrefs,
[this, &extents, &t, &seq](auto &ent) {
- LOG_PREFIX(SegmentCleaner::gc_reclaim_space);
+ LOG_PREFIX(SegmentCleaner::_retrieve_live_extents);
DEBUGT("getting extent of type {} at {}~{}",
t,
ent.type,
ent.len);
return ecb->get_extent_if_live(
t, ent.type, ent.paddr, ent.laddr, ent.len
- ).si_then([this, &extents, &ent, &seq](auto ext) {
+ ).si_then([this, FNAME, &extents, &ent, &seq, &t](auto ext) {
if (!ext) {
- logger().debug(
- "SegmentCleaner::gc_reclaim_space:"
- " addr {} dead, skipping",
- ent.paddr);
+ DEBUGT("addr {} dead, skipping", t, ent.paddr);
auto backref = cache.get_del_backref(ent.paddr);
if (seq == JOURNAL_SEQ_NULL || seq < backref.seq) {
seq = backref.seq;
SegmentCleaner::mount_ret SegmentCleaner::mount()
{
+ LOG_PREFIX(SegmentCleaner::mount);
const auto& sms = sm_group->get_segment_managers();
- logger().info(
- "SegmentCleaner::mount: {} segment managers", sms.size());
+ INFO("{} segment managers", sms.size());
init_complete = false;
stats = {};
journal_tail_target = JOURNAL_SEQ_NULL;
metrics.clear();
register_metrics();
- logger().info("SegmentCleaner::mount: {} segments", segments.get_num_segments());
+ INFO("{} segments", segments.get_num_segments());
return seastar::do_with(
std::vector<std::pair<segment_id_t, segment_header_t>>(),
- [this](auto& segment_set) {
+ [this, FNAME](auto& segment_set) {
return crimson::do_for_each(
segments.begin(),
segments.end(),
- [this, &segment_set](auto& it) {
+ [this, FNAME, &segment_set](auto& it) {
auto segment_id = it.first;
return sm_group->read_segment_header(
segment_id
- ).safe_then([segment_id, this, &segment_set](auto header) {
- logger().info(
- "SegmentCleaner::mount: segment_id={} -- {}",
- segment_id, header);
+ ).safe_then([segment_id, this, FNAME, &segment_set](auto header) {
+ INFO("segment_id={} -- {}", segment_id, header);
auto s_type = header.get_type();
if (s_type == segment_type_t::NULL_SEG) {
- logger().error(
- "SegmentCleaner::mount: got null segment, segment_id={} -- {}",
- segment_id, header);
+ ERROR("got null segment, segment_id={} -- {}", segment_id, header);
ceph_abort();
}
return sm_group->read_segment_tail(