fix db_stress crash caused by buggy kernel warning

Summary:
filter the warning out and only print it once.
Closes https://github.com/facebook/rocksdb/pull/2137

Differential Revision: D4870925

Pulled By: lightmark

fbshipit-source-id: 91b363ce7f70bce88b0780337f408fc4649139b8
main
Aaron Gao 8 years ago committed by Facebook Github Bot
parent 6257837d83
commit ba7da434ae
  1. 12
      env/io_posix.cc
  2. 5
      tools/db_crashtest.py

12
env/io_posix.cc vendored

@ -772,13 +772,17 @@ Status PosixWritableFile::Close() {
fstat(fd_, &file_stats);
// After ftruncate, we check whether ftruncate has the correct behavior.
// If not, we should hack it with FALLOC_FL_PUNCH_HOLE
if ((file_stats.st_size + file_stats.st_blksize - 1) /
static bool buggy = false;
if (!buggy && (file_stats.st_size + file_stats.st_blksize - 1) /
file_stats.st_blksize !=
file_stats.st_blocks / (file_stats.st_blksize / 512)) {
fprintf(stderr,
"Your kernel is buggy (<= 4.0.x) and does not free preallocated"
"blocks on truncate. Hacking around it, but you should upgrade!"
"\n");
"WARNING: Your kernel is buggy (<= 4.0.x) and does not free"
"preallocated blocks on truncate. Hacking around it, but you"
"should upgrade!\n");
buggy = true;
}
if (buggy) {
IOSTATS_TIMER_GUARD(allocate_nanos);
if (allow_fallocate_) {
fallocate(fd_, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, filesize_,

@ -220,9 +220,10 @@ def blackbox_crash_main(args):
while True:
line = child.stderr.readline().strip()
if line != '':
if line != '' and not line.startswith('WARNING'):
run_had_errors = True
print('***' + line + '^')
print('stderr has error message:')
print('***' + line + '***')
else:
break

Loading…
Cancel
Save