[libcxx-commits] [libcxx] [libc++][lit] Atomically update the persistent cache (PR #66538)

Alexander Richardson via libcxx-commits libcxx-commits at lists.llvm.org
Fri Sep 15 21:28:06 PDT 2023


================
@@ -69,8 +69,12 @@ def f(config, *args, **kwargs):
             if cacheKey not in cache:
                 cache[cacheKey] = function(config, *args, **kwargs)
                 # Update the persistent cache so it knows about the new key
-                with open(persistentCache, "wb") as cacheFile:
+                # We write to a temporary file and rename the result to ensure
+                # that the cache is not corrupted when running the test suite
+                # with multiple shards.
+                with open(persistentCache + ".tmp", "wb") as cacheFile:
                     pickle.dump(cache, cacheFile)
+                os.replace(persistentCache + ".tmp", persistentCache)
             return cache[cacheKey]
----------------
arichardson wrote:

Yes that definitely works, the reason I didn't append the shard number is that I believe I'd need to change a bit more of the surrounding code to get the litConfig object.

https://github.com/llvm/llvm-project/pull/66538


More information about the libcxx-commits mailing list