only try to use fallocate if it's actually present on the system

main
James Golick 11 years ago
parent 5e4ab767cf
commit 43c386b72e
  1. 12
      build_tools/build_detect_platform
  2. 8
      util/env_posix.cc
  3. 2
      util/posix_logger.h

@ -189,6 +189,18 @@ EOF
COMMON_FLAGS="$COMMON_FLAGS -DROCKSDB_ATOMIC_PRESENT" COMMON_FLAGS="$COMMON_FLAGS -DROCKSDB_ATOMIC_PRESENT"
fi fi
# Test whether fallocate is available
$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
#include <fcntl.h>
int main() {
int fd = open("/dev/null", 0);
fallocate(fd, 0, 0, 1024);
}
EOF
if [ "$?" = 0 ]; then
COMMON_FLAGS="$PLATFORM_LDFLAGS -DROCKSDB_FALLOCATE_PRESENT"
fi
# Test whether Snappy library is installed # Test whether Snappy library is installed
# http://code.google.com/p/snappy/ # http://code.google.com/p/snappy/
$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF

@ -389,7 +389,7 @@ class PosixMmapFile : public WritableFile {
} }
Status MapNewRegion() { Status MapNewRegion() {
#ifdef OS_LINUX #ifdef ROCKSDB_FALLOCATE_PRESENT
assert(base_ == nullptr); assert(base_ == nullptr);
TEST_KILL_RANDOM(rocksdb_kill_odds); TEST_KILL_RANDOM(rocksdb_kill_odds);
@ -575,7 +575,7 @@ class PosixMmapFile : public WritableFile {
#endif #endif
} }
#ifdef OS_LINUX #ifdef ROCKSDB_FALLOCATE_PRESENT
virtual Status Allocate(off_t offset, off_t len) { virtual Status Allocate(off_t offset, off_t len) {
TEST_KILL_RANDOM(rocksdb_kill_odds); TEST_KILL_RANDOM(rocksdb_kill_odds);
if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) { if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) {
@ -752,7 +752,7 @@ class PosixWritableFile : public WritableFile {
#endif #endif
} }
#ifdef OS_LINUX #ifdef ROCKSDB_FALLOCATE_PRESENT
virtual Status Allocate(off_t offset, off_t len) { virtual Status Allocate(off_t offset, off_t len) {
TEST_KILL_RANDOM(rocksdb_kill_odds); TEST_KILL_RANDOM(rocksdb_kill_odds);
if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) { if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) {
@ -856,7 +856,7 @@ class PosixRandomRWFile : public RandomRWFile {
return Status::OK(); return Status::OK();
} }
#ifdef OS_LINUX #ifdef ROCKSDB_FALLOCATE_PRESENT
virtual Status Allocate(off_t offset, off_t len) { virtual Status Allocate(off_t offset, off_t len) {
if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) { if (!fallocate(fd_, FALLOC_FL_KEEP_SIZE, offset, len)) {
return Status::OK(); return Status::OK();

@ -111,7 +111,7 @@ class PosixLogger : public Logger {
assert(p <= limit); assert(p <= limit);
const size_t write_size = p - base; const size_t write_size = p - base;
#ifdef OS_LINUX #ifdef ROCKSDB_FALLOCATE_PRESENT
// If this write would cross a boundary of kDebugLogChunkSize // If this write would cross a boundary of kDebugLogChunkSize
// space, pre-allocate more space to avoid overly large // space, pre-allocate more space to avoid overly large
// allocations from filesystem allocsize options. // allocations from filesystem allocsize options.

Loading…
Cancel
Save