From 318f0dbddb953cb121257303f422155a57398250 Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Wed, 17 Nov 2021 17:00:34 +0100 Subject: [PATCH] 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. (cherry picked from commit 5cdeeb3184b11651b631e4ffa890c30621c2a605) --- src/storage/Storage.cpp | 1 + test/suites/secondary_redis.bash | 11 +++++++++++ 2 files changed, 12 insertions(+) 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 } -- 2.47.2