提交 a618a16f 编写于 作者: M Marcin Dlugajczyk 提交者: Facebook Github Bot

New subcode for IOError to detect the ESTALE errno

Summary:
I'd like to propose a patch to expose a new IOError type with subcode kStaleFile to allow to detect when ESTALE error is returned. This allows the rocksdb consumers to handle this error separately from other IOErrors.

I've also added a missing string representation for the kDeadlock subcode, I believe calling ToString() on Status object with that subcode would result in an out of band access in the msgs array,

Please let me know if you have any questions or would like me to make any changes to this pull request.
Closes https://github.com/facebook/rocksdb/pull/1748

Differential Revision: D4387675

Pulled By: IslamAbdelRahman

fbshipit-source-id: 67feb13
上级 7ab00518
......@@ -70,6 +70,7 @@ class Status {
kLockLimit = 3,
kNoSpace = 4,
kDeadlock = 5,
kStaleFile = 6,
kMaxSubCode
};
......
......@@ -26,9 +26,14 @@
namespace rocksdb {
static Status IOError(const std::string& context, int err_number) {
return (err_number == ENOSPC) ?
Status::NoSpace(context, strerror(err_number)) :
Status::IOError(context, strerror(err_number));
switch (err_number) {
case ENOSPC:
return Status::NoSpace(context, strerror(err_number));
case ESTALE:
return Status::IOError(Status::kStaleFile);
default:
return Status::IOError(context, strerror(err_number));
}
}
class PosixHelper {
......
......@@ -12,7 +12,9 @@ const char* Status::msgs[] = {
"Timeout Acquiring Mutex", // kMutexTimeout
"Timeout waiting to lock key", // kLockTimeout
"Failed to acquire lock due to max_num_locks limit", // kLockLimit
"No space left on device" // kNoSpace
"No space left on device", // kNoSpace
"Deadlock", // kDeadlock
"Stale file handle" // kStaleFile
};
} // namespace rocksdb
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册