reftable/merged: stop using generic tables in the merged table
The merged table provides access to a reftable stack by merging the contents of those tables into a virtual table. These subtables are being tracked via `struct reftable_table`, which is a generic interface for accessing either a single reftable or a merged reftable. So in theory, it would be possible for the merged table to merge together other merged tables. This is somewhat nonsensical though: we only ever set up a merged table over normal reftables, and there is no reason to do otherwise. This generic interface thus makes the code way harder to follow and reason about than really necessary. The abstraction layer may also have an impact on performance, even though the extra set of vtable function calls probably doesn't really matter. Refactor the merged tables to use a `struct reftable_reader` for each of the subtables instead, which gives us direct access to the underlying tables. Adjust names accordingly. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6631ed3ce7
commit
b8ca235ca5
@ -347,9 +347,9 @@ static void test_reftable_stack_transaction_api_performs_auto_compaction(void)
|
||||
* all tables in the stack.
|
||||
*/
|
||||
if (i != n)
|
||||
EXPECT(st->merged->stack_len == i + 1);
|
||||
EXPECT(st->merged->readers_len == i + 1);
|
||||
else
|
||||
EXPECT(st->merged->stack_len == 1);
|
||||
EXPECT(st->merged->readers_len == 1);
|
||||
}
|
||||
|
||||
reftable_stack_destroy(st);
|
||||
@ -375,7 +375,7 @@ static void test_reftable_stack_auto_compaction_fails_gracefully(void)
|
||||
|
||||
err = reftable_stack_add(st, write_test_ref, &ref);
|
||||
EXPECT_ERR(err);
|
||||
EXPECT(st->merged->stack_len == 1);
|
||||
EXPECT(st->merged->readers_len == 1);
|
||||
EXPECT(st->stats.attempts == 0);
|
||||
EXPECT(st->stats.failures == 0);
|
||||
|
||||
@ -390,7 +390,7 @@ static void test_reftable_stack_auto_compaction_fails_gracefully(void)
|
||||
ref.update_index = 2;
|
||||
err = reftable_stack_add(st, write_test_ref, &ref);
|
||||
EXPECT_ERR(err);
|
||||
EXPECT(st->merged->stack_len == 2);
|
||||
EXPECT(st->merged->readers_len == 2);
|
||||
EXPECT(st->stats.attempts == 1);
|
||||
EXPECT(st->stats.failures == 1);
|
||||
|
||||
@ -881,7 +881,7 @@ static void test_reftable_stack_auto_compaction(void)
|
||||
|
||||
err = reftable_stack_auto_compact(st);
|
||||
EXPECT_ERR(err);
|
||||
EXPECT(i < 3 || st->merged->stack_len < 2 * fastlog2(i));
|
||||
EXPECT(i < 3 || st->merged->readers_len < 2 * fastlog2(i));
|
||||
}
|
||||
|
||||
EXPECT(reftable_stack_compaction_stats(st)->entries_written <
|
||||
@ -905,7 +905,7 @@ static void test_reftable_stack_auto_compaction_with_locked_tables(void)
|
||||
EXPECT_ERR(err);
|
||||
|
||||
write_n_ref_tables(st, 5);
|
||||
EXPECT(st->merged->stack_len == 5);
|
||||
EXPECT(st->merged->readers_len == 5);
|
||||
|
||||
/*
|
||||
* Given that all tables we have written should be roughly the same
|
||||
@ -925,7 +925,7 @@ static void test_reftable_stack_auto_compaction_with_locked_tables(void)
|
||||
err = reftable_stack_auto_compact(st);
|
||||
EXPECT_ERR(err);
|
||||
EXPECT(st->stats.failures == 0);
|
||||
EXPECT(st->merged->stack_len == 4);
|
||||
EXPECT(st->merged->readers_len == 4);
|
||||
|
||||
reftable_stack_destroy(st);
|
||||
strbuf_release(&buf);
|
||||
@ -970,9 +970,9 @@ static void test_reftable_stack_add_performs_auto_compaction(void)
|
||||
* all tables in the stack.
|
||||
*/
|
||||
if (i != n)
|
||||
EXPECT(st->merged->stack_len == i + 1);
|
||||
EXPECT(st->merged->readers_len == i + 1);
|
||||
else
|
||||
EXPECT(st->merged->stack_len == 1);
|
||||
EXPECT(st->merged->readers_len == 1);
|
||||
}
|
||||
|
||||
reftable_stack_destroy(st);
|
||||
@ -994,7 +994,7 @@ static void test_reftable_stack_compaction_with_locked_tables(void)
|
||||
EXPECT_ERR(err);
|
||||
|
||||
write_n_ref_tables(st, 3);
|
||||
EXPECT(st->merged->stack_len == 3);
|
||||
EXPECT(st->merged->readers_len == 3);
|
||||
|
||||
/* Lock one of the tables that we're about to compact. */
|
||||
strbuf_reset(&buf);
|
||||
@ -1008,7 +1008,7 @@ static void test_reftable_stack_compaction_with_locked_tables(void)
|
||||
err = reftable_stack_compact_all(st, NULL);
|
||||
EXPECT(err == REFTABLE_LOCK_ERROR);
|
||||
EXPECT(st->stats.failures == 1);
|
||||
EXPECT(st->merged->stack_len == 3);
|
||||
EXPECT(st->merged->readers_len == 3);
|
||||
|
||||
reftable_stack_destroy(st);
|
||||
strbuf_release(&buf);
|
||||
|
Reference in New Issue
Block a user