Make diagnostics slightly better

nbd-vmsplice
Vitaliy Filippov 2021-07-18 01:21:04 +03:00
parent 148ff04aa8
commit 28bd94d2c2
1 changed files with 16 additions and 7 deletions

View File

@ -184,7 +184,8 @@ void journal_flusher_t::release_trim()
void journal_flusher_t::dump_diagnostics()
{
obj_ver_id flushable = { 0 };
const char *unflushable_type = "";
obj_ver_id unflushable = { 0 };
// Try to find out if there is a flushable object for information
for (object_id cur_oid: flush_queue)
{
@ -199,7 +200,9 @@ void journal_flusher_t::dump_diagnostics()
if (repeat_it != sync_to_repeat.end())
{
// Someone is already flushing it
continue;
unflushable_type = "locked,";
unflushable = cur;
break;
}
if (dirty_end->second.journal_sector >= bs->journal.dirty_start &&
(bs->journal.dirty_start >= bs->journal.used_start ||
@ -208,14 +211,19 @@ void journal_flusher_t::dump_diagnostics()
// Object is more recent than possible to flush
bool found = try_find_older(dirty_end, cur);
if (!found)
continue;
{
unflushable_type = "dirty,";
unflushable = cur;
break;
}
flushable = cur;
}
unflushable_type = "ok,";
unflushable = cur;
break;
}
printf(
"Flusher: queued=%ld first=%lx:%lx trim_wanted=%d dequeuing=%d trimming=%d cur=%d target=%d active=%d syncing=%d\n",
flush_queue.size(), flushable.oid.inode, flushable.oid.stripe,
"Flusher: queued=%ld first=%s%lx:%lx trim_wanted=%d dequeuing=%d trimming=%d cur=%d target=%d active=%d syncing=%d\n",
flush_queue.size(), unflushable_type, unflushable.oid.inode, unflushable.oid.stripe,
trim_wanted, dequeuing, trimming, cur_flusher_count, target_flusher_count,
active_flushers, syncing_flushers
);
@ -354,7 +362,8 @@ stop_flusher:
flusher->sync_to_repeat.erase(cur.oid);
int search_left = flusher->flush_queue.size() - 1;
#ifdef BLOCKSTORE_DEBUG
printf("Flusher overran writers (dirty_start=%08lx) - searching for older flushes (%d left)\n", bs->journal.dirty_start, search_left);
printf("Flusher overran writers (%lx:%lx v%lu, dirty_start=%08lx) - searching for older flushes (%d left)\n",
cur.oid.inode, cur.oid.stripe, cur.version, bs->journal.dirty_start, search_left);
#endif
while (search_left > 0)
{