Add a GetComparator() function to the ColumnFamilyHandle base class so that the user's comparator can be retrieved.
Summary: MyRocks is adding support for the user of the SstFileWriter which needs a comparator. It would be more convenient to get the comparator from the column family (which already has to have it) than to have caller keep track of it. Test Plan: Standard tests (adding one for the new method) Reviewers: IslamAbdelRahman, sdong Reviewed By: sdong Subscribers: andrewkr, dhruba Differential Revision: https://reviews.facebook.net/D61155
This commit is contained in:
parent
712dd27e67
commit
cdc4eb6892
@ -81,7 +81,7 @@ Status ColumnFamilyHandleImpl::GetDescriptor(ColumnFamilyDescriptor* desc) {
|
|||||||
#endif // !ROCKSDB_LITE
|
#endif // !ROCKSDB_LITE
|
||||||
}
|
}
|
||||||
|
|
||||||
const Comparator* ColumnFamilyHandleImpl::user_comparator() const {
|
const Comparator* ColumnFamilyHandleImpl::GetComparator() const {
|
||||||
return cfd()->user_comparator();
|
return cfd()->user_comparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1007,8 +1007,7 @@ uint32_t GetColumnFamilyID(ColumnFamilyHandle* column_family) {
|
|||||||
const Comparator* GetColumnFamilyUserComparator(
|
const Comparator* GetColumnFamilyUserComparator(
|
||||||
ColumnFamilyHandle* column_family) {
|
ColumnFamilyHandle* column_family) {
|
||||||
if (column_family != nullptr) {
|
if (column_family != nullptr) {
|
||||||
auto cfh = reinterpret_cast<ColumnFamilyHandleImpl*>(column_family);
|
return column_family->GetComparator();
|
||||||
return cfh->user_comparator();
|
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -55,11 +55,11 @@ class ColumnFamilyHandleImpl : public ColumnFamilyHandle {
|
|||||||
// destroy without mutex
|
// destroy without mutex
|
||||||
virtual ~ColumnFamilyHandleImpl();
|
virtual ~ColumnFamilyHandleImpl();
|
||||||
virtual ColumnFamilyData* cfd() const { return cfd_; }
|
virtual ColumnFamilyData* cfd() const { return cfd_; }
|
||||||
virtual const Comparator* user_comparator() const;
|
|
||||||
|
|
||||||
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;
|
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) override;
|
||||||
|
virtual const Comparator* GetComparator() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ColumnFamilyData* cfd_;
|
ColumnFamilyData* cfd_;
|
||||||
|
@ -1072,6 +1072,39 @@ TEST_F(ColumnFamilyTest, MemtableNotSupportSnapshot) {
|
|||||||
}
|
}
|
||||||
#endif // !ROCKSDB_LITE
|
#endif // !ROCKSDB_LITE
|
||||||
|
|
||||||
|
class TestComparator : public Comparator {
|
||||||
|
int Compare(const rocksdb::Slice& a, const rocksdb::Slice& b) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
const char* Name() const override { return "Test"; }
|
||||||
|
void FindShortestSeparator(std::string* start,
|
||||||
|
const rocksdb::Slice& limit) const override {}
|
||||||
|
void FindShortSuccessor(std::string* key) const override {}
|
||||||
|
};
|
||||||
|
|
||||||
|
static TestComparator third_comparator;
|
||||||
|
static TestComparator fourth_comparator;
|
||||||
|
|
||||||
|
// Test that we can retrieve the comparator from a created CF
|
||||||
|
TEST_F(ColumnFamilyTest, GetComparator) {
|
||||||
|
Open();
|
||||||
|
// Add a column family with no comparator specified
|
||||||
|
CreateColumnFamilies({"first"});
|
||||||
|
const Comparator* comp = handles_[0]->GetComparator();
|
||||||
|
ASSERT_EQ(comp, BytewiseComparator());
|
||||||
|
|
||||||
|
// Add three column families - one with no comparator and two
|
||||||
|
// with comparators specified
|
||||||
|
ColumnFamilyOptions second, third, fourth;
|
||||||
|
second.comparator = &third_comparator;
|
||||||
|
third.comparator = &fourth_comparator;
|
||||||
|
CreateColumnFamilies({"second", "third", "fourth"}, {second, third, fourth});
|
||||||
|
ASSERT_EQ(handles_[1]->GetComparator(), BytewiseComparator());
|
||||||
|
ASSERT_EQ(handles_[2]->GetComparator(), &third_comparator);
|
||||||
|
ASSERT_EQ(handles_[3]->GetComparator(), &fourth_comparator);
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ColumnFamilyTest, DifferentMergeOperators) {
|
TEST_F(ColumnFamilyTest, DifferentMergeOperators) {
|
||||||
Open();
|
Open();
|
||||||
CreateColumnFamilies({"first", "second"});
|
CreateColumnFamilies({"first", "second"});
|
||||||
|
@ -546,7 +546,7 @@ class ColumnFamilyHandleImplDummy : public ColumnFamilyHandleImpl {
|
|||||||
explicit ColumnFamilyHandleImplDummy(int id)
|
explicit ColumnFamilyHandleImplDummy(int id)
|
||||||
: ColumnFamilyHandleImpl(nullptr, nullptr, nullptr), id_(id) {}
|
: ColumnFamilyHandleImpl(nullptr, nullptr, nullptr), id_(id) {}
|
||||||
uint32_t GetID() const override { return id_; }
|
uint32_t GetID() const override { return id_; }
|
||||||
const Comparator* user_comparator() const override {
|
const Comparator* GetComparator() const override {
|
||||||
return BytewiseComparator();
|
return BytewiseComparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +77,9 @@ class ColumnFamilyHandle {
|
|||||||
//
|
//
|
||||||
// Note that this function is not supported in RocksDBLite.
|
// Note that this function is not supported in RocksDBLite.
|
||||||
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0;
|
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0;
|
||||||
|
// Returns the comparator of the column family associated with the
|
||||||
|
// current handle.
|
||||||
|
virtual const Comparator* GetComparator() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int kMajorVersion = __ROCKSDB_MAJOR__;
|
static const int kMajorVersion = __ROCKSDB_MAJOR__;
|
||||||
|
@ -29,7 +29,7 @@ class ColumnFamilyHandleImplDummy : public ColumnFamilyHandleImpl {
|
|||||||
id_(id),
|
id_(id),
|
||||||
comparator_(comparator) {}
|
comparator_(comparator) {}
|
||||||
uint32_t GetID() const override { return id_; }
|
uint32_t GetID() const override { return id_; }
|
||||||
const Comparator* user_comparator() const override { return comparator_; }
|
const Comparator* GetComparator() const override { return comparator_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t id_;
|
uint32_t id_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user