From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Edward Thomson <ethomson@edwardthomson.com>,
Eric Sunshine <sunshine@sunshineco.com>,
Justin Tobler <jltobler@gmail.com>
Subject: [PATCH v2 0/7] reftable: stop using Git subsystems
Date: Fri, 8 Nov 2024 09:17:06 +0100 [thread overview]
Message-ID: <cover.1731047193.git.ps@pks.im> (raw)
In-Reply-To: <cover.1729677003.git.ps@pks.im>
Hi,
this is the second version of my patch series that continues to detangle
the reftable library from the Git codebase.
Changes compared to v1:
- Fix a commit message typo.
- Document the values of the newly introduced reftable format IDs.
- Include "reftable-basics.h" instead of "basics.h".
- Adapt `stack_fsync()` to take write options as input instead of the
whole stack.
Thanks!
Patrick
Patrick Steinhardt (7):
reftable/system: move "dir.h" to its only user
reftable: explicitly handle hash format IDs
reftable/system: stop depending on "hash.h"
reftable/stack: stop using `fsync_component()` directly
reftable/system: provide thin wrapper for tempfile subsystem
reftable/stack: drop only use of `get_locked_file_path()`
reftable/system: provide thin wrapper for lockfile subsystem
Makefile | 1 +
refs/reftable-backend.c | 19 +++-
reftable/basics.c | 13 ++-
reftable/basics.h | 10 +-
reftable/merged.c | 4 +-
reftable/merged.h | 3 +-
reftable/reader.c | 14 ++-
reftable/reader.h | 4 +-
reftable/reftable-basics.h | 13 +++
reftable/reftable-merged.h | 4 +-
reftable/reftable-reader.h | 2 +-
reftable/reftable-record.h | 12 +-
reftable/reftable-writer.h | 8 +-
reftable/stack.c | 171 ++++++++++++++--------------
reftable/system.c | 126 ++++++++++++++++++++
reftable/system.h | 88 +++++++++++++-
reftable/writer.c | 20 +++-
t/helper/test-reftable.c | 4 +-
t/unit-tests/lib-reftable.c | 5 +-
t/unit-tests/lib-reftable.h | 2 +-
t/unit-tests/t-reftable-block.c | 41 +++----
t/unit-tests/t-reftable-merged.c | 26 ++---
t/unit-tests/t-reftable-pq.c | 3 +-
t/unit-tests/t-reftable-reader.c | 4 +-
t/unit-tests/t-reftable-readwrite.c | 41 +++----
t/unit-tests/t-reftable-record.c | 59 +++++-----
t/unit-tests/t-reftable-stack.c | 37 +++---
27 files changed, 505 insertions(+), 229 deletions(-)
create mode 100644 reftable/system.c
Range-diff against v1:
1: 036cc8f9d60 ! 1: 2b7d4e28529 reftable/system: move "dir.h" to its only user
@@ Metadata
## Commit message ##
reftable/system: move "dir.h" to its only user
- We still include "dir.h" in "reftable/system.h" evne though it is not
+ We still include "dir.h" in "reftable/system.h" even though it is not
used by anything but by a single unit test. Move it over into that unit
test so that we don't accidentally use any functionality provided by it
in the reftable codebase.
2: c1bd8e2b3c4 ! 2: 38cfe85bf5b reftable: explicitly handle hash format IDs
@@ reftable/basics.h: int common_prefix_size(struct reftable_buf *a, struct reftabl
+/*
+ * Format IDs that identify the hash function used by a reftable. Note that
-+ * these constants end up on disk and thus mustn't change.
++ * these constants end up on disk and thus mustn't change. The format IDs are
++ * "sha1" and "s256" in big endian, respectively.
+ */
+#define REFTABLE_FORMAT_ID_SHA1 ((uint32_t) 0x73686131)
+#define REFTABLE_FORMAT_ID_SHA256 ((uint32_t) 0x73323536)
3: b595668a5cd ! 3: 745c1a070dd reftable/system: stop depending on "hash.h"
@@ reftable/merged.h: license that can be found in the LICENSE file or at
#define MERGED_H
#include "system.h"
-+#include "basics.h"
++#include "reftable-basics.h"
struct reftable_merged_table {
struct reftable_reader **readers;
4: 86269fc4fca ! 4: 7782652b975 reftable/stack: stop using `fsync_component()` directly
@@ reftable/stack.c: static int stack_filename(struct reftable_buf *dest, struct re
}
-static ssize_t reftable_fd_write(void *arg, const void *data, size_t sz)
-+static int stack_fsync(struct reftable_stack *st, int fd)
++static int stack_fsync(const struct reftable_write_options *opts, int fd)
{
- int *fdp = (int *)arg;
- return write_in_full(*fdp, data, sz);
-+ if (st->opts.fsync)
-+ return st->opts.fsync(fd);
++ if (opts->fsync)
++ return opts->fsync(fd);
+ return fsync(fd);
}
-static int reftable_fd_flush(void *arg)
+struct fd_writer {
-+ struct reftable_stack *stack;
++ const struct reftable_write_options *opts;
+ int fd;
+};
+
@@ reftable/stack.c: static int stack_filename(struct reftable_buf *dest, struct re
+static int fd_writer_flush(void *arg)
+{
+ struct fd_writer *writer = arg;
-+ return stack_fsync(writer->stack, writer->fd);
++ return stack_fsync(writer->opts, writer->fd);
}
int reftable_new_stack(struct reftable_stack **dest, const char *dir,
@@ reftable/stack.c: int reftable_addition_commit(struct reftable_addition *add)
}
- err = fsync_component(FSYNC_COMPONENT_REFERENCE, lock_file_fd);
-+ err = stack_fsync(add->stack, lock_file_fd);
++ err = stack_fsync(&add->stack->opts, lock_file_fd);
if (err < 0) {
err = REFTABLE_IO_ERROR;
goto done;
@@ reftable/stack.c: int reftable_addition_add(struct reftable_addition *add,
struct reftable_writer *wr = NULL;
struct tempfile *tab_file = NULL;
+ struct fd_writer writer = {
-+ .stack = add->stack,
++ .opts = &add->stack->opts,
+ };
int err = 0;
- int tab_fd;
@@ reftable/stack.c: static int stack_compact_locked(struct reftable_stack *st,
struct reftable_buf tab_file_path = REFTABLE_BUF_INIT;
struct reftable_writer *wr = NULL;
+ struct fd_writer writer= {
-+ .stack = st,
++ .opts = &st->opts,
+ };
struct tempfile *tab_file;
- int tab_fd, err = 0;
@@ reftable/stack.c: static int stack_compact_range(struct reftable_stack *st,
}
- err = fsync_component(FSYNC_COMPONENT_REFERENCE, get_lock_file_fd(&tables_list_lock));
-+ err = stack_fsync(st, get_lock_file_fd(&tables_list_lock));
++ err = stack_fsync(&st->opts, get_lock_file_fd(&tables_list_lock));
if (err < 0) {
err = REFTABLE_IO_ERROR;
unlink(new_table_path.buf);
5: aca19955560 ! 5: b15daefbc83 reftable/system: provide thin wrapper for tempfile subsystem
@@ reftable/stack.c: int reftable_addition_add(struct reftable_addition *add,
- struct tempfile *tab_file = NULL;
+ struct reftable_tmpfile tab_file = REFTABLE_TMPFILE_INIT;
struct fd_writer writer = {
- .stack = add->stack,
+ .opts = &add->stack->opts,
};
@@ reftable/stack.c: int reftable_addition_add(struct reftable_addition *add,
if (err < 0)
@@ reftable/stack.c: uint64_t reftable_stack_next_update_index(struct reftable_stac
struct reftable_buf tab_file_path = REFTABLE_BUF_INIT;
@@ reftable/stack.c: static int stack_compact_locked(struct reftable_stack *st,
struct fd_writer writer= {
- .stack = st,
+ .opts = &st->opts,
};
- struct tempfile *tab_file;
+ struct reftable_tmpfile tab_file = REFTABLE_TMPFILE_INIT;
6: 74afe30974d = 6: 83949837a29 reftable/stack: drop only use of `get_locked_file_path()`
7: 71b213d6f8a ! 7: 80fe5bc5e10 reftable/system: provide thin wrapper for lockfile subsystem
@@ reftable/stack.c: int reftable_addition_commit(struct reftable_addition *add)
goto done;
}
-- err = stack_fsync(add->stack, lock_file_fd);
-+ err = stack_fsync(add->stack, add->tables_list_lock.fd);
+- err = stack_fsync(&add->stack->opts, lock_file_fd);
++ err = stack_fsync(&add->stack->opts, add->tables_list_lock.fd);
if (err < 0) {
err = REFTABLE_IO_ERROR;
goto done;
@@ reftable/stack.c: static int stack_compact_range(struct reftable_stack *st,
goto done;
}
-- err = stack_fsync(st, get_lock_file_fd(&tables_list_lock));
-+ err = stack_fsync(st, tables_list_lock.fd);
+- err = stack_fsync(&st->opts, get_lock_file_fd(&tables_list_lock));
++ err = stack_fsync(&st->opts, tables_list_lock.fd);
if (err < 0) {
err = REFTABLE_IO_ERROR;
unlink(new_table_path.buf);
--
2.47.0.229.g8f8d6eee53.dirty
next prev parent reply other threads:[~2024-11-08 8:17 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-23 9:55 [PATCH 0/7] reftable: stop using Git subsystems Patrick Steinhardt
2024-10-23 9:55 ` [PATCH 1/7] reftable/system: move "dir.h" to its only user Patrick Steinhardt
2024-10-24 4:18 ` Eric Sunshine
2024-10-23 9:55 ` [PATCH 2/7] reftable: explicitly handle hash format IDs Patrick Steinhardt
2024-11-07 23:11 ` Justin Tobler
2024-10-23 9:56 ` [PATCH 3/7] reftable/system: stop depending on "hash.h" Patrick Steinhardt
2024-11-08 1:10 ` Justin Tobler
2024-11-08 6:17 ` Patrick Steinhardt
2024-10-23 9:56 ` [PATCH 4/7] reftable/stack: stop using `fsync_component()` directly Patrick Steinhardt
2024-11-08 2:09 ` Justin Tobler
2024-11-08 6:17 ` Patrick Steinhardt
2024-10-23 9:56 ` [PATCH 5/7] reftable/system: provide thin wrapper for tempfile subsystem Patrick Steinhardt
2024-10-23 9:56 ` [PATCH 6/7] reftable/stack: drop only use of `get_locked_file_path()` Patrick Steinhardt
2024-10-23 9:56 ` [PATCH 7/7] reftable/system: provide thin wrapper for lockfile subsystem Patrick Steinhardt
2024-11-08 8:17 ` Patrick Steinhardt [this message]
2024-11-08 8:17 ` [PATCH v2 1/7] reftable/system: move "dir.h" to its only user Patrick Steinhardt
2024-11-08 8:17 ` [PATCH v2 2/7] reftable: explicitly handle hash format IDs Patrick Steinhardt
2024-11-18 13:47 ` karthik nayak
2024-11-08 8:17 ` [PATCH v2 3/7] reftable/system: stop depending on "hash.h" Patrick Steinhardt
2024-11-12 5:53 ` Junio C Hamano
2024-11-18 13:54 ` karthik nayak
2024-11-08 8:17 ` [PATCH v2 4/7] reftable/stack: stop using `fsync_component()` directly Patrick Steinhardt
2024-11-18 14:02 ` karthik nayak
2024-11-18 15:26 ` Patrick Steinhardt
2024-11-08 8:17 ` [PATCH v2 5/7] reftable/system: provide thin wrapper for tempfile subsystem Patrick Steinhardt
2024-11-18 14:18 ` karthik nayak
2024-11-18 14:29 ` karthik nayak
2024-11-08 8:17 ` [PATCH v2 6/7] reftable/stack: drop only use of `get_locked_file_path()` Patrick Steinhardt
2024-11-08 8:17 ` [PATCH v2 7/7] reftable/system: provide thin wrapper for lockfile subsystem Patrick Steinhardt
2024-11-08 17:39 ` [PATCH v2 0/7] reftable: stop using Git subsystems Justin Tobler
2024-11-11 0:37 ` Junio C Hamano
2024-11-18 14:30 ` karthik nayak
2024-11-18 15:26 ` Patrick Steinhardt
2024-11-18 15:33 ` [PATCH v3 " Patrick Steinhardt
2024-11-18 15:33 ` [PATCH v3 1/7] reftable/system: move "dir.h" to its only user Patrick Steinhardt
2024-11-18 15:33 ` [PATCH v3 2/7] reftable: explicitly handle hash format IDs Patrick Steinhardt
2024-11-18 15:33 ` [PATCH v3 3/7] reftable/system: stop depending on "hash.h" Patrick Steinhardt
2024-11-18 15:34 ` [PATCH v3 4/7] reftable/stack: stop using `fsync_component()` directly Patrick Steinhardt
2024-11-18 15:34 ` [PATCH v3 5/7] reftable/system: provide thin wrapper for tempfile subsystem Patrick Steinhardt
2024-11-18 15:34 ` [PATCH v3 6/7] reftable/stack: drop only use of `get_locked_file_path()` Patrick Steinhardt
2024-11-18 15:34 ` [PATCH v3 7/7] reftable/system: provide thin wrapper for lockfile subsystem Patrick Steinhardt
2024-11-19 14:23 ` [PATCH v3 0/7] reftable: stop using Git subsystems karthik nayak
2024-11-20 1:09 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1731047193.git.ps@pks.im \
--to=ps@pks.im \
--cc=ethomson@edwardthomson.com \
--cc=git@vger.kernel.org \
--cc=jltobler@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).