Author: Douglas Yung
Date: 2025-03-08T23:54:57Z
New Revision: 1d763f383380ec629ee6d5053fd41322efcbc6bd

URL: 
https://github.com/llvm/llvm-project/commit/1d763f383380ec629ee6d5053fd41322efcbc6bd
DIFF: 
https://github.com/llvm/llvm-project/commit/1d763f383380ec629ee6d5053fd41322efcbc6bd.diff

LOG: Revert "Modify the localCache API to require an explicit commit on 
CachedFile… (#115331)"

This reverts commit ce9e1d3c15ed6290f1cb07b482939976fa8115cd.

The unittest added in this commit seems to be flaky causing random failure on 
buildbots:
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13235
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13232
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13228
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13224
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13220
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13210
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13208
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13207
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13202
 - https://lab.llvm.org/buildbot/#/builders/46/builds/13196
and
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14266
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14254
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14250
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14245
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14244
 - https://lab.llvm.org/buildbot/#/builders/180/builds/14226

Added: 
    

Modified: 
    lldb/source/Core/DataFileCache.cpp
    llvm/include/llvm/Support/Caching.h
    llvm/lib/CGData/CodeGenData.cpp
    llvm/lib/Debuginfod/Debuginfod.cpp
    llvm/lib/LTO/LTOBackend.cpp
    llvm/lib/Support/Caching.cpp
    llvm/tools/gold/gold-plugin.cpp
    llvm/tools/llvm-lto2/llvm-lto2.cpp
    llvm/unittests/Support/CMakeLists.txt

Removed: 
    llvm/unittests/Support/Caching.cpp


################################################################################
diff  --git a/lldb/source/Core/DataFileCache.cpp 
b/lldb/source/Core/DataFileCache.cpp
index 9109269711231..ef0e07a8b0342 100644
--- a/lldb/source/Core/DataFileCache.cpp
+++ b/lldb/source/Core/DataFileCache.cpp
@@ -132,11 +132,6 @@ bool DataFileCache::SetCachedData(llvm::StringRef key,
       if (file_or_err) {
         llvm::CachedFileStream *cfs = file_or_err->get();
         cfs->OS->write((const char *)data.data(), data.size());
-        if (llvm::Error err = cfs->commit()) {
-          Log *log = GetLog(LLDBLog::Modules);
-          LLDB_LOG_ERROR(log, std::move(err),
-                         "failed to commit to the cache for key: {0}");
-        }
         return true;
       } else {
         Log *log = GetLog(LLDBLog::Modules);

diff  --git a/llvm/include/llvm/Support/Caching.h 
b/llvm/include/llvm/Support/Caching.h
index 9a82921e6ffc7..cf45145619d95 100644
--- a/llvm/include/llvm/Support/Caching.h
+++ b/llvm/include/llvm/Support/Caching.h
@@ -24,32 +24,15 @@ class MemoryBuffer;
 /// This class wraps an output stream for a file. Most clients should just be
 /// able to return an instance of this base class from the stream callback, but
 /// if a client needs to perform some action after the stream is written to,
-/// that can be done by deriving from this class and overriding the destructor
-/// or the commit() method.
+/// that can be done by deriving from this class and overriding the destructor.
 class CachedFileStream {
 public:
   CachedFileStream(std::unique_ptr<raw_pwrite_stream> OS,
                    std::string OSPath = "")
       : OS(std::move(OS)), ObjectPathName(OSPath) {}
-
-  /// Must be called exactly once after the writes to OS have been completed
-  /// but before the CachedFileStream object is destroyed.
-  virtual Error commit() {
-    if (Committed)
-      return createStringError(make_error_code(std::errc::invalid_argument),
-                               Twine("CacheStream already committed."));
-    Committed = true;
-
-    return Error::success();
-  }
-
-  bool Committed = false;
   std::unique_ptr<raw_pwrite_stream> OS;
   std::string ObjectPathName;
-  virtual ~CachedFileStream() {
-    if (!Committed)
-      report_fatal_error("CachedFileStream was not committed.\n");
-  }
+  virtual ~CachedFileStream() = default;
 };
 
 /// This type defines the callback to add a file that is generated on the fly.

diff  --git a/llvm/lib/CGData/CodeGenData.cpp b/llvm/lib/CGData/CodeGenData.cpp
index 7b9c584d64867..02de528c4d007 100644
--- a/llvm/lib/CGData/CodeGenData.cpp
+++ b/llvm/lib/CGData/CodeGenData.cpp
@@ -233,9 +233,6 @@ void saveModuleForTwoRounds(const Module &TheModule, 
unsigned Task,
 
   WriteBitcodeToFile(TheModule, *Stream->OS,
                      /*ShouldPreserveUseListOrder=*/true);
-
-  if (Error Err = Stream->commit())
-    report_fatal_error(std::move(Err));
 }
 
 std::unique_ptr<Module> loadModuleForTwoRounds(BitcodeModule &OrigModule,

diff  --git a/llvm/lib/Debuginfod/Debuginfod.cpp 
b/llvm/lib/Debuginfod/Debuginfod.cpp
index e570982e357e3..4c785117ae8ef 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -188,11 +188,6 @@ class StreamedHTTPResponseHandler : public 
HTTPResponseHandler {
 public:
   StreamedHTTPResponseHandler(CreateStreamFn CreateStream, HTTPClient &Client)
       : CreateStream(CreateStream), Client(Client) {}
-
-  /// Must be called exactly once after the writes have been completed
-  /// but before the StreamedHTTPResponseHandler object is destroyed.
-  Error commit();
-
   virtual ~StreamedHTTPResponseHandler() = default;
 
   Error handleBodyChunk(StringRef BodyChunk) override;
@@ -215,12 +210,6 @@ Error 
StreamedHTTPResponseHandler::handleBodyChunk(StringRef BodyChunk) {
   return Error::success();
 }
 
-Error StreamedHTTPResponseHandler::commit() {
-  if (FileStream)
-    return FileStream->commit();
-  return Error::success();
-}
-
 // An over-accepting simplification of the HTTP RFC 7230 spec.
 static bool isHeader(StringRef S) {
   StringRef Name;
@@ -309,8 +298,6 @@ Expected<std::string> getCachedOrDownloadArtifact(
       Error Err = Client.perform(Request, Handler);
       if (Err)
         return std::move(Err);
-      if (Err = Handler.commit())
-        return std::move(Err);
 
       unsigned Code = Client.responseCode();
       if (Code && Code != 200)

diff  --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cpp
index 2da207ace91ee..139c39abf8e6b 100644
--- a/llvm/lib/LTO/LTOBackend.cpp
+++ b/llvm/lib/LTO/LTOBackend.cpp
@@ -460,9 +460,6 @@ static void codegen(const Config &Conf, TargetMachine *TM,
 
   if (DwoOut)
     DwoOut->keep();
-
-  if (Error Err = Stream->commit())
-    report_fatal_error(std::move(Err));
 }
 
 static void splitCodeGen(const Config &C, TargetMachine *TM,

diff  --git a/llvm/lib/Support/Caching.cpp b/llvm/lib/Support/Caching.cpp
index 40a5c44771b65..66e540efaca97 100644
--- a/llvm/lib/Support/Caching.cpp
+++ b/llvm/lib/Support/Caching.cpp
@@ -88,10 +88,9 @@ Expected<FileCache> llvm::localCache(const Twine 
&CacheNameRef,
             AddBuffer(std::move(AddBuffer)), TempFile(std::move(TempFile)),
             ModuleName(ModuleName), Task(Task) {}
 
-      Error commit() override {
-        Error E = CachedFileStream::commit();
-        if (E)
-          return E;
+      ~CacheStream() {
+        // TODO: Manually commit rather than using non-trivial destructor,
+        // allowing to replace report_fatal_errors with a return Error.
 
         // Make sure the stream is closed before committing it.
         OS.reset();
@@ -101,12 +100,10 @@ Expected<FileCache> llvm::localCache(const Twine 
&CacheNameRef,
             MemoryBuffer::getOpenFile(
                 sys::fs::convertFDToNativeFile(TempFile.FD), ObjectPathName,
                 /*FileSize=*/-1, /*RequiresNullTerminator=*/false);
-        if (!MBOrErr) {
-          std::error_code EC = MBOrErr.getError();
-          return createStringError(EC, Twine("Failed to open new cache file ") 
+
-                                           TempFile.TmpName + ": " +
-                                           EC.message() + "\n");
-        }
+        if (!MBOrErr)
+          report_fatal_error(Twine("Failed to open new cache file ") +
+                             TempFile.TmpName + ": " +
+                             MBOrErr.getError().message() + "\n");
 
         // On POSIX systems, this will atomically replace the destination if
         // it already exists. We try to emulate this on Windows, but this may
@@ -117,14 +114,11 @@ Expected<FileCache> llvm::localCache(const Twine 
&CacheNameRef,
         // AddBuffer a copy of the bytes we wrote in that case. We do this
         // instead of just using the existing file, because the pruner might
         // delete the file before we get a chance to use it.
-        E = TempFile.keep(ObjectPathName);
+        Error E = TempFile.keep(ObjectPathName);
         E = handleErrors(std::move(E), [&](const ECError &E) -> Error {
           std::error_code EC = E.convertToErrorCode();
           if (EC != errc::permission_denied)
-            return createStringError(
-                EC, Twine("Failed to rename temporary file ") +
-                        TempFile.TmpName + " to " + ObjectPathName + ": " +
-                        EC.message() + "\n");
+            return errorCodeToError(EC);
 
           auto MBCopy = MemoryBuffer::getMemBufferCopy((*MBOrErr)->getBuffer(),
                                                        ObjectPathName);
@@ -137,10 +131,11 @@ Expected<FileCache> llvm::localCache(const Twine 
&CacheNameRef,
         });
 
         if (E)
-          return E;
+          report_fatal_error(Twine("Failed to rename temporary file ") +
+                             TempFile.TmpName + " to " + ObjectPathName + ": " 
+
+                             toString(std::move(E)) + "\n");
 
         AddBuffer(Task, ModuleName, std::move(*MBOrErr));
-        return Error::success();
       }
     };
 

diff  --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp
index b42bfbed3b873..ae965e6f486aa 100644
--- a/llvm/tools/gold/gold-plugin.cpp
+++ b/llvm/tools/gold/gold-plugin.cpp
@@ -1119,9 +1119,7 @@ static std::vector<std::pair<SmallString<128>, bool>> 
runLTO() {
 
   auto AddBuffer = [&](size_t Task, const Twine &moduleName,
                        std::unique_ptr<MemoryBuffer> MB) {
-    auto Stream = *AddStream(Task, ModuleName);
-    Stream->OS << MB->getBuffer();
-    check(Stream->commit(), "Failed to commit cache");
+    *AddStream(Task, moduleName)->OS << MB->getBuffer();
   };
 
   FileCache Cache;

diff  --git a/llvm/tools/llvm-lto2/llvm-lto2.cpp 
b/llvm/tools/llvm-lto2/llvm-lto2.cpp
index d78a3e0420543..3ad2a3ecb6752 100644
--- a/llvm/tools/llvm-lto2/llvm-lto2.cpp
+++ b/llvm/tools/llvm-lto2/llvm-lto2.cpp
@@ -448,9 +448,7 @@ static int run(int argc, char **argv) {
 
   auto AddBuffer = [&](size_t Task, const Twine &ModuleName,
                        std::unique_ptr<MemoryBuffer> MB) {
-    auto Stream = AddStream(Task, ModuleName);
-    *Stream->OS << MB->getBuffer();
-    check(Stream->commit(), "Failed to commit cache");
+    *AddStream(Task, ModuleName)->OS << MB->getBuffer();
   };
 
   FileCache Cache;

diff  --git a/llvm/unittests/Support/CMakeLists.txt 
b/llvm/unittests/Support/CMakeLists.txt
index c78e6a370beac..6de8165826442 100644
--- a/llvm/unittests/Support/CMakeLists.txt
+++ b/llvm/unittests/Support/CMakeLists.txt
@@ -18,7 +18,6 @@ add_llvm_unittest(SupportTests
   BranchProbabilityTest.cpp
   CachePruningTest.cpp
   CrashRecoveryTest.cpp
-  Caching.cpp
   Casting.cpp
   CheckedArithmeticTest.cpp
   Chrono.cpp

diff  --git a/llvm/unittests/Support/Caching.cpp 
b/llvm/unittests/Support/Caching.cpp
deleted file mode 100644
index c46d47fd6eecb..0000000000000
--- a/llvm/unittests/Support/Caching.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-//===- Caching.cpp 
--------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Support/Caching.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-
-#define ASSERT_NO_ERROR(x)                                                     
\
-  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                
\
-    SmallString<128> MessageStorage;                                           
\
-    raw_svector_ostream Message(MessageStorage);                               
\
-    Message << #x ": did not return errc::success.\n"                          
\
-            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          
\
-            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      
\
-    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              
\
-  } else {                                                                     
\
-  }
-
-char data[] = "some data";
-
-TEST(Caching, Normal) {
-  SmallString<256> TempDir;
-  sys::path::system_temp_directory(true, TempDir);
-  SmallString<256> CacheDir;
-  sys::path::append(CacheDir, TempDir, "llvm_test_cache");
-
-  sys::fs::remove_directories(CacheDir.str());
-
-  std::unique_ptr<MemoryBuffer> CachedBuffer;
-  auto AddBuffer = [&CachedBuffer](unsigned Task, const Twine &ModuleName,
-                                   std::unique_ptr<MemoryBuffer> M) {
-    CachedBuffer = std::move(M);
-  };
-  auto CacheOrErr =
-      localCache("LLVMTestCache", "LLVMTest", CacheDir, AddBuffer);
-  ASSERT_TRUE(bool(CacheOrErr));
-
-  FileCache &Cache = *CacheOrErr;
-
-  {
-    auto AddStreamOrErr = Cache(1, "foo", "");
-    ASSERT_TRUE(bool(AddStreamOrErr));
-
-    AddStreamFn &AddStream = *AddStreamOrErr;
-    ASSERT_TRUE(AddStream);
-
-    auto FileOrErr = AddStream(1, "");
-    ASSERT_TRUE(bool(FileOrErr));
-
-    CachedFileStream *CFS = FileOrErr->get();
-    (*CFS->OS).write(data, sizeof(data));
-    ASSERT_THAT_ERROR(CFS->commit(), Succeeded());
-  }
-
-  {
-    auto AddStreamOrErr = Cache(1, "foo", "");
-    ASSERT_TRUE(bool(AddStreamOrErr));
-
-    AddStreamFn &AddStream = *AddStreamOrErr;
-    ASSERT_FALSE(AddStream);
-
-    ASSERT_TRUE(CachedBuffer->getBufferSize() == sizeof(data));
-    StringRef readData = CachedBuffer->getBuffer();
-    ASSERT_TRUE(memcmp(data, readData.data(), sizeof(data)) == 0);
-  }
-
-  ASSERT_NO_ERROR(sys::fs::remove_directories(CacheDir.str()));
-}
-
-TEST(Caching, WriteAfterCommit) {
-  SmallString<256> TempDir;
-  sys::path::system_temp_directory(true, TempDir);
-  SmallString<256> CacheDir;
-  sys::path::append(CacheDir, TempDir, "llvm_test_cache");
-
-  sys::fs::remove_directories(CacheDir.str());
-
-  std::unique_ptr<MemoryBuffer> CachedBuffer;
-  auto AddBuffer = [&CachedBuffer](unsigned Task, const Twine &ModuleName,
-                                   std::unique_ptr<MemoryBuffer> M) {
-    CachedBuffer = std::move(M);
-  };
-  auto CacheOrErr =
-      localCache("LLVMTestCache", "LLVMTest", CacheDir, AddBuffer);
-  ASSERT_TRUE(bool(CacheOrErr));
-
-  FileCache &Cache = *CacheOrErr;
-
-  auto AddStreamOrErr = Cache(1, "foo", "");
-  ASSERT_TRUE(bool(AddStreamOrErr));
-
-  AddStreamFn &AddStream = *AddStreamOrErr;
-  ASSERT_TRUE(AddStream);
-
-  auto FileOrErr = AddStream(1, "");
-  ASSERT_TRUE(bool(FileOrErr));
-
-  CachedFileStream *CFS = FileOrErr->get();
-  (*CFS->OS).write(data, sizeof(data));
-  ASSERT_THAT_ERROR(CFS->commit(), Succeeded());
-
-  EXPECT_DEATH(
-      { (*CFS->OS).write(data, sizeof(data)); }, "")
-      << "Write after commit did not cause abort";
-
-  ASSERT_NO_ERROR(sys::fs::remove_directories(CacheDir.str()));
-}
-
-TEST(Caching, NoCommit) {
-  SmallString<256> TempDir;
-  sys::path::system_temp_directory(true, TempDir);
-  SmallString<256> CacheDir;
-  sys::path::append(CacheDir, TempDir, "llvm_test_cache");
-
-  sys::fs::remove_directories(CacheDir.str());
-
-  std::unique_ptr<MemoryBuffer> CachedBuffer;
-  auto AddBuffer = [&CachedBuffer](unsigned Task, const Twine &ModuleName,
-                                   std::unique_ptr<MemoryBuffer> M) {
-    CachedBuffer = std::move(M);
-  };
-  auto CacheOrErr =
-      localCache("LLVMTestCache", "LLVMTest", CacheDir, AddBuffer);
-  ASSERT_TRUE(bool(CacheOrErr));
-
-  FileCache &Cache = *CacheOrErr;
-
-  auto AddStreamOrErr = Cache(1, "foo", "");
-  ASSERT_TRUE(bool(AddStreamOrErr));
-
-  AddStreamFn &AddStream = *AddStreamOrErr;
-  ASSERT_TRUE(AddStream);
-
-  auto FileOrErr = AddStream(1, "");
-  ASSERT_TRUE(bool(FileOrErr));
-
-  CachedFileStream *CFS = FileOrErr->get();
-  (*CFS->OS).write(data, sizeof(data));
-  ASSERT_THAT_ERROR(CFS->commit(), Succeeded());
-
-  EXPECT_DEATH(
-      {
-        auto FileOrErr = AddStream(1, "");
-        ASSERT_TRUE(bool(FileOrErr));
-
-        CachedFileStream *CFS = FileOrErr->get();
-        (*CFS->OS).write(data, sizeof(data));
-      },
-      "")
-      << "destruction without commit did not cause error";
-
-  ASSERT_NO_ERROR(sys::fs::remove_directories(CacheDir.str()));
-}


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to