Fix error message

This commit is contained in:
Michael Kolupaev 2024-06-07 20:09:07 +00:00
parent 5539faa54e
commit 263cd9e1c3

View File

@ -57,15 +57,13 @@ namespace ErrorCodes
namespace DB namespace DB
{ {
static bool supportsAtomicRenameImpl(std::string * out_message) static std::optional<std::string> supportsAtomicRenameImpl()
{ {
VersionNumber renameat2_minimal_version(3, 15, 0); VersionNumber renameat2_minimal_version(3, 15, 0);
VersionNumber linux_version(Poco::Environment::osVersion()); VersionNumber linux_version(Poco::Environment::osVersion());
if (linux_version >= renameat2_minimal_version) if (linux_version >= renameat2_minimal_version)
return true; return std::nullopt;
if (out_message) return fmt::format("Linux kernel 3.15+ is required, got {}", linux_version.toString());
*out_message = fmt::format("Linux kernel 3.15+ is required, got {}", linux_version.toString());
return false;
} }
static bool renameat2(const std::string & old_path, const std::string & new_path, int flags) static bool renameat2(const std::string & old_path, const std::string & new_path, int flags)
@ -103,8 +101,12 @@ static bool renameat2(const std::string & old_path, const std::string & new_path
bool supportsAtomicRename(std::string * out_message) bool supportsAtomicRename(std::string * out_message)
{ {
static bool supports = supportsAtomicRenameImpl(out_message); static auto error = supportsAtomicRenameImpl();
return supports; if (!error.has_value())
return true;
if (out_message)
*out_message = error.value();
return false;
} }
} }
@ -156,20 +158,22 @@ static bool renameat2(const std::string & old_path, const std::string & new_path
} }
static bool supportsAtomicRenameImpl(std::string * out_message) static std::optional<std::string> supportsAtomicRenameImpl()
{ {
auto fun = dlsym(RTLD_DEFAULT, "renamex_np"); auto fun = dlsym(RTLD_DEFAULT, "renamex_np");
if (fun != nullptr) if (fun != nullptr)
return true; return std::nullopt;
if (out_message) return "macOS 10.12 or later is required";
*out_message = "macOS 10.12 or later is required";
return false;
} }
bool supportsAtomicRename(std::string * out_message) bool supportsAtomicRename(std::string * out_message)
{ {
static bool supports = supportsAtomicRenameImpl(out_message); static auto error = supportsAtomicRenameImpl();
return supports; if (!error.has_value())
return true;
if (out_message)
*out_message = error.value();
return false;
} }
} }