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

[PATCH v4 15/22] read-cache: touch shared index files when used

From
Christian Couder <christian.couder@gmail.com>
Date
Feb 27, 2017, 18:00 UTC
Message-ID
<20170227180019.18666-16-chriscool@tuxfamily.org>
In-Reply-To
<20170227180019.18666-1-chriscool@tuxfamily.org>

When a split-index file is created, let's update the mtime of the shared index file that the split-index file is referencing.

In a following commit we will make shared index file expire depending on their mtime, so updating the mtime makes sure that the shared index file will not be deleted soon.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 read-cache.c | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/read-cache.c b/read-cache.c
index aeb413a508..5f295af4c6 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1674,6 +1674,19 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
 	die("index file corrupt");
 }
 
+/*
+ * Signal that the shared index is used by updating its mtime.
+ *
+ * This way, shared index can be removed if they have not been used
+ * for some time.
+ */
+static void freshen_shared_index(char *base_sha1_hex, int warn)
+{
+	const char *shared_index = git_path("sharedindex.%s", base_sha1_hex);
+	if (!check_and_freshen_file(shared_index, 1) && warn)
+		warning("Could not freshen shared index '%s'", shared_index);
+}
+
 int read_index_from(struct index_state *istate, const char *path)
 {
 	struct split_index *split_index;
@@ -2245,6 +2258,7 @@ static int too_many_not_shared_entries(struct index_state *istate)
 int write_locked_index(struct index_state *istate, struct lock_file *lock,
 		       unsigned flags)
 {
+	int new_shared_index, ret;
 	struct split_index *si = istate->split_index;
 
 	if (!si || alternate_index_output ||
@@ -2261,13 +2275,22 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
 	}
 	if (too_many_not_shared_entries(istate))
 		istate->cache_changed |= SPLIT_INDEX_ORDERED;
-	if (istate->cache_changed & SPLIT_INDEX_ORDERED) {
-		int ret = write_shared_index(istate, lock, flags);
+
+	new_shared_index = istate->cache_changed & SPLIT_INDEX_ORDERED;
+
+	if (new_shared_index) {
+		ret = write_shared_index(istate, lock, flags);
 		if (ret)
 			return ret;
 	}
 
-	return write_split_index(istate, lock, flags);
+	ret = write_split_index(istate, lock, flags);
+
+	/* Freshen the shared index only if the split-index was written */
+	if (!ret && !new_shared_index)
+		freshen_shared_index(sha1_to_hex(si->base_sha1), 1);
+
+	return ret;
 }
 
 /*
-- 
2.12.0.22.g0672473d40
Previous: Christian CouderNext: Junio C Hamano
Message 21 of 26 in “Add configuration options for split-index”
  1. 00/22 Add configuration options for split-indexChristian Couder, Feb 27, 2017
  2. 01/22 config: mark an error message up for translationChristian Couder, Feb 27, 2017
  3. 04/22 split-index: add {add,remove}_split_index() functionsChristian Couder, Feb 27, 2017
  4. 03/22 config: add git_config_get_split_index()Christian Couder, Feb 27, 2017
  5. 10/22 config: add git_config_get_max_percent_split_change()Christian Couder, Feb 27, 2017
  6. 11/22 read-cache: regenerate shared index if necessaryChristian Couder, Feb 27, 2017
  7. 05/22 read-cache: add and then use tweak_split_index()Christian Couder, Feb 27, 2017
  8. 06/22 update-index: warn in case of split-index incoherencyChristian Couder, Feb 27, 2017
  9. 07/22 t1700: add tests for core.splitIndexChristian Couder, Feb 27, 2017
  10. 08/22 Documentation/config: add information for core.splitIndexChristian Couder, Feb 27, 2017
  11. 09/22 Documentation/git-update-index: talk about core.splitIndex config varChristian Couder, Feb 27, 2017
  12. 02/22 t1700: change here document styleChristian Couder, Feb 27, 2017
  13. 12/22 t1700: add tests for splitIndex.maxPercentChangeChristian Couder, Feb 27, 2017
  14. 14/22 sha1_file: make check_and_freshen_file() non staticChristian Couder, Feb 27, 2017
  15. 16/22 config: add git_config_get_expiry() from gc.cChristian Couder, Feb 27, 2017
  16. 19/22 read-cache: refactor read_index_from()Christian Couder, Feb 27, 2017
  17. 22/22 Documentation/git-update-index: explain splitIndex.*Christian Couder, Feb 27, 2017
  18. 20/22 read-cache: use freshen_shared_index() in read_index_from()Christian Couder, Feb 27, 2017
  19. 18/22 t1700: test shared index file expirationChristian Couder, Feb 27, 2017
  20. 13/22 Documentation/config: add splitIndex.maxPercentChangeChristian Couder, Feb 27, 2017
  21. 15/22 read-cache: touch shared index files when usedChristian Couder, Feb 27, 2017
  22. Junio C HamanoMar 1, 2017
  23. 17/22 read-cache: unlink old sharedindex filesChristian Couder, Feb 27, 2017
  24. Junio C HamanoMar 1, 2017
  25. 21/22 Documentation/config: add splitIndex.sharedIndexExpireChristian Couder, Feb 27, 2017
  26. Junio C HamanoMar 1, 2017

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.