]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Correct error handling for unconstructible storage backend
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 17 Nov 2021 16:00:34 +0000 (17:00 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 17 Nov 2021 19:05:36 +0000 (20:05 +0100)
This fixes a crash when using a secondary storage backend that throws on
construction, for instance the Redis backend with an unreachable server.

Closes #966.

src/storage/Storage.cpp
test/suites/secondary_redis.bash

index f5ba67e3fcfe8ed29bbdcab2695ebf477e257c4e..374965befb73d8c86b474046e5a9ed4bb8f0fff5 100644 (file)
@@ -450,6 +450,7 @@ Storage::get_backend(SecondaryStorageEntry& entry,
           entry.url_for_logging,
           nonstd::string_view(e.what()).empty() ? "" : FMT(": {}", e.what()));
       mark_backend_as_failed(entry.backends.back(), e.failure());
+      return nullptr;
     }
     return &entry.backends.back();
   } else if (backend->failed) {
index 3e703841bf6a2c4b40f8240dc94ff846fcbaa3ce..e8cc1324f726f1ed1fe4d174d27872bb2b069c79 100644 (file)
@@ -111,4 +111,15 @@ SUITE_secondary_redis() {
     expect_stat cache_miss 1
     expect_stat files_in_cache 2 # fetched from secondary
     expect_number_of_redis_cache_entries 2 "$redis_url" # result + manifest
+
+    # -------------------------------------------------------------------------
+    TEST "Unreachable server"
+
+    export CCACHE_SECONDARY_STORAGE="redis://localhost:1"
+
+    $CCACHE_COMPILE -c test.c
+    expect_stat direct_cache_hit 0
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+    expect_stat secondary_storage_error 1
 }