Re: [PATCH v2 5/8] odb/streaming: consolidate read and write streams

Karthik Nayak <[email protected]>
Newsgroups org.kernel.vger.git
Message-ID <CAOLa=ZTi8tL896_F2ONQck0z+H8NYhzcbTorb80NOdiqvnpjNg@mail.gmail.com>
Patrick Steinhardt <[email protected]> writes:

> The `struct odb_read_stream` and `struct odb_write_stream` both provide
> the same functionality: they allow a caller to read object data from an
> arbitrary source. Historically, the only difference was that the read
> stream was used to read data out of the object database, whereas the
> write stream was used to write data into the object database, but the
> interfaces were mostly the same.
>
> Over the preceding commits we have refactored the write stream to have
> almost exactly the same interface as the read stream. With these
> refactorings we can now easily merge those two streams into a single
> interface that's used for both use cases.
>
> While most of the changes are mechanical, there are two sites that need
> special mention:
>
>   - "builtin/unpack-objects.c" creates a write stream from compressed
>     object data.
>
>   - "odb/streaming.c" creates a write stream from a file descriptor.
>
> Adapting these sites to yield the new stream type requires a couple more
> changes. Most importantly, instead of embedding the pointer to the data
> in `struct odb_write_stream`, we now allocate a structure that wraps the
> new `struct odb_stream` base. Other than that though, the changes are
> rather straight forward.
>

So instead of `odb_write_stream.data` which was pointing to the data, we
simply wrap the stream with the data's structure, this allows us to get
the parent struct if we have the `odb_stream`. Alright!

> Some of the structures and functions are now somewhat misnamed. These
> will be fixed in subsequent commits.
>
> Signed-off-by: Patrick Steinhardt <[email protected]>
> ---
>  builtin/unpack-objects.c      | 31 ++++++++++++++++---------------
>  object-file.c                 | 25 ++++++++++++-------------
>  odb.c                         |  2 +-
>  odb.h                         |  4 ++--
>  odb/source-files.c            |  2 +-
>  odb/source-inmemory.c         |  4 ++--
>  odb/source-loose.c            |  6 +++---
>  odb/source-packed.c           |  2 +-
>  odb/source.h                  |  4 ++--
>  odb/streaming.c               | 35 ++++++++++++++++-------------------
>  odb/streaming.h               | 31 +++----------------------------
>  odb/transaction.c             |  2 +-
>  odb/transaction.h             |  4 ++--
>  t/unit-tests/u-odb-inmemory.c |  6 +++---
>  14 files changed, 65 insertions(+), 93 deletions(-)
>
> diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
> index 7439ec53be..05a2d48011 100644
> --- a/builtin/unpack-objects.c
> +++ b/builtin/unpack-objects.c
> @@ -359,20 +359,21 @@ static void unpack_non_delta_entry(enum object_type type, unsigned long size,
>  }
>
>  struct input_zstream_data {
> +	struct odb_stream base;
>  	git_zstream *zstream;
>  	int status;
>  };
>
> -static ssize_t feed_input_zstream(struct odb_write_stream *in_stream,
> -				  unsigned char *buf, size_t buf_len)
> +static ssize_t feed_input_zstream(struct odb_stream *in_stream,
> +				  char *buf, size_t buf_len)
>  {
> -	struct input_zstream_data *data = in_stream->data;
> +	struct input_zstream_data *data = container_of(in_stream, struct input_zstream_data, base);
>  	git_zstream *zstream = data->zstream;
>
>  	if (data->status != Z_OK)
>  		return 0;
>
> -	zstream->next_out = buf;
> +	zstream->next_out = (unsigned char *) buf;

But we do loose information here since we now use 'char *' for both
read/write. But we gain flexibility.

[snip]

The rest looks good.
signature.asc (application/pgp-signature, 690 B)
-----BEGIN PGP SIGNATURE-----

iQHKBAEBCgA0FiEEV85Mf2N1cQ/LZcYGPtWfJI5GjH8FAmp69XMWHGthcnRoaWsu
MTg4QGdtYWlsLmNvbQAKCRA+1Z8kjkaMf0fFDACa1AkO4vj5qsCrPDzgIID4vTq+
BYzBUj5IAIO3Lml7D2BQF/aX5gZ7yirE6gsP5vbR8JTr5rPWGkD/+olZ7lItBKz4
zXiKEVS8Pjop9nc9aMV/PZ1/Lt8uN/Z2Js9RgXDr9SVEuopHkqJ7OquYZPCYLNVg
r4rLnbtaPxGslXPfCl7wAk+9H26sosjY2kcUD9D7nH/wh4Kzwoe7Aw+TIenvqiGS
TbSBYeC4mlK9YiujlCqV3lMmWyVrVqeKwsuha8oWdTbSNPwuN3pVfg+D51lA1/N+
xiR5/uEqzNvoUt5A9CYlebT9t/LS5AS/QE0eOlR+a5784T4/6Diy1GwdSQEiMv73
nYd0sbUEU2O8JEazEXl8ViDKhRS9loWlppkx0MJauw6gwQLoHtmJ24rRT9Atlu19
DwDXTt/cqx2wmWeXH6J1erz65B0lT12ttKBLvT+Ma+KDK8yURfYp/Gs/4tI/G9Zy
WXpz9r4qD7i8jEXrGUZWJx1EK918Eps+KpZfQjw=
=FQc7
-----END PGP SIGNATURE-----
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.