Guarding extra fallocate call with TRAVIS because its not working pro…

Summary:
…perly on travis

 There is some old code in PosixWritableFile::Close(), which
truncates the file to the measured size and then does an extra fallocate
with KEEP_SIZE. This is commented as a failsafe because in some
cases ftruncate doesn't do the right job (I don't know of an instance of
this btw). However doing an fallocate with KEEP_SIZE should not increase
the file size. However on Travis Worker which is Docker (likely AUFS )
its not working. There are comments on web that show that the AUFS
author had initially not implemented fallocate, and then did it later.
So not sure what is the quality of the implementation.
Closes https://github.com/facebook/rocksdb/pull/1765

Differential Revision: D4401340

Pulled By: anirbanr-fb

fbshipit-source-id: e2d8100
This commit is contained in:
Anirban Rahut 2017-01-11 14:08:47 -08:00 committed by Facebook Github Bot
parent 9f246298e2
commit 62384ebe9c

View File

@ -737,7 +737,7 @@ Status PosixWritableFile::Close() {
// but it will be nice to log these errors. // but it will be nice to log these errors.
int dummy __attribute__((unused)); int dummy __attribute__((unused));
dummy = ftruncate(fd_, filesize_); dummy = ftruncate(fd_, filesize_);
#ifdef ROCKSDB_FALLOCATE_PRESENT #if defined(ROCKSDB_FALLOCATE_PRESENT) && !defined(TRAVIS)
// in some file systems, ftruncate only trims trailing space if the // in some file systems, ftruncate only trims trailing space if the
// new file size is smaller than the current size. Calling fallocate // new file size is smaller than the current size. Calling fallocate
// with FALLOC_FL_PUNCH_HOLE flag to explicitly release these unused // with FALLOC_FL_PUNCH_HOLE flag to explicitly release these unused
@ -749,6 +749,11 @@ Status PosixWritableFile::Close() {
// tmpfs (since Linux 3.5) // tmpfs (since Linux 3.5)
// We ignore error since failure of this operation does not affect // We ignore error since failure of this operation does not affect
// correctness. // correctness.
// TRAVIS - this code does not work on TRAVIS filesystems.
// the FALLOC_FL_KEEP_SIZE option is expected to not change the size
// of the file, but it does. Simple strace report will show that.
// While we work with Travis-CI team to figure out if this is a
// quirk of Docker/AUFS, we will comment this out.
IOSTATS_TIMER_GUARD(allocate_nanos); IOSTATS_TIMER_GUARD(allocate_nanos);
if (allow_fallocate_) { if (allow_fallocate_) {
fallocate(fd_, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, filesize_, fallocate(fd_, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, filesize_,