[3/3] debuginfod: update mtime of interval_path as early as possible

Message ID 20220509225723.96902-4-mark@klomp.org
State Committed
Headers
Series [1/3] debuginfod: Make sure debuginfod_config_cache always returns valid stat |

Commit Message

Mark Wielaard May 9, 2022, 10:57 p.m. UTC
  Call utime on interval_path file as soon as the thread is committed to
cleanup the cache files. This will prevent other threads trying to
also commit to cleaning the cache files. Having multiple threads try
to clean the cache simultaniously doesn't improve cleanup speed
because the threads will try to delete the files in the same order.

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 debuginfod/ChangeLog           | 5 +++++
 debuginfod/debuginfod-client.c | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)
  

Patch

diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index c9aa4fcf..209a22a7 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,8 @@ 
+2022-05-09  Mark Wielaard  <mark@klomp.org>
+
+	* debuginfod-client.c (debuginfod_clean_cache): Move utime call to
+	before fts traversal.
+
 2022-05-09  Mark Wielaard  <mark@klomp.org>
 
 	* debuginfod-client.c (debuginfod_init_cache): Remove.
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index 6bdf1908..b7b65aff 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -297,6 +297,11 @@  debuginfod_clean_cache(debuginfod_client *c,
     /* Interval has not passed, skip cleaning.  */
     return 0;
 
+  /* Update timestamp representing when the cache was last cleaned.
+     Do it at the start to reduce the number of threads trying to do a
+     cleanup simultaniously.  */
+  utime (interval_path, NULL);
+
   /* Read max unused age value from config file.  */
   rc = debuginfod_config_cache(max_unused_path,
 			       cache_default_max_unused_age_s, &st);
@@ -351,8 +356,6 @@  debuginfod_clean_cache(debuginfod_client *c,
   fts_close (fts);
   regfree (&re);
 
-  /* Update timestamp representing when the cache was last cleaned.  */
-  utime (interval_path, NULL);
   return 0;
 }