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