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

[PATCH 01/17] object-store: rename `raw_object_store` to `object_database`

From
Patrick Steinhardt <ps@pks.im>
Date
May 6, 2025, 11:09 UTC
Message-ID
<20250506-pks-object-store-wo-the-repository-v1-1-c05b82e7b126@pks.im>
In-Reply-To
<20250506-pks-object-store-wo-the-repository-v1-0-c05b82e7b126@pks.im>

The `raw_object_store` structure is the central entry point for reading and writing objects in a repository. The main purpose of this structure is to manage object directories and provide an interface to access and write objects in those object directories.

Right now, many of the functions associated with the raw object store implicitly rely on `the_repository` to get access to its `objects` pointer, which is the `raw_object_store`. As we want to generally get rid of using `the_repository` across our codebase we will have to convert this implicit dependency on this global variable into an explicit parameter.

This conversion can be done by simply passing in an explicit pointer to a repository and then using its `->objects` pointer. But there is a second effort underway, which is to make the object subsystem more selfcontained so that we can eventually have pluggale object backends. As such, passing in a repository wouldn't make a ton of sense, and the goal is to convert the object store interfaces such that we always pass in a reference to the `raw_object_store` instead.

This will expose the `raw_object_store` type to a lot more callers though, which surfaces that this type is named somewhat awkwardly. The "raw_" prefix makes readers wonder whether there is a non-raw variant of the object store, but there isn't. Furthermore, we nowadays want to name functions in a way that they can be clearly attributed to a specific subsystem, but calling them e.g. `raw_object_store_has_object()` is just too unwieldy, even when dropping the "raw_" prefix.

Instead, rename the structure to `object_database`. This term is already used a lot throughout our codebase, and it cannot easily be mistaken for "object directories", either. Furthermore, its acronym ODB is already well-known and works well as part of a function's name, like for example `odb_has_object()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 commit-graph.c |  2 +-
 commit-graph.h |  4 ++--
 object-store.c | 12 ++++++------
 object-store.h | 11 ++++++++---
 packfile.c     |  2 +-
 packfile.h     |  4 ++--
 repository.c   |  4 ++--
 repository.h   |  4 ++--
 8 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/commit-graph.c b/commit-graph.c
index 6394752b0b0..1b66486b9c9 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -829,7 +829,7 @@ struct bloom_filter_settings *get_bloom_filter_settings(struct repository *r)
 	return NULL;
 }
 
-void close_commit_graph(struct raw_object_store *o)
+void close_commit_graph(struct object_database *o)
 {
 	if (!o->commit_graph)
 		return;
diff --git a/commit-graph.h b/commit-graph.h
index 13f662827d4..20d38c100ce 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -26,7 +26,7 @@ void git_test_write_commit_graph_or_die(void);
 struct commit;
 struct bloom_filter_settings;
 struct repository;
-struct raw_object_store;
+struct object_database;
 struct string_list;
 
 char *get_commit_graph_filename(struct object_directory *odb);
@@ -186,7 +186,7 @@ int write_commit_graph(struct object_directory *odb,
 
 int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags);
 
-void close_commit_graph(struct raw_object_store *);
+void close_commit_graph(struct object_database *);
 void free_commit_graph(struct commit_graph *);
 
 /*
diff --git a/object-store.c b/object-store.c
index 2f51d0e3b03..1effcb12273 100644
--- a/object-store.c
+++ b/object-store.c
@@ -44,7 +44,7 @@ struct cached_object_entry {
 	} value;
 };
 
-static const struct cached_object *find_cached_object(struct raw_object_store *object_store,
+static const struct cached_object *find_cached_object(struct object_database *object_store,
 						      const struct object_id *oid)
 {
 	static const struct cached_object empty_tree = {
@@ -86,7 +86,7 @@ int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
 /*
  * Return non-zero iff the path is usable as an alternate object database.
  */
-static int alt_odb_usable(struct raw_object_store *o,
+static int alt_odb_usable(struct object_database *o,
 			  struct strbuf *path,
 			  const char *normalized_objdir, khiter_t *pos)
 {
@@ -959,9 +959,9 @@ void assert_oid_type(const struct object_id *oid, enum object_type expect)
 		    type_name(expect));
 }
 
-struct raw_object_store *raw_object_store_new(void)
+struct object_database *odb_new(void)
 {
-	struct raw_object_store *o = xmalloc(sizeof(*o));
+	struct object_database *o = xmalloc(sizeof(*o));
 
 	memset(o, 0, sizeof(*o));
 	INIT_LIST_HEAD(&o->packed_git_mru);
@@ -970,7 +970,7 @@ struct raw_object_store *raw_object_store_new(void)
 	return o;
 }
 
-static void free_object_directories(struct raw_object_store *o)
+static void free_object_directories(struct object_database *o)
 {
 	while (o->odb) {
 		struct object_directory *next;
@@ -983,7 +983,7 @@ static void free_object_directories(struct raw_object_store *o)
 	o->odb_by_path = NULL;
 }
 
-void raw_object_store_clear(struct raw_object_store *o)
+void odb_clear(struct object_database *o)
 {
 	FREE_AND_NULL(o->alternate_db);
 
diff --git a/object-store.h b/object-store.h
index c2fe5a19605..34b8efbbb83 100644
--- a/object-store.h
+++ b/object-store.h
@@ -86,7 +86,12 @@ struct packed_git;
 struct multi_pack_index;
 struct cached_object_entry;
 
-struct raw_object_store {
+/*
+ * The object database encapsulates access to objects in a repository. It
+ * manages one or more backends that store the actual objects which are
+ * configured via alternates.
+ */
+struct object_database {
 	/*
 	 * Set of all object directories; the main directory is first (and
 	 * cannot be NULL after initialization). Subsequent directories are
@@ -168,8 +173,8 @@ struct raw_object_store {
 	unsigned packed_git_initialized : 1;
 };
 
-struct raw_object_store *raw_object_store_new(void);
-void raw_object_store_clear(struct raw_object_store *o);
+struct object_database *odb_new(void);
+void odb_clear(struct object_database *o);
 
 /*
  * Create a temporary file rooted in the object database directory, or
diff --git a/packfile.c b/packfile.c
index d91016f1c7f..8f51665266d 100644
--- a/packfile.c
+++ b/packfile.c
@@ -359,7 +359,7 @@ void close_pack(struct packed_git *p)
 	oidset_clear(&p->bad_objects);
 }
 
-void close_object_store(struct raw_object_store *o)
+void close_object_store(struct object_database *o)
 {
 	struct packed_git *p;
 
diff --git a/packfile.h b/packfile.h
index 3a3c77cf05a..826eb7f475f 100644
--- a/packfile.h
+++ b/packfile.h
@@ -183,12 +183,12 @@ int close_pack_fd(struct packed_git *p);
 
 uint32_t get_pack_fanout(struct packed_git *p, uint32_t value);
 
-struct raw_object_store;
+struct object_database;
 
 unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned long *);
 void close_pack_windows(struct packed_git *);
 void close_pack(struct packed_git *);
-void close_object_store(struct raw_object_store *o);
+void close_object_store(struct object_database *o);
 void unuse_pack(struct pack_window **);
 void clear_delta_base_cache(void);
 struct packed_git *add_packed_git(struct repository *r, const char *path,
diff --git a/repository.c b/repository.c
index 9b3d6665fc6..07757e6e0c9 100644
--- a/repository.c
+++ b/repository.c
@@ -52,7 +52,7 @@ static void set_default_hash_algo(struct repository *repo)
 
 void initialize_repository(struct repository *repo)
 {
-	repo->objects = raw_object_store_new();
+	repo->objects = odb_new();
 	repo->remote_state = remote_state_new();
 	repo->parsed_objects = parsed_object_pool_new(repo);
 	ALLOC_ARRAY(repo->index, 1);
@@ -374,7 +374,7 @@ void repo_clear(struct repository *repo)
 	FREE_AND_NULL(repo->worktree);
 	FREE_AND_NULL(repo->submodule_prefix);
 
-	raw_object_store_clear(repo->objects);
+	odb_clear(repo->objects);
 	FREE_AND_NULL(repo->objects);
 
 	parsed_object_pool_clear(repo->parsed_objects);
diff --git a/repository.h b/repository.h
index c4c92b2ab9c..3a5ef9c781e 100644
--- a/repository.h
+++ b/repository.h
@@ -9,7 +9,7 @@ struct git_hash_algo;
 struct index_state;
 struct lock_file;
 struct pathspec;
-struct raw_object_store;
+struct object_database;
 struct submodule_cache;
 struct promisor_remote_config;
 struct remote_state;
@@ -47,7 +47,7 @@ struct repository {
 	/*
 	 * Holds any information related to accessing the raw object content.
 	 */
-	struct raw_object_store *objects;
+	struct object_database *objects;
 
 	/*
 	 * All objects in this repository that have been parsed. This structure
-- 
2.49.0.1045.g170613ef41.dirty
Previous: Patrick SteinhardtNext: Derrick Stolee
Message 2 of 143 in “object-store: carve out the object database subsystem”
  1. 00/17 object-store: carve out the object database subsystemPatrick Steinhardt, May 6, 2025
  2. 01/17 object-store: rename `raw_object_store` to `object_database`Patrick Steinhardt, May 6, 2025
  3. Derrick StoleeMay 7, 2025
  4. Junio C HamanoMay 7, 2025
  5. 02/17 object-store: rename `object_directory` to `odb_backend`Patrick Steinhardt, May 6, 2025
  6. Derrick StoleeMay 7, 2025
  7. Derrick StoleeMay 7, 2025
  8. Patrick SteinhardtMay 9, 2025
  9. 04/17 odb: introduce parent pointersPatrick Steinhardt, May 6, 2025
  10. 03/17 object-store: rename files to "odb.{c,h}"Patrick Steinhardt, May 6, 2025
  11. Derrick StoleeMay 6, 2025
  12. 05/17 odb: get rid of `the_repository` in `find_odb()`Patrick Steinhardt, May 6, 2025
  13. Derrick StoleeMay 7, 2025
  14. Patrick SteinhardtMay 9, 2025
  15. 06/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, May 6, 2025
  16. 07/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, May 6, 2025
  17. Derrick StoleeMay 7, 2025
  18. Patrick SteinhardtMay 9, 2025
  19. 08/17 odb: get rid of `the_repository` when handling alternatesPatrick Steinhardt, May 6, 2025
  20. Derrick StoleeMay 7, 2025
  21. 09/17 odb: get rid of `the_repository` in `for_each()` functionsPatrick Steinhardt, May 6, 2025
  22. Derrick StoleeMay 7, 2025
  23. Patrick SteinhardtMay 9, 2025
  24. Derrick StoleeMay 12, 2025
  25. 10/17 odb: get rid of `the_repository` when handling the primary backendPatrick Steinhardt, May 6, 2025
  26. 11/17 odb: get rid of `the_repository` when handling submodule backendsPatrick Steinhardt, May 6, 2025
  27. Derrick StoleeMay 7, 2025
  28. Derrick StoleeMay 7, 2025
  29. 12/17 odb: trivial refactorings to get rid of `the_repository`Patrick Steinhardt, May 6, 2025
  30. Derrick StoleeMay 7, 2025
  31. Junio C HamanoMay 7, 2025
  32. Patrick SteinhardtMay 9, 2025
  33. 13/17 odb: rename `oid_object_info()`Patrick Steinhardt, May 6, 2025
  34. 14/17 odb: rename `repo_read_object_file()`Patrick Steinhardt, May 6, 2025
  35. 15/17 odb: rename `has_object()`Patrick Steinhardt, May 6, 2025
  36. 16/17 odb: rename `pretend_object_file()`Patrick Steinhardt, May 6, 2025
  37. 17/17 odb: rename `read_object_with_reference()`Patrick Steinhardt, May 6, 2025
  38. Derrick StoleeMay 7, 2025
  39. Junio C HamanoMay 7, 2025
  40. Patrick SteinhardtMay 9, 2025
  41. Patrick SteinhardtMay 9, 2025
  42. Toon ClaesMay 13, 2025
  43. Patrick SteinhardtMay 14, 2025
  44. Junio C HamanoMay 7, 2025
  45. 00/17 object-store: carve out the object database subsystemPatrick Steinhardt, May 9, 2025
  46. 01/17 object-store: rename `raw_object_store` to `object_database`Patrick Steinhardt, May 9, 2025
  47. Toon ClaesMay 13, 2025
  48. 03/17 object-store: rename files to "odb.{c,h}"Patrick Steinhardt, May 9, 2025
  49. Toon ClaesMay 13, 2025
  50. Patrick SteinhardtMay 14, 2025
  51. Junio C HamanoMay 14, 2025
  52. 02/17 object-store: rename `object_directory` to `odb_alternate`Patrick Steinhardt, May 9, 2025
  53. Toon ClaesMay 13, 2025
  54. Patrick SteinhardtMay 14, 2025
  55. 04/17 odb: introduce parent pointersPatrick Steinhardt, May 9, 2025
  56. 05/17 odb: get rid of `the_repository` in `find_odb()`Patrick Steinhardt, May 9, 2025
  57. 06/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, May 9, 2025
  58. 07/17 odb: get rid of `the_repository` in `odb_mkstemp()`Patrick Steinhardt, May 9, 2025
  59. 08/17 odb: get rid of `the_repository` when handling alternatesPatrick Steinhardt, May 9, 2025
  60. 09/17 odb: get rid of `the_repository` in `for_each()` functionsPatrick Steinhardt, May 9, 2025
  61. 10/17 odb: get rid of `the_repository` when handling the primary alternatePatrick Steinhardt, May 9, 2025
  62. 11/17 odb: get rid of `the_repository` when handling submodule alternatesPatrick Steinhardt, May 9, 2025
  63. 12/17 odb: trivial refactorings to get rid of `the_repository`Patrick Steinhardt, May 9, 2025
  64. 13/17 odb: rename `oid_object_info()`Patrick Steinhardt, May 9, 2025
  65. 14/17 odb: rename `repo_read_object_file()`Patrick Steinhardt, May 9, 2025
  66. 15/17 odb: rename `has_object()`Patrick Steinhardt, May 9, 2025
  67. 16/17 odb: rename `pretend_object_file()`Patrick Steinhardt, May 9, 2025
  68. 17/17 odb: rename `read_object_with_reference()`Patrick Steinhardt, May 9, 2025
  69. Junio C HamanoMay 9, 2025
  70. Derrick StoleeMay 12, 2025
  71. 00/17 object-store: carve out the object database subsystemPatrick Steinhardt, May 14, 2025
  72. 01/17 object-store: rename `raw_object_store` to `object_database`Patrick Steinhardt, May 14, 2025
  73. Justin ToblerMay 22, 2025
  74. 03/17 object-store: rename files to "odb.{c,h}"Patrick Steinhardt, May 14, 2025
  75. 02/17 object-store: rename `object_directory` to `odb_alternate`Patrick Steinhardt, May 14, 2025
  76. Justin ToblerMay 22, 2025
  77. Patrick SteinhardtMay 26, 2025
  78. Justin ToblerMay 27, 2025
  79. Toon ClaesMay 28, 2025
  80. Patrick SteinhardtMay 30, 2025
  81. Patrick SteinhardtMay 30, 2025
  82. 04/17 odb: introduce parent pointersPatrick Steinhardt, May 14, 2025
  83. 05/17 odb: get rid of `the_repository` in `find_odb()`Patrick Steinhardt, May 14, 2025
  84. 06/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, May 14, 2025
  85. 07/17 odb: get rid of `the_repository` in `odb_mkstemp()`Patrick Steinhardt, May 14, 2025
  86. 08/17 odb: get rid of `the_repository` when handling alternatesPatrick Steinhardt, May 14, 2025
  87. 09/17 odb: get rid of `the_repository` in `for_each()` functionsPatrick Steinhardt, May 14, 2025
  88. 10/17 odb: get rid of `the_repository` when handling the primary alternatePatrick Steinhardt, May 14, 2025
  89. 11/17 odb: get rid of `the_repository` when handling submodule alternatesPatrick Steinhardt, May 14, 2025
  90. 12/17 odb: trivial refactorings to get rid of `the_repository`Patrick Steinhardt, May 14, 2025
  91. 13/17 odb: rename `oid_object_info()`Patrick Steinhardt, May 14, 2025
  92. 14/17 odb: rename `repo_read_object_file()`Patrick Steinhardt, May 14, 2025
  93. 15/17 odb: rename `has_object()`Patrick Steinhardt, May 14, 2025
  94. 16/17 odb: rename `pretend_object_file()`Patrick Steinhardt, May 14, 2025
  95. 17/17 odb: rename `read_object_with_reference()`Patrick Steinhardt, May 14, 2025
  96. Toon ClaesMay 14, 2025
  97. Patrick SteinhardtMay 15, 2025
  98. 00/17 object-store: carve out the object database subsystemPatrick Steinhardt, Jun 5, 2025
  99. 01/17 object-store: rename `raw_object_store` to `object_database`Patrick Steinhardt, Jun 5, 2025
  100. 02/17 object-store: rename `object_directory` to `odb_source`Patrick Steinhardt, Jun 5, 2025
  101. Justin ToblerJun 30, 2025
  102. Patrick SteinhardtJul 1, 2025
  103. 05/17 odb: get rid of `the_repository` in `find_odb()`Patrick Steinhardt, Jun 5, 2025
  104. Justin ToblerJun 30, 2025
  105. 04/17 odb: introduce parent pointersPatrick Steinhardt, Jun 5, 2025
  106. Justin ToblerJun 30, 2025
  107. Patrick SteinhardtJul 1, 2025
  108. 03/17 object-store: rename files to "odb.{c,h}"Patrick Steinhardt, Jun 5, 2025
  109. 07/17 odb: get rid of `the_repository` in `odb_mkstemp()`Patrick Steinhardt, Jun 5, 2025
  110. 06/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, Jun 5, 2025
  111. 08/17 odb: get rid of `the_repository` when handling alternatesPatrick Steinhardt, Jun 5, 2025
  112. Justin ToblerJun 30, 2025
  113. Patrick SteinhardtJul 1, 2025
  114. 10/17 odb: get rid of `the_repository` when handling the primary sourcePatrick Steinhardt, Jun 5, 2025
  115. 09/17 odb: get rid of `the_repository` in `for_each()` functionsPatrick Steinhardt, Jun 5, 2025
  116. 12/17 odb: trivial refactorings to get rid of `the_repository`Patrick Steinhardt, Jun 5, 2025
  117. 11/17 odb: get rid of `the_repository` when handling submodule sourcesPatrick Steinhardt, Jun 5, 2025
  118. 13/17 odb: rename `oid_object_info()`Patrick Steinhardt, Jun 5, 2025
  119. 14/17 odb: rename `repo_read_object_file()`Patrick Steinhardt, Jun 5, 2025
  120. 15/17 odb: rename `has_object()`Patrick Steinhardt, Jun 5, 2025
  121. 16/17 odb: rename `pretend_object_file()`Patrick Steinhardt, Jun 5, 2025
  122. Justin ToblerJun 30, 2025
  123. 17/17 odb: rename `read_object_with_reference()`Patrick Steinhardt, Jun 5, 2025
  124. Justin ToblerJun 30, 2025
  125. 00/17 object-store: carve out the object database subsystemPatrick Steinhardt, Jul 1, 2025
  126. 01/17 object-store: rename `raw_object_store` to `object_database`Patrick Steinhardt, Jul 1, 2025
  127. 02/17 object-store: rename `object_directory` to `odb_source`Patrick Steinhardt, Jul 1, 2025
  128. 03/17 object-store: rename files to "odb.{c,h}"Patrick Steinhardt, Jul 1, 2025
  129. 04/17 odb: introduce parent pointersPatrick Steinhardt, Jul 1, 2025
  130. 05/17 odb: get rid of `the_repository` in `find_odb()`Patrick Steinhardt, Jul 1, 2025
  131. 06/17 odb: get rid of `the_repository` in `assert_oid_type()`Patrick Steinhardt, Jul 1, 2025
  132. 07/17 odb: get rid of `the_repository` in `odb_mkstemp()`Patrick Steinhardt, Jul 1, 2025
  133. 08/17 odb: get rid of `the_repository` when handling alternatesPatrick Steinhardt, Jul 1, 2025
  134. 09/17 odb: get rid of `the_repository` in `for_each()` functionsPatrick Steinhardt, Jul 1, 2025
  135. 10/17 odb: get rid of `the_repository` when handling the primary sourcePatrick Steinhardt, Jul 1, 2025
  136. 11/17 odb: get rid of `the_repository` when handling submodule sourcesPatrick Steinhardt, Jul 1, 2025
  137. 12/17 odb: trivial refactorings to get rid of `the_repository`Patrick Steinhardt, Jul 1, 2025
  138. 13/17 odb: rename `oid_object_info()`Patrick Steinhardt, Jul 1, 2025
  139. 14/17 odb: rename `repo_read_object_file()`Patrick Steinhardt, Jul 1, 2025
  140. 15/17 odb: rename `has_object()`Patrick Steinhardt, Jul 1, 2025
  141. 16/17 odb: rename `pretend_object_file()`Patrick Steinhardt, Jul 1, 2025
  142. 17/17 odb: rename `read_object_with_reference()`Patrick Steinhardt, Jul 1, 2025
  143. Justin ToblerJul 1, 2025

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.