Add ColumnFamilyHandle::GetDescriptor()
Summary: This patch addes ColumnFamilyHandle::GetDescriptor(), which allows developers to obtain the CF options and names of the associated column family given its handle. // Returns the up-to-date descriptor used by the current handle. Since it // returns the up-to-date information, this call might internally locks // and releases DB mutex to access the up-to-date CF options. virtual ColumnFamilyDescriptor GetDescriptor() = 0; Test Plan: augment column_family_test Reviewers: sdong, yoshinorim, IslamAbdelRahman, rven, kradhakrishnan, anthony Reviewed By: anthony Subscribers: dhruba, leveldb Differential Revision: https://reviews.facebook.net/D51543
This commit is contained in:
parent
9760c842ce
commit
6935eb24e0
@ -68,6 +68,20 @@ const std::string& ColumnFamilyHandleImpl::GetName() const {
|
|||||||
return cfd()->GetName();
|
return cfd()->GetName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status ColumnFamilyHandleImpl::GetDescriptor(ColumnFamilyDescriptor* desc) {
|
||||||
|
#ifndef ROCKSDB_LITE
|
||||||
|
// accessing mutable cf-options requires db mutex.
|
||||||
|
InstrumentedMutexLock l(mutex_);
|
||||||
|
*desc = ColumnFamilyDescriptor(
|
||||||
|
cfd()->GetName(),
|
||||||
|
BuildColumnFamilyOptions(*cfd()->options(),
|
||||||
|
*cfd()->GetLatestMutableCFOptions()));
|
||||||
|
return Status::OK();
|
||||||
|
#else
|
||||||
|
return Status::NotSupported();
|
||||||
|
#endif // !ROCKSDB_LITE
|
||||||
|
}
|
||||||
|
|
||||||
const Comparator* ColumnFamilyHandleImpl::user_comparator() const {
|
const Comparator* ColumnFamilyHandleImpl::user_comparator() const {
|
||||||
return cfd()->user_comparator();
|
return cfd()->user_comparator();
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ class ColumnFamilyHandleImpl : public ColumnFamilyHandle {
|
|||||||
|
|
||||||
virtual uint32_t GetID() const override;
|
virtual uint32_t GetID() const override;
|
||||||
virtual const std::string& GetName() const override;
|
virtual const std::string& GetName() const override;
|
||||||
|
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ColumnFamilyData* cfd_;
|
ColumnFamilyData* cfd_;
|
||||||
|
@ -16,11 +16,12 @@
|
|||||||
#include "rocksdb/db.h"
|
#include "rocksdb/db.h"
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
#include "rocksdb/iterator.h"
|
#include "rocksdb/iterator.h"
|
||||||
|
#include "util/coding.h"
|
||||||
|
#include "util/options_parser.h"
|
||||||
#include "util/string_util.h"
|
#include "util/string_util.h"
|
||||||
|
#include "util/sync_point.h"
|
||||||
#include "util/testharness.h"
|
#include "util/testharness.h"
|
||||||
#include "util/testutil.h"
|
#include "util/testutil.h"
|
||||||
#include "util/coding.h"
|
|
||||||
#include "util/sync_point.h"
|
|
||||||
#include "utilities/merge_operators.h"
|
#include "utilities/merge_operators.h"
|
||||||
|
|
||||||
namespace rocksdb {
|
namespace rocksdb {
|
||||||
@ -146,10 +147,18 @@ class ColumnFamilyTest : public testing::Test {
|
|||||||
handles_.resize(cfi + cfs.size());
|
handles_.resize(cfi + cfs.size());
|
||||||
names_.resize(cfi + cfs.size());
|
names_.resize(cfi + cfs.size());
|
||||||
for (size_t i = 0; i < cfs.size(); ++i) {
|
for (size_t i = 0; i < cfs.size(); ++i) {
|
||||||
ASSERT_OK(db_->CreateColumnFamily(
|
const auto& current_cf_opt =
|
||||||
options.size() == 0 ? column_family_options_ : options[i], cfs[i],
|
options.size() == 0 ? column_family_options_ : options[i];
|
||||||
&handles_[cfi]));
|
ASSERT_OK(
|
||||||
|
db_->CreateColumnFamily(current_cf_opt, cfs[i], &handles_[cfi]));
|
||||||
names_[cfi] = cfs[i];
|
names_[cfi] = cfs[i];
|
||||||
|
|
||||||
|
#ifndef ROCKSDB_LITE // RocksDBLite does not support GetDescriptor
|
||||||
|
// Verify the CF options of the returned CF handle.
|
||||||
|
ColumnFamilyDescriptor desc;
|
||||||
|
ASSERT_OK(handles_[cfi]->GetDescriptor(&desc));
|
||||||
|
RocksDBOptionsParser::VerifyCFOptions(desc.options, current_cf_opt);
|
||||||
|
#endif // !ROCKSDB_LITE
|
||||||
cfi++;
|
cfi++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,14 +50,7 @@ class EventListener;
|
|||||||
|
|
||||||
using std::unique_ptr;
|
using std::unique_ptr;
|
||||||
|
|
||||||
class ColumnFamilyHandle {
|
|
||||||
public:
|
|
||||||
virtual ~ColumnFamilyHandle() {}
|
|
||||||
virtual const std::string& GetName() const = 0;
|
|
||||||
virtual uint32_t GetID() const = 0;
|
|
||||||
};
|
|
||||||
extern const std::string kDefaultColumnFamilyName;
|
extern const std::string kDefaultColumnFamilyName;
|
||||||
|
|
||||||
struct ColumnFamilyDescriptor {
|
struct ColumnFamilyDescriptor {
|
||||||
std::string name;
|
std::string name;
|
||||||
ColumnFamilyOptions options;
|
ColumnFamilyOptions options;
|
||||||
@ -68,6 +61,23 @@ struct ColumnFamilyDescriptor {
|
|||||||
: name(_name), options(_options) {}
|
: name(_name), options(_options) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ColumnFamilyHandle {
|
||||||
|
public:
|
||||||
|
virtual ~ColumnFamilyHandle() {}
|
||||||
|
// Returns the name of the column family associated with the current handle.
|
||||||
|
virtual const std::string& GetName() const = 0;
|
||||||
|
// Returns the ID of the column family associated with the current handle.
|
||||||
|
virtual uint32_t GetID() const = 0;
|
||||||
|
// Fills "*desc" with the up-to-date descriptor of the column family
|
||||||
|
// associated with this handle. Since it fills "*desc" with the up-to-date
|
||||||
|
// information, this call might internally lock and release DB mutex to
|
||||||
|
// access the up-to-date CF options. In addition, all the pointer-typed
|
||||||
|
// options cannot be referenced any longer than the original options exist.
|
||||||
|
//
|
||||||
|
// Note that this function is not supported in RocksDBLite.
|
||||||
|
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
static const int kMajorVersion = __ROCKSDB_MAJOR__;
|
static const int kMajorVersion = __ROCKSDB_MAJOR__;
|
||||||
static const int kMinorVersion = __ROCKSDB_MINOR__;
|
static const int kMinorVersion = __ROCKSDB_MINOR__;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user