Re: [PATCH v5 9/9] odb/transaction: add transaction interface to write packfiles

Junio C Hamano <[email protected]>
Newsgroups org.kernel.vger.git
Message-ID <[email protected]>
Justin Tobler <[email protected]> writes:

> In git-receive-pack(1), the incoming packfile is written to the ODB via
> `unpack()`, which spawns git-index-pack(1) or git-unpack-objects(1)
> directly. With pluggable object databases, an alternative backend may
> need to handle writing packfile data differently though.
>
> Introduce `odb_transaction_write_pack()` as a generic interface to
> handle writing a packfile to a transaction and use the logic from
> `unpack()` as the "files" backend implementation. Note that when storing
> the objects as a packfile, git-index-pack(1) also writes a ".keep"
> lockfile next to it to prevent a concurrent repack from removing the new
> pack prior to reference updates being performed. The "files" transaction
> backend is responsible for managing these ".keep" files and removes them
> post-commit once the transaction is finalized.
>
> Call sites in git-receive-pack(1) are updated accordingly.
>
> Signed-off-by: Justin Tobler <[email protected]>
> ---
>  builtin/receive-pack.c | 160 +-----------------------------------
>  object-file.c          | 178 +++++++++++++++++++++++++++++++++++++++++
>  odb/transaction.c      |   7 ++
>  odb/transaction.h      |  62 ++++++++++++++
>  4 files changed, 250 insertions(+), 157 deletions(-)

Reading receive.unpackLimit and transfer.unpackLimit in generic
object-layer code feels like a layering violation, as these settings
belong to the transfer layer.  However, deciding whether to unpack
or index is inherently up to the file-backend, which is what the
'*.unpacklimit' settings control.  Future ODB backends might not
distinguish loose from packed objects, and even if they do, their
performance characteristics will differ.

We can attribute these '*.unpackLimit' names to historical wart; we
lacked non-file ODB backends when they were named.  Had we named
them today, something like 'odb-file.unpackLimit' would have been
more accurate.  If we had other bulk-import mechanisms that use pack
streams, they would use the same '*.unpacklimit' to optimize the
object layout for file-backed ODB stores.

Thanks.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.