mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
utils/exceptions: Whitelist EEXIST and ENOENT in should_stop_on_system_error()
There are various call-sites that explicitly check for EEXIST and
ENOENT:
$ git grep "std::error_code(E"
database.cc: if (e.code() != std::error_code(EEXIST, std::system_category())) {
database.cc: if (e.code() != std::error_code(ENOENT, std::system_category())) {
database.cc: if (e.code() != std::error_code(ENOENT, std::system_category())) {
database.cc: if (e.code() != std::error_code(ENOENT, std::system_category())) {
sstables/sstables.cc: if (e.code() == std::error_code(ENOENT, std::system_category())) {
sstables/sstables.cc: if (e.code() == std::error_code(ENOENT, std::system_category())) {
Commit 961e80a ("Be more conservative when deciding when to shut down
due to disk errors") turned these errors into a storage_io_exception
that is not expected by the callers, which causes 'nodetool snapshot'
functionality to break, for example.
Whitelist the two error codes to revert back to the old behavior of
io_check().
Message-Id: <1465454446-17954-1-git-send-email-penberg@scylladb.com>
This commit is contained in:
committed by
Tomasz Grabiec
parent
02d033667a
commit
8df5aa7b0c
Notes:
Pekka Enberg
2016-06-14 15:27:22 +03:00
backport: 1.2
@@ -51,7 +51,15 @@ bool is_system_error_errno(int err_no)
|
||||
}
|
||||
|
||||
bool should_stop_on_system_error(const std::system_error& e) {
|
||||
// We may whitelist transient errors in the future, but for now,
|
||||
// be conservative.
|
||||
if (e.code().category() == std::system_category()) {
|
||||
// Whitelist of errors that don't require us to stop the server:
|
||||
switch (e.code().value()) {
|
||||
case EEXIST:
|
||||
case ENOENT:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user