[llvm] cd93522 - [Debuginfod] Prune cache after fetch.
Daniel Thornburgh via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 10 12:12:49 PST 2023
Author: Daniel Thornburgh
Date: 2023-03-10T12:12:44-08:00
New Revision: cd935224c02fd65719ae9fd42dc89bf7b599697f
URL: https://github.com/llvm/llvm-project/commit/cd935224c02fd65719ae9fd42dc89bf7b599697f
DIFF: https://github.com/llvm/llvm-project/commit/cd935224c02fd65719ae9fd42dc89bf7b599697f.diff
LOG: [Debuginfod] Prune cache after fetch.
Previously, the size of the debuginfod cache would grow without bound.
This change prunes the cache after a successful debuginfod lookup, as is
done in libdebuginfod.
The cache pruning behavior is configured by a new
DEBUGINFOD_CACHE_POLICY environment variable. The semantics of this are
the same as --thinlto_cache_policy.
Reviewed By: gulfem
Differential Revision: https://reviews.llvm.org/D145618
Added:
llvm/test/tools/llvm-debuginfod-find/cache.test
Modified:
llvm/lib/Debuginfod/Debuginfod.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index 2b0710b536ba..af84fe4176b7 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -251,17 +251,25 @@ Expected<std::string> getCachedOrDownloadArtifact(
// Perform the HTTP request and if successful, write the response body to
// the cache.
- StreamedHTTPResponseHandler Handler(
- [&]() { return CacheAddStream(Task, ""); }, Client);
- HTTPRequest Request(ArtifactUrl);
- Request.Headers = getHeaders();
- Error Err = Client.perform(Request, Handler);
- if (Err)
- return std::move(Err);
+ {
+ StreamedHTTPResponseHandler Handler(
+ [&]() { return CacheAddStream(Task, ""); }, Client);
+ HTTPRequest Request(ArtifactUrl);
+ Request.Headers = getHeaders();
+ Error Err = Client.perform(Request, Handler);
+ if (Err)
+ return std::move(Err);
+
+ unsigned Code = Client.responseCode();
+ if (Code && Code != 200)
+ continue;
+ }
- unsigned Code = Client.responseCode();
- if (Code && Code != 200)
- continue;
+ Expected<CachePruningPolicy> PruningPolicyOrErr =
+ parseCachePruningPolicy(std::getenv("DEBUGINFOD_CACHE_POLICY"));
+ if (!PruningPolicyOrErr)
+ return PruningPolicyOrErr.takeError();
+ pruneCache(CacheDirectoryPath, *PruningPolicyOrErr);
// Return the path to the artifact on disk.
return std::string(AbsCachedArtifactPath);
diff --git a/llvm/test/tools/llvm-debuginfod-find/cache.test b/llvm/test/tools/llvm-debuginfod-find/cache.test
new file mode 100644
index 000000000000..28359b45220b
--- /dev/null
+++ b/llvm/test/tools/llvm-debuginfod-find/cache.test
@@ -0,0 +1,38 @@
+REQUIRES: curl
+UNSUPPORTED: system-windows
+
+RUN: rm -rf %t/*
+RUN: mkdir -p %t/buildid/012345678901234{5,6}
+RUN: echo 'f' > %t/buildid/0123456789012345/debuginfo
+RUN: cp %t/buildid/012345678901234{5,6}/debuginfo
+RUN: mkdir %t/cache
+RUN: env DEBUGINFOD_CACHE_PATH=%t/cache DEBUGINFOD_URLS=file://%t \
+RUN: llvm-debuginfod-find --debuginfo 0123456789012345 > /dev/null
+RUN: ls %t/cache | FileCheck --check-prefix=FIRST --match-full-lines --implicit-check-not {{.}} %s
+
+# Set policy to discard all but one file.
+RUN: env DEBUGINFOD_CACHE_POLICY=prune_interval=0s:cache_size_files=1 \
+RUN: DEBUGINFOD_CACHE_PATH=%t/cache DEBUGINFOD_URLS=file://%t \
+RUN: llvm-debuginfod-find --debuginfo 0123456789012346 > /dev/null
+RUN: ls %t/cache | FileCheck --check-prefix=SECOND --match-full-lines --implicit-check-not {{.}} %s
+
+# Add the first file back to the cache.
+RUN: env DEBUGINFOD_CACHE_PATH=%t/cache DEBUGINFOD_URLS=file://%t \
+RUN: llvm-debuginfod-find --debuginfo 0123456789012345 > /dev/null
+RUN: ls %t/cache | FileCheck --check-prefix=BOTH --match-full-lines --implicit-check-not {{.}} %s
+
+# An invalid cache policy has no effect.
+RUN: env DEBUGINFOD_CACHE_POLICY=invalid:prune_interval=0s:cache_size_files=1 \
+RUN: DEBUGINFOD_CACHE_PATH=%t/cache DEBUGINFOD_URLS=file://%t \
+RUN: llvm-debuginfod-find --debuginfo 0123456789012346 > /dev/null
+RUN: ls %t/cache | FileCheck --check-prefix=BOTH --match-full-lines --implicit-check-not {{.}} %s
+
+FIRST: llvmcache-6663022027345102449
+FIRST: llvmcache.timestamp
+
+SECOND: llvmcache-6762748755046480574
+SECOND: llvmcache.timestamp
+
+BOTH: llvmcache-6663022027345102449
+BOTH: llvmcache-6762748755046480574
+BOTH: llvmcache.timestamp
More information about the llvm-commits
mailing list