utilities/document/json_document_builder.cc
utilities/env_mirror.cc
utilities/env_registry.cc
- utilities/flashcache/flashcache.cc
utilities/geodb/geodb_impl.cc
utilities/leveldb_options/leveldb_options.cc
utilities/memory/memory_util.cc
# Rocksdb Change Log
+## 4.13.4
+### Public API Change
+* Removed flashcache support.
+
## 4.13.0 (10/18/2016)
### Public API Change
* DB::GetOptions() reflect dynamic changed options (i.e. through DB::SetOptions()) and return copy of options instead of reference.
+++ /dev/null
-// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
-
-#pragma once
-
-#include <string>
-#include "rocksdb/env.h"
-
-namespace rocksdb {
-
-// This API is experimental. We will mark it stable once we run it in production
-// for a while.
-// NewFlashcacheAwareEnv() creates and Env that blacklists all background
-// threads (used for flush and compaction) from using flashcache to cache their
-// reads. Reads from compaction thread don't need to be cached because they are
-// going to be soon made obsolete (due to nature of compaction)
-// Usually you would pass Env::Default() as base.
-// cachedev_fd is a file descriptor of the flashcache device. Caller has to
-// open flashcache device before calling this API.
-extern std::unique_ptr<Env> NewFlashcacheAwareEnv(
- Env* base, const int cachedev_fd);
-
-} // namespace rocksdb
utilities/document/json_document.cc \
utilities/env_mirror.cc \
utilities/env_registry.cc \
- utilities/flashcache/flashcache.cc \
utilities/geodb/geodb_impl.cc \
utilities/leveldb_options/leveldb_options.cc \
utilities/memory/memory_util.cc \
+++ /dev/null
-/****************************************************************************
- * flashcache_ioctl.h
- * FlashCache: Device mapper target for block-level disk caching
- *
- * Copyright 2010 Facebook, Inc.
- * Author: Mohan Srinivasan (mohan@facebook.com)
- *
- * Based on DM-Cache:
- * Copyright (C) International Business Machines Corp., 2006
- * Author: Ming Zhao (mingzhao@ufl.edu)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; under version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- ****************************************************************************/
-
-#ifdef OS_LINUX
-#ifndef FLASHCACHE_IOCTL_H
-#define FLASHCACHE_IOCTL_H
-
-#include <linux/types.h>
-
-#define FLASHCACHE_IOCTL 0xfe
-
-enum {
- FLASHCACHEADDNCPID_CMD=200,
- FLASHCACHEDELNCPID_CMD,
- FLASHCACHEDELNCALL_CMD,
- FLASHCACHEADDWHITELIST_CMD,
- FLASHCACHEDELWHITELIST_CMD,
- FLASHCACHEDELWHITELISTALL_CMD,
-};
-
-#define FLASHCACHEADDNCPID _IOW(FLASHCACHE_IOCTL, FLASHCACHEADDNCPID_CMD, pid_t)
-#define FLASHCACHEDELNCPID _IOW(FLASHCACHE_IOCTL, FLASHCACHEDELNCPID_CMD, pid_t)
-#define FLASHCACHEDELNCALL _IOW(FLASHCACHE_IOCTL, FLASHCACHEDELNCALL_CMD, pid_t)
-
-#define FLASHCACHEADDBLACKLIST FLASHCACHEADDNCPID
-#define FLASHCACHEDELBLACKLIST FLASHCACHEDELNCPID
-#define FLASHCACHEDELALLBLACKLIST FLASHCACHEDELNCALL
-
-#define FLASHCACHEADDWHITELIST _IOW(FLASHCACHE_IOCTL, FLASHCACHEADDWHITELIST_CMD, pid_t)
-#define FLASHCACHEDELWHITELIST _IOW(FLASHCACHE_IOCTL, FLASHCACHEDELWHITELIST_CMD, pid_t)
-#define FLASHCACHEDELALLWHITELIST _IOW(FLASHCACHE_IOCTL, FLASHCACHEDELWHITELISTALL_CMD, pid_t)
-
-#endif /* FLASHCACHE_IOCTL_H */
-#endif /* OS_LINUX */
#include "rocksdb/slice.h"
#include "rocksdb/slice_transform.h"
#include "rocksdb/utilities/env_registry.h"
-#include "rocksdb/utilities/flashcache.h"
#include "rocksdb/utilities/optimistic_transaction_db.h"
#include "rocksdb/utilities/options_util.h"
#include "rocksdb/utilities/sim_cache.h"
"\t--row_cache_size\n"
"\t--row_cache_numshardbits\n"
"\t--enable_io_prio\n"
- "\t--disable_flashcache_for_background_threads\n"
- "\t--flashcache_dev\n"
"\t--dump_malloc_stats\n"
"\t--num_multi_db\n");
#endif // ROCKSDB_LITE
static auto FLAGS_compaction_fadvice_e =
rocksdb::Options().access_hint_on_compaction_start;
-DEFINE_bool(disable_flashcache_for_background_threads, false,
- "Disable flashcache for background threads");
-
-DEFINE_string(flashcache_dev, "", "Path to flashcache device");
-
DEFINE_bool(use_tailing_iterator, false,
"Use tailing iterator to access a series of keys instead of get");
int64_t readwrites_;
int64_t merge_keys_;
bool report_file_operations_;
- int cachedev_fd_;
bool SanityCheck() {
if (FLAGS_compression_ratio > 1) {
? FLAGS_num
: ((FLAGS_writes > FLAGS_reads) ? FLAGS_writes : FLAGS_reads)),
merge_keys_(FLAGS_merge_keys < 0 ? FLAGS_num : FLAGS_merge_keys),
- report_file_operations_(FLAGS_report_file_operations),
- cachedev_fd_(-1) {
+ report_file_operations_(FLAGS_report_file_operations) {
// use simcache instead of cache
if (FLAGS_simcache_size >= 0) {
if (FLAGS_cache_numshardbits >= 1) {
// this will leak, but we're shutting down so nobody cares
cache_->DisownData();
}
- if (FLAGS_disable_flashcache_for_background_threads && cachedev_fd_ != -1) {
- // Dtor for thiis env should run before cachedev_fd_ is closed
- flashcache_aware_env_ = nullptr;
- close(cachedev_fd_);
- }
}
Slice AllocateKey(std::unique_ptr<const char[]>* key_guard) {
}
private:
- std::unique_ptr<Env> flashcache_aware_env_;
std::shared_ptr<TimestampEmulator> timestamp_emulator_;
struct ThreadArg {
FLAGS_env->LowerThreadPoolIOPriority(Env::LOW);
FLAGS_env->LowerThreadPoolIOPriority(Env::HIGH);
}
- if (FLAGS_disable_flashcache_for_background_threads && cachedev_fd_ == -1) {
- // Avoid creating the env twice when an use_existing_db is true
- cachedev_fd_ = open(FLAGS_flashcache_dev.c_str(), O_RDONLY);
- if (cachedev_fd_ < 0) {
- fprintf(stderr, "Open flash device failed\n");
- exit(1);
- }
- flashcache_aware_env_ = NewFlashcacheAwareEnv(FLAGS_env, cachedev_fd_);
- if (flashcache_aware_env_.get() == nullptr) {
- fprintf(stderr, "Failed to open flashcache device at %s\n",
- FLAGS_flashcache_dev.c_str());
- std::abort();
- }
- options.env = flashcache_aware_env_.get();
- } else {
- options.env = FLAGS_env;
- }
+ options.env = FLAGS_env;
if (FLAGS_num_multi_db <= 1) {
OpenDb(options, FLAGS_db, &db_);
+++ /dev/null
-// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
-
-#include "utilities/flashcache/flashcache.h"
-
-#include "rocksdb/utilities/flashcache.h"
-
-#ifdef OS_LINUX
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-
-#include "third-party/flashcache/flashcache_ioctl.h"
-#endif
-
-namespace rocksdb {
-
-#if !defined(ROCKSDB_LITE) && defined(OS_LINUX)
-// Most of the code that handles flashcache is copied from websql's branch of
-// mysql-5.6
-class FlashcacheAwareEnv : public EnvWrapper {
- public:
- FlashcacheAwareEnv(Env* base, int cachedev_fd)
- : EnvWrapper(base), cachedev_fd_(cachedev_fd) {
- pid_t pid = getpid();
- /* cleanup previous whitelistings */
- if (ioctl(cachedev_fd_, FLASHCACHEDELALLWHITELIST, &pid) < 0) {
- cachedev_fd_ = -1;
- fprintf(stderr, "ioctl del-all-whitelist for flashcache failed\n");
- return;
- }
- if (ioctl(cachedev_fd_, FLASHCACHEADDWHITELIST, &pid) < 0) {
- fprintf(stderr, "ioctl add-whitelist for flashcache failed\n");
- }
- }
-
- ~FlashcacheAwareEnv() {
- // cachedev_fd_ is -1 if it's unitialized
- if (cachedev_fd_ != -1) {
- pid_t pid = getpid();
- if (ioctl(cachedev_fd_, FLASHCACHEDELWHITELIST, &pid) < 0) {
- fprintf(stderr, "ioctl del-whitelist for flashcache failed\n");
- }
- }
- }
-
- static int BlacklistCurrentThread(int cachedev_fd) {
- pid_t pid = static_cast<pid_t>(syscall(SYS_gettid));
- return ioctl(cachedev_fd, FLASHCACHEADDNCPID, &pid);
- }
-
- static int WhitelistCurrentThread(int cachedev_fd) {
- pid_t pid = static_cast<pid_t>(syscall(SYS_gettid));
- return ioctl(cachedev_fd, FLASHCACHEDELNCPID, &pid);
- }
-
- int GetFlashCacheFileDescriptor() { return cachedev_fd_; }
-
- struct Arg {
- Arg(void (*f)(void* arg), void* a, int _cachedev_fd)
- : original_function_(f), original_arg_(a), cachedev_fd(_cachedev_fd) {}
-
- void (*original_function_)(void* arg);
- void* original_arg_;
- int cachedev_fd;
- };
-
- static void BgThreadWrapper(void* a) {
- Arg* arg = reinterpret_cast<Arg*>(a);
- if (arg->cachedev_fd != -1) {
- if (BlacklistCurrentThread(arg->cachedev_fd) < 0) {
- fprintf(stderr, "ioctl add-nc-pid for flashcache failed\n");
- }
- }
- arg->original_function_(arg->original_arg_);
- if (arg->cachedev_fd != -1) {
- if (WhitelistCurrentThread(arg->cachedev_fd) < 0) {
- fprintf(stderr, "ioctl del-nc-pid for flashcache failed\n");
- }
- }
- delete arg;
- }
-
- int UnSchedule(void* arg, Priority pri) override {
- // no unschedule for you
- return 0;
- }
-
- void Schedule(void (*f)(void* arg), void* a, Priority pri,
- void* tag = nullptr, void (*u)(void* arg) = 0) override {
- EnvWrapper::Schedule(&BgThreadWrapper, new Arg(f, a, cachedev_fd_), pri,
- tag);
- }
-
- private:
- int cachedev_fd_;
-};
-
-std::unique_ptr<Env> NewFlashcacheAwareEnv(Env* base,
- const int cachedev_fd) {
- std::unique_ptr<Env> ret(new FlashcacheAwareEnv(base, cachedev_fd));
- return ret;
-}
-
-int FlashcacheBlacklistCurrentThread(Env* flashcache_aware_env) {
- int fd = dynamic_cast<FlashcacheAwareEnv*>(flashcache_aware_env)
- ->GetFlashCacheFileDescriptor();
- if (fd == -1) {
- return -1;
- }
- return FlashcacheAwareEnv::BlacklistCurrentThread(fd);
-}
-int FlashcacheWhitelistCurrentThread(Env* flashcache_aware_env) {
- int fd = dynamic_cast<FlashcacheAwareEnv*>(flashcache_aware_env)
- ->GetFlashCacheFileDescriptor();
- if (fd == -1) {
- return -1;
- }
- return FlashcacheAwareEnv::WhitelistCurrentThread(fd);
-}
-
-#else // !defined(ROCKSDB_LITE) && defined(OS_LINUX)
-std::unique_ptr<Env> NewFlashcacheAwareEnv(Env* base,
- const int cachedev_fd) {
- return nullptr;
-}
-int FlashcacheBlacklistCurrentThread(Env* flashcache_aware_env) { return -1; }
-int FlashcacheWhitelistCurrentThread(Env* flashcache_aware_env) { return -1; }
-
-#endif // !defined(ROCKSDB_LITE) && defined(OS_LINUX)
-
-} // namespace rocksdb
+++ /dev/null
-// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
-
-#pragma once
-
-#include <string>
-#include "rocksdb/env.h"
-
-namespace rocksdb {
-
-// This is internal API that will make hacking on flashcache easier. Not sure if
-// we need to expose this to public users, probably not
-extern int FlashcacheBlacklistCurrentThread(Env* flashcache_aware_env);
-extern int FlashcacheWhitelistCurrentThread(Env* flashcache_aware_env);
-
-} // namespace rocksdb