Skip to content

Commit

Permalink
Skip AllocateTest if fallocate() is not supported in the file system
Browse files Browse the repository at this point in the history
Summary: To avoid false positive test failures when the file system doesn't support fallocate. In EnvTest.AllocateTest, we first make a simple fallocate call and check the error codes to rule out the possibility that it is not supported. Skip the test if the error code indicates it is not supported.

Test Plan: Run the test and make sure it passes on file systems supporting and not supporting fallocate

Reviewers: yhchiang, ljin, igor

Reviewed By: igor

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D23667
  • Loading branch information
siying committed Sep 19, 2014
1 parent 3b897cd commit 976caca
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions util/env_test.cc
Expand Up @@ -17,6 +17,11 @@
#include <unistd.h>
#endif

#ifdef ROCKSDB_FALLOCATE_PRESENT
#include <errno.h>
#include <fcntl.h>
#endif

#include "rocksdb/env.h"
#include "port/port.h"
#include "util/coding.h"
Expand Down Expand Up @@ -478,6 +483,31 @@ TEST(EnvPosixTest, RandomAccessUniqueID) {
#ifdef ROCKSDB_FALLOCATE_PRESENT
TEST(EnvPosixTest, AllocateTest) {
std::string fname = GetOnDiskTestDir() + "/preallocate_testfile";

// Try fallocate in a file to see whether the target file system supports it.
// Skip the test if fallocate is not supported.
std::string fname_test_fallocate =
GetOnDiskTestDir() + "/preallocate_testfile_2";
int fd = -1;
do {
fd = open(fname_test_fallocate.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
} while (fd < 0 && errno == EINTR);
ASSERT_GT(fd, 0);

int alloc_status = fallocate(fd, 0, 0, 1);

int err_number = 0;
if (alloc_status != 0) {
err_number = errno;
fprintf(stderr, "Warning: fallocate() fails, %s\n", strerror(err_number));
}
close(fd);
ASSERT_OK(env_->DeleteFile(fname_test_fallocate));
if (alloc_status != 0 && err_number == EOPNOTSUPP) {
// The filesystem containing the file does not support fallocate
return;
}

EnvOptions soptions;
soptions.use_mmap_writes = false;
unique_ptr<WritableFile> wfile;
Expand Down

0 comments on commit 976caca

Please sign in to comment.