// SanitizeOptions() ensures it.
assert(level0_file_num_compaction_trigger <= level0_slowdown_writes_trigger);
+ if (level0_file_num_compaction_trigger < 0) {
+ return std::numeric_limits<int>::max();
+ }
+
+ const int twice_level0_trigger = level0_file_num_compaction_trigger * 2;
+
+ // overflow protection
+ if (twice_level0_trigger < 0) {
+ return std::numeric_limits<int>::max();
+ }
+
// 1/4 of the way between L0 compaction trigger threshold and slowdown
// condition.
+ const int one_fourth_trigger_slowdown =
+ level0_file_num_compaction_trigger +
+ ((level0_slowdown_writes_trigger - level0_file_num_compaction_trigger) /
+ 4);
+
+ // overflow protection
+ if (one_fourth_trigger_slowdown < 0) {
+ return std::numeric_limits<int>::max();
+ }
+
+ assert(twice_level0_trigger >= 0);
+ assert(one_fourth_trigger_slowdown >= 0);
+
// Or twice as compaction trigger, if it is smaller.
- return std::min(level0_file_num_compaction_trigger * 2,
- level0_file_num_compaction_trigger +
- (level0_slowdown_writes_trigger -
- level0_file_num_compaction_trigger) /
- 4);
+ return std::min(twice_level0_trigger, one_fourth_trigger_slowdown);
}
} // namespace
std::string GetWindowsErrSz(DWORD err);
inline Status IOErrorFromWindowsError(const std::string& context, DWORD err) {
- return (err == ERROR_HANDLE_DISK_FULL) ?
+ return ((err == ERROR_HANDLE_DISK_FULL) || (err == ERROR_DISK_FULL)) ?
Status::NoSpace(context, GetWindowsErrSz(err)) :
Status::IOError(context, GetWindowsErrSz(err));
}