]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix(storage): Reuse existing backend instances
authorJoel Rosdahl <joel@rosdahl.net>
Tue, 27 Jul 2021 17:50:26 +0000 (19:50 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Jul 2021 12:42:03 +0000 (14:42 +0200)
src/storage/Storage.cpp

index fec33ea2f551af364c667d6966fe4a92e87d2101..548b226856bfb14217dc54eb91b3f1f332ca041e 100644 (file)
@@ -312,17 +312,18 @@ backend_is_available(SecondaryStorageEntry& entry,
     return false;
   }
 
-  try {
-    entry.backend = entry.storage->create_backend(entry.config.params);
-  } catch (const secondary::SecondaryStorage::Backend::Failed& e) {
-    LOG("Failed to construct backend for {}{}",
-        entry.url_for_logging,
-        nonstd::string_view(e.what()).empty() ? "" : FMT(": {}", e.what()));
-    mark_backend_as_failed(entry, e.failure());
-    return false;
+  if (!entry.backend) {
+    try {
+      entry.backend = entry.storage->create_backend(entry.config.params);
+    } catch (const secondary::SecondaryStorage::Backend::Failed& e) {
+      LOG("Failed to construct backend for {}{}",
+          entry.url_for_logging,
+          nonstd::string_view(e.what()).empty() ? "" : FMT(": {}", e.what()));
+      mark_backend_as_failed(entry, e.failure());
+    }
   }
 
-  return true;
+  return static_cast<bool>(entry.backend);
 }
 
 nonstd::optional<std::string>