summaryrefslogtreecommitdiff
path: root/c_src
diff options
context:
space:
mode:
Diffstat (limited to 'c_src')
-rw-r--r--c_src/cmd_list_journal.c41
1 files changed, 32 insertions, 9 deletions
diff --git a/c_src/cmd_list_journal.c b/c_src/cmd_list_journal.c
index 93efc362..2d364224 100644
--- a/c_src/cmd_list_journal.c
+++ b/c_src/cmd_list_journal.c
@@ -65,9 +65,21 @@ static bool bkey_matches_filter(d_bbpos_range filter, struct jset_entry *entry,
struct bbpos k_start = BBPOS(entry->btree_id, bkey_start_pos(&k->k));
struct bbpos k_end = BBPOS(entry->btree_id, k->k.p);
- if (bbpos_cmp(k_start, i->start) >= 0 &&
- bbpos_cmp(k_end, i->end) <= 0)
- return true;
+ if (!i->start.pos.snapshot &&
+ !i->end.pos.snapshot) {
+ k_start.pos.snapshot = 0;
+ k_end.pos.snapshot = 0;
+ }
+
+ if (!k->k.size) {
+ if (bbpos_cmp(k_start, i->start) >= 0 &&
+ bbpos_cmp(k_end, i->end) <= 0)
+ return true;
+ } else {
+ if (bbpos_cmp(i->start, k_end) <= 0 &&
+ bbpos_cmp(i->end, k_start) >= 0)
+ return true;
+ }
}
return false;
}
@@ -75,9 +87,9 @@ static bool bkey_matches_filter(d_bbpos_range filter, struct jset_entry *entry,
static bool entry_matches_transaction_filter(struct jset_entry *entry,
d_bbpos_range filter)
{
- if (entry->type == BCH_JSET_ENTRY_btree_root ||
- entry->type == BCH_JSET_ENTRY_btree_keys ||
- entry->type == BCH_JSET_ENTRY_overwrite)
+ if (!entry->level &&
+ (entry->type == BCH_JSET_ENTRY_btree_keys ||
+ entry->type == BCH_JSET_ENTRY_overwrite))
jset_entry_for_each_key(entry, k)
if (bkey_matches_filter(filter, entry, k))
return true;
@@ -90,6 +102,8 @@ static bool should_print_transaction(struct jset_entry *entry, struct jset_entry
{
struct jset_entry_log *l = container_of(entry, struct jset_entry_log, entry);
unsigned b = jset_entry_log_msg_bytes(l);
+ bool have_log_messages = false;
+ bool have_non_log_messages = false;
darray_for_each(msg_filter, i)
if (!strncmp(*i, l->d, b))
@@ -100,11 +114,19 @@ static bool should_print_transaction(struct jset_entry *entry, struct jset_entry
for (entry = vstruct_next(entry);
entry != end && !entry_is_transaction_start(entry);
- entry = vstruct_next(entry))
- if (entry_is_log_msg(entry) ||
- entry_matches_transaction_filter(entry, key_filter))
+ entry = vstruct_next(entry)) {
+ if (entry_matches_transaction_filter(entry, key_filter))
return true;
+ if (entry_is_log_msg(entry))
+ have_log_messages = true;
+ else
+ have_non_log_messages = true;
+ }
+
+ if (have_log_messages && !have_non_log_messages)
+ return true;
+
return false;
}
@@ -134,6 +156,7 @@ static void journal_entry_header_to_text(struct printbuf *out,
prt_str(out, "blacklisted ");
prt_printf(out,
+ "\n"
"journal entry %llu\n"
" version %u\n"
" last seq %llu\n"