Fix BlobDB::Get which only get out the value offset
Summary: Blob db use StackableDB::get which only get out the value offset, but not the value. Fix by making BlobDB::Get override the designated getter. Closes https://github.com/facebook/rocksdb/pull/2553 Differential Revision: D5396823 Pulled By: yiwu-arbug fbshipit-source-id: 5a7d1cf77ee44490f836a6537225955382296878
This commit is contained in:
parent
70440f7a63
commit
21b17d7686
@ -134,7 +134,7 @@ class BlobDB : public StackableDB {
|
||||
using rocksdb::StackableDB::Get;
|
||||
virtual Status Get(const ReadOptions& options,
|
||||
ColumnFamilyHandle* column_family, const Slice& key,
|
||||
std::string* value) override = 0;
|
||||
PinnableSlice* value) override = 0;
|
||||
|
||||
using rocksdb::StackableDB::MultiGet;
|
||||
virtual std::vector<Status> MultiGet(
|
||||
|
@ -1326,7 +1326,7 @@ Status BlobDBImpl::CommonGet(const ColumnFamilyData* cfd, const Slice& key,
|
||||
|
||||
Status BlobDBImpl::Get(const ReadOptions& options,
|
||||
ColumnFamilyHandle* column_family, const Slice& key,
|
||||
std::string* value) {
|
||||
PinnableSlice* value) {
|
||||
auto cfh = reinterpret_cast<ColumnFamilyHandleImpl*>(column_family);
|
||||
auto cfd = cfh->cfd();
|
||||
|
||||
@ -1341,7 +1341,8 @@ Status BlobDBImpl::Get(const ReadOptions& options,
|
||||
return s;
|
||||
}
|
||||
|
||||
s = CommonGet(cfd, key, index_entry, value);
|
||||
s = CommonGet(cfd, key, index_entry, value->GetSelf());
|
||||
value->PinSelf();
|
||||
return s;
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ class BlobDBImpl : public BlobDB {
|
||||
|
||||
using rocksdb::StackableDB::Get;
|
||||
Status Get(const ReadOptions& options, ColumnFamilyHandle* column_family,
|
||||
const Slice& key, std::string* value) override;
|
||||
const Slice& key, PinnableSlice* value) override;
|
||||
|
||||
using rocksdb::StackableDB::NewIterator;
|
||||
virtual Iterator* NewIterator(const ReadOptions& opts,
|
||||
|
@ -130,6 +130,28 @@ TEST_F(BlobDBTest, Put) {
|
||||
VerifyDB(data);
|
||||
}
|
||||
|
||||
TEST_F(BlobDBTest, StackableDBGet) {
|
||||
Random rnd(301);
|
||||
BlobDBOptionsImpl bdb_options;
|
||||
bdb_options.disable_background_tasks = true;
|
||||
Open(bdb_options);
|
||||
std::map<std::string, std::string> data;
|
||||
for (size_t i = 0; i < 100; i++) {
|
||||
PutRandom("key" + ToString(i), &rnd, &data);
|
||||
}
|
||||
for (size_t i = 0; i < 100; i++) {
|
||||
StackableDB *db = blob_db_;
|
||||
ColumnFamilyHandle *column_family = db->DefaultColumnFamily();
|
||||
std::string key = "key" + ToString(i);
|
||||
PinnableSlice pinnable_value;
|
||||
ASSERT_OK(db->Get(ReadOptions(), column_family, key, &pinnable_value));
|
||||
std::string string_value;
|
||||
ASSERT_OK(db->Get(ReadOptions(), column_family, key, &string_value));
|
||||
ASSERT_EQ(string_value, pinnable_value.ToString());
|
||||
ASSERT_EQ(string_value, data[key]);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(BlobDBTest, WriteBatch) {
|
||||
Random rnd(301);
|
||||
BlobDBOptionsImpl bdb_options;
|
||||
|
Loading…
Reference in New Issue
Block a user