mirror of https://github.com/facebook/rocksdb.git
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;
|
using rocksdb::StackableDB::Get;
|
||||||
virtual Status Get(const ReadOptions& options,
|
virtual Status Get(const ReadOptions& options,
|
||||||
ColumnFamilyHandle* column_family, const Slice& key,
|
ColumnFamilyHandle* column_family, const Slice& key,
|
||||||
std::string* value) override = 0;
|
PinnableSlice* value) override = 0;
|
||||||
|
|
||||||
using rocksdb::StackableDB::MultiGet;
|
using rocksdb::StackableDB::MultiGet;
|
||||||
virtual std::vector<Status> 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,
|
Status BlobDBImpl::Get(const ReadOptions& options,
|
||||||
ColumnFamilyHandle* column_family, const Slice& key,
|
ColumnFamilyHandle* column_family, const Slice& key,
|
||||||
std::string* value) {
|
PinnableSlice* value) {
|
||||||
auto cfh = reinterpret_cast<ColumnFamilyHandleImpl*>(column_family);
|
auto cfh = reinterpret_cast<ColumnFamilyHandleImpl*>(column_family);
|
||||||
auto cfd = cfh->cfd();
|
auto cfd = cfh->cfd();
|
||||||
|
|
||||||
|
@ -1341,7 +1341,8 @@ Status BlobDBImpl::Get(const ReadOptions& options,
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = CommonGet(cfd, key, index_entry, value);
|
s = CommonGet(cfd, key, index_entry, value->GetSelf());
|
||||||
|
value->PinSelf();
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ class BlobDBImpl : public BlobDB {
|
||||||
|
|
||||||
using rocksdb::StackableDB::Get;
|
using rocksdb::StackableDB::Get;
|
||||||
Status Get(const ReadOptions& options, ColumnFamilyHandle* column_family,
|
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;
|
using rocksdb::StackableDB::NewIterator;
|
||||||
virtual Iterator* NewIterator(const ReadOptions& opts,
|
virtual Iterator* NewIterator(const ReadOptions& opts,
|
||||||
|
|
|
@ -130,6 +130,28 @@ TEST_F(BlobDBTest, Put) {
|
||||||
VerifyDB(data);
|
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) {
|
TEST_F(BlobDBTest, WriteBatch) {
|
||||||
Random rnd(301);
|
Random rnd(301);
|
||||||
BlobDBOptionsImpl bdb_options;
|
BlobDBOptionsImpl bdb_options;
|
||||||
|
|
Loading…
Reference in New Issue