From: Joel Rosdahl Date: Wed, 17 Nov 2021 16:00:34 +0000 (+0100) Subject: fix: Correct error handling for unconstructible storage backend X-Git-Tag: v4.6~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5cdeeb3184b11651b631e4ffa890c30621c2a605;p=thirdparty%2Fccache.git fix: Correct error handling for unconstructible storage backend 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. --- diff --git a/src/storage/Storage.cpp b/src/storage/Storage.cpp index f5ba67e3f..374965bef 100644 --- a/src/storage/Storage.cpp +++ b/src/storage/Storage.cpp @@ -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) { diff --git a/test/suites/secondary_redis.bash b/test/suites/secondary_redis.bash index 3e703841b..e8cc1324f 100644 --- a/test/suites/secondary_redis.bash +++ b/test/suites/secondary_redis.bash @@ -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 }