git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 00/11] reftable: expose write options as config

From
Karthik Nayak <karthik.188@gmail.com>
Date
May 10, 2024, 11:43 UTC
Message-ID
<CAOLa=ZTJq40qhXLR=W0DSKKd+rehU-CzBafrkxP_nZH7xGJyWQ@mail.gmail.com>
In-Reply-To
<cover.1715336797.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 167 quoted lines
> Hi,
>
> this is the second version of my patch series that exposes various
> options of the reftable writer via Git configuration.
>
> Changes compared to v1:
>
>   - Drop unneeded return statements.
>
>   - Move default geometric factor into "constants.h".
>
>   - Fix a typo in a commit message.
>
> Thanks!
>
> Patrick
>
> Patrick Steinhardt (11):
>   reftable: consistently refer to `reftable_write_options` as `opts`
>   reftable: consistently pass write opts as value
>   reftable/writer: drop static variable used to initialize strbuf
>   reftable/writer: improve error when passed an invalid block size
>   reftable/dump: support dumping a table's block structure
>   refs/reftable: allow configuring block size
>   reftable: use `uint16_t` to track restart interval
>   refs/reftable: allow configuring restart interval
>   refs/reftable: allow disabling writing the object index
>   reftable: make the compaction factor configurable
>   refs/reftable: allow configuring geometric factor
>
>  Documentation/config.txt          |   2 +
>  Documentation/config/reftable.txt |  49 +++++
>  refs/reftable-backend.c           |  43 ++++-
>  reftable/block.h                  |   2 +-
>  reftable/constants.h              |   1 +
>  reftable/dump.c                   |  12 +-
>  reftable/merged_test.c            |   6 +-
>  reftable/reader.c                 |  63 +++++++
>  reftable/readwrite_test.c         |  26 +--
>  reftable/refname_test.c           |   2 +-
>  reftable/reftable-reader.h        |   2 +
>  reftable/reftable-stack.h         |   2 +-
>  reftable/reftable-writer.h        |  10 +-
>  reftable/stack.c                  |  57 +++---
>  reftable/stack.h                  |   5 +-
>  reftable/stack_test.c             | 118 ++++++------
>  reftable/writer.c                 |  20 +--
>  t/t0613-reftable-write-options.sh | 286 ++++++++++++++++++++++++++++++
>  18 files changed, 576 insertions(+), 130 deletions(-)
>  create mode 100644 Documentation/config/reftable.txt
>  create mode 100755 t/t0613-reftable-write-options.sh
>
> Range-diff against v1:
>  1:  47cee6e25e =  1:  7efa566306 reftable: consistently refer to `reftable_write_options` as `opts`
>  2:  d8a0764e87 =  2:  e6f8fc09c2 reftable: consistently pass write opts as value
>  3:  c040f81fba =  3:  aa2903e3e5 reftable/writer: drop static variable used to initialize strbuf
>  4:  ef79bb1b7b =  4:  5e7cbb7b19 reftable/writer: improve error when passed an invalid block size
>  5:  4d4407d4a4 =  5:  ed1c150d90 reftable/dump: support dumping a table's block structure
>  6:  b4e4db5735 !  6:  be5bdc6dc1 refs/reftable: allow configuring block size
>     @@ refs/reftable-backend.c: static int read_ref_without_reload(struct reftable_stac
>      +		if (block_size > 16777215)
>      +			die("reftable block size cannot exceed 16MB");
>      +		opts->block_size = block_size;
>     -+		return 0;
>      +	}
>      +
>      +	return 0;
>  7:  79d9e07ca9 =  7:  05e8d1df2d reftable: use `uint16_t` to track restart interval
>  8:  653ec4dfa5 !  8:  bc0bf65553 refs/reftable: allow configuring restart interval
>     @@ Documentation/config/reftable.txt: readers during access.
>
>       ## refs/reftable-backend.c ##
>      @@ refs/reftable-backend.c: static int reftable_be_config(const char *var, const char *value,
>     + 		if (block_size > 16777215)
>       			die("reftable block size cannot exceed 16MB");
>       		opts->block_size = block_size;
>     - 		return 0;
>      +	} else if (!strcmp(var, "reftable.restartinterval")) {
>      +		unsigned long restart_interval = git_config_ulong(var, value, ctx->kvi);
>      +		if (restart_interval > UINT16_MAX)
>      +			die("reftable block size cannot exceed %u", (unsigned)UINT16_MAX);
>      +		opts->restart_interval = restart_interval;
>     -+		return 0;
>       	}
>
>       	return 0;
>  9:  6f2c481acc !  9:  6bc240fd0c refs/reftable: allow disabling writing the object index
>     @@ Documentation/config/reftable.txt: A maximum of `65535` restart points per block
>
>       ## refs/reftable-backend.c ##
>      @@ refs/reftable-backend.c: static int reftable_be_config(const char *var, const char *value,
>     + 		if (restart_interval > UINT16_MAX)
>       			die("reftable block size cannot exceed %u", (unsigned)UINT16_MAX);
>       		opts->restart_interval = restart_interval;
>     - 		return 0;
>      +	} else if (!strcmp(var, "reftable.indexobjects")) {
>      +		opts->skip_index_objects = !git_config_bool(var, value);
>     -+		return 0;
>       	}
>
>       	return 0;
> 10:  30e2e33479 ! 10:  9d4c1f0340 reftable: make the compaction factor configurable
>     @@ Commit message
>
>          Signed-off-by: Patrick Steinhardt <ps@pks.im>
>
>     + ## reftable/constants.h ##
>     +@@ reftable/constants.h: license that can be found in the LICENSE file or at
>     +
>     + #define MAX_RESTARTS ((1 << 16) - 1)
>     + #define DEFAULT_BLOCK_SIZE 4096
>     ++#define DEFAULT_GEOMETRIC_FACTOR 2
>     +
>     + #endif
>     +
>       ## reftable/reftable-writer.h ##
>      @@ reftable/reftable-writer.h: struct reftable_write_options {
>
>     @@ reftable/reftable-writer.h: struct reftable_write_options {
>       /* reftable_block_stats holds statistics for a single block type */
>
>       ## reftable/stack.c ##
>     +@@ reftable/stack.c: license that can be found in the LICENSE file or at
>     +
>     + #include "../write-or-die.h"
>     + #include "system.h"
>     ++#include "constants.h"
>     + #include "merged.h"
>     + #include "reader.h"
>     + #include "refname.h"
>      @@ reftable/stack.c: static int segment_size(struct segment *s)
>       	return s->end - s->start;
>       }
>     @@ reftable/stack.c: static int segment_size(struct segment *s)
>       	size_t i;
>
>      +	if (!factor)
>     -+		factor = 2;
>     ++		factor = DEFAULT_GEOMETRIC_FACTOR;
>      +
>       	/*
>       	 * If there are no tables or only a single one then we don't have to
> 11:  861f2e72d9 ! 11:  e1282e53fb refs/reftable: allow configuring geometric factor
>     @@ Documentation/config/reftable.txt: reftable.indexObjects::
>       The default value is `true`.
>      +
>      +reftable.geometricFactor::
>     -+	Whenever the reftable backend appends a new table to the table it
>     ++	Whenever the reftable backend appends a new table to the stack, it
>      +	performs auto compaction to ensure that there is only a handful of
>      +	tables. The backend does this by ensuring that tables form a geometric
>      +	sequence regarding the respective sizes of each table.
>     @@ Documentation/config/reftable.txt: reftable.indexObjects::
>
>       ## refs/reftable-backend.c ##
>      @@ refs/reftable-backend.c: static int reftable_be_config(const char *var, const char *value,
>     + 		opts->restart_interval = restart_interval;
>       	} else if (!strcmp(var, "reftable.indexobjects")) {
>       		opts->skip_index_objects = !git_config_bool(var, value);
>     - 		return 0;
>      +	} else if (!strcmp(var, "reftable.geometricfactor")) {
>      +		unsigned long factor = git_config_ulong(var, value, ctx->kvi);
>      +		if (factor > UINT8_MAX)
>
> base-commit: d4cc1ec35f3bcce816b69986ca41943f6ce21377
> --
> 2.45.0
The range diff looks good to me, thanks for the quick iteration :)
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 54 of 78 in “reftable: expose write options as config”
  1. 00/11 reftable: expose write options as configPatrick Steinhardt, May 2, 2024
  2. 01/11 reftable: consistently refer to `reftable_write_options` as `opts`Patrick Steinhardt, May 2, 2024
  3. Karthik NayakMay 10, 2024
  4. Patrick SteinhardtMay 10, 2024
  5. 02/11 reftable: consistently pass write opts as valuePatrick Steinhardt, May 2, 2024
  6. 03/11 reftable/writer: drop static variable used to initialize strbufPatrick Steinhardt, May 2, 2024
  7. 04/11 reftable/writer: improve error when passed an invalid block sizePatrick Steinhardt, May 2, 2024
  8. 05/11 reftable/dump: support dumping a table's block structurePatrick Steinhardt, May 2, 2024
  9. 06/11 refs/reftable: allow configuring block sizePatrick Steinhardt, May 2, 2024
  10. Karthik NayakMay 10, 2024
  11. Patrick SteinhardtMay 10, 2024
  12. 07/11 reftable: use `uint16_t` to track restart intervalPatrick Steinhardt, May 2, 2024
  13. 08/11 refs/reftable: allow configuring restart intervalPatrick Steinhardt, May 2, 2024
  14. 09/11 refs/reftable: allow disabling writing the object indexPatrick Steinhardt, May 2, 2024
  15. 10/11 reftable: make the compaction factor configurablePatrick Steinhardt, May 2, 2024
  16. Karthik NayakMay 10, 2024
  17. Patrick SteinhardtMay 10, 2024
  18. 11/11 refs/reftable: allow configuring geometric factorPatrick Steinhardt, May 2, 2024
  19. Karthik NayakMay 10, 2024
  20. Patrick SteinhardtMay 10, 2024
  21. Patrick SteinhardtMay 2, 2024
  22. Junio C HamanoMay 3, 2024
  23. Patrick SteinhardtMay 6, 2024
  24. Justin ToblerMay 6, 2024
  25. Karthik NayakMay 10, 2024
  26. Patrick SteinhardtMay 10, 2024
  27. 00/11 reftable: expose write options as configPatrick Steinhardt, May 10, 2024
  28. 01/11 reftable: consistently refer to `reftable_write_options` as `opts`Patrick Steinhardt, May 10, 2024
  29. Junio C HamanoMay 10, 2024
  30. 02/11 reftable: consistently pass write opts as valuePatrick Steinhardt, May 10, 2024
  31. Junio C HamanoMay 10, 2024
  32. Patrick SteinhardtMay 13, 2024
  33. 03/11 reftable/writer: drop static variable used to initialize strbufPatrick Steinhardt, May 10, 2024
  34. Junio C HamanoMay 10, 2024
  35. 04/11 reftable/writer: improve error when passed an invalid block sizePatrick Steinhardt, May 10, 2024
  36. Junio C HamanoMay 10, 2024
  37. Patrick SteinhardtMay 13, 2024
  38. 05/11 reftable/dump: support dumping a table's block structurePatrick Steinhardt, May 10, 2024
  39. Junio C HamanoMay 13, 2024
  40. 06/11 refs/reftable: allow configuring block sizePatrick Steinhardt, May 10, 2024
  41. 07/11 reftable: use `uint16_t` to track restart intervalPatrick Steinhardt, May 10, 2024
  42. Junio C HamanoMay 13, 2024
  43. Patrick SteinhardtMay 14, 2024
  44. 08/11 refs/reftable: allow configuring restart intervalPatrick Steinhardt, May 10, 2024
  45. Junio C HamanoMay 10, 2024
  46. Patrick SteinhardtMay 13, 2024
  47. 09/11 refs/reftable: allow disabling writing the object indexPatrick Steinhardt, May 10, 2024
  48. 10/11 reftable: make the compaction factor configurablePatrick Steinhardt, May 10, 2024
  49. Junio C HamanoMay 10, 2024
  50. Patrick SteinhardtMay 13, 2024
  51. Junio C HamanoMay 13, 2024
  52. Patrick SteinhardtMay 14, 2024
  53. 11/11 refs/reftable: allow configuring geometric factorPatrick Steinhardt, May 10, 2024
  54. Karthik NayakMay 10, 2024
  55. 00/11 reftable: expose write options as configPatrick Steinhardt, May 13, 2024
  56. 01/11 reftable: consistently refer to `reftable_write_options` as `opts`Patrick Steinhardt, May 13, 2024
  57. 02/11 reftable: pass opts as constant pointerPatrick Steinhardt, May 13, 2024
  58. Karthik NayakMay 17, 2024
  59. Justin ToblerMay 21, 2024
  60. Patrick SteinhardtMay 22, 2024
  61. 03/11 reftable/writer: drop static variable used to initialize strbufPatrick Steinhardt, May 13, 2024
  62. 04/11 reftable/writer: improve error when passed an invalid block sizePatrick Steinhardt, May 13, 2024
  63. 05/11 reftable/dump: support dumping a table's block structurePatrick Steinhardt, May 13, 2024
  64. Justin ToblerMay 21, 2024
  65. Patrick SteinhardtMay 22, 2024
  66. 06/11 refs/reftable: allow configuring block sizePatrick Steinhardt, May 13, 2024
  67. Karthik NayakMay 17, 2024
  68. 07/11 reftable: use `uint16_t` to track restart intervalPatrick Steinhardt, May 13, 2024
  69. 08/11 refs/reftable: allow configuring restart intervalPatrick Steinhardt, May 13, 2024
  70. Justin ToblerMay 21, 2024
  71. Patrick SteinhardtMay 22, 2024
  72. 09/11 refs/reftable: allow disabling writing the object indexPatrick Steinhardt, May 13, 2024
  73. 10/11 reftable: make the compaction factor configurablePatrick Steinhardt, May 13, 2024
  74. 11/11 refs/reftable: allow configuring geometric factorPatrick Steinhardt, May 13, 2024
  75. Karthik NayakMay 17, 2024
  76. Patrick SteinhardtMay 17, 2024
  77. Justin ToblerMay 21, 2024
  78. Patrick SteinhardtMay 22, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.