Re: [PATCH v2 3/9] reftable/stack: test compaction with already-locked tables
From: Karthik Nayak <hidden>
Date: 2024-08-08 10:46:43
Attachments
- signature.asc [application/pgp-signature] 690 bytes
From: Karthik Nayak <hidden>
Date: 2024-08-08 10:46:43
Patrick Steinhardt [off-list ref] writes:
We're lacking test coverage for compacting tables when some of the tables that we are about to compact are locked. Add two tests that exercise this, one for auto-compaction and one for full compaction.
So this patch prepares for the upcoming fixes by adding tests which fail compaction. Makes sense. [snip]
+static void test_reftable_stack_compaction_with_locked_tables(void)
+{
+ struct reftable_write_options opts = {
+ .disable_auto_compact = 1,
+ };
+ struct reftable_stack *st = NULL;
+ struct strbuf buf = STRBUF_INIT;
+ char *dir = get_tmp_dir(__LINE__);
+ int err;
+
+ err = reftable_new_stack(&st, dir, &opts);
+ EXPECT_ERR(err);
+
+ write_n_ref_tables(st, &opts, 3);
+ EXPECT(st->merged->stack_len == 3);
+
+ /* Lock one of the tables that we're about to compact. */
+ strbuf_reset(&buf);
+ strbuf_addf(&buf, "%s/%s.lock", dir, st->readers[1]->name);
+ write_file_buf(buf.buf, "", 0);
+
+ /*
+ * Compaction is expected to fail given that we were not able to
+ * compact all tables.
+ */
+ err = reftable_stack_compact_all(st, NULL);
+ EXPECT(err == REFTABLE_LOCK_ERROR);
+ /* TODO: this is wrong, we should get notified about the failure. */
+ EXPECT(st->stats.failures == 0);This is a good catch. The autocompaction code has a wrapper `stack_compact_range_stats` which handles this exact scenario. [snip]