add GetLiveFiles and GetLiveFilesMetaData for BlobDB
Summary: Closes https://github.com/facebook/rocksdb/pull/2976 Differential Revision: D5994759 Pulled By: miasantreble fbshipit-source-id: 985c31dccb957cb970c302f813cd07a1e8cb6438
This commit is contained in:
parent
8c392a31d7
commit
e2548366e1
@ -948,6 +948,39 @@ Status BlobDBImpl::Write(const WriteOptions& opts, WriteBatch* updates) {
|
|||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status BlobDBImpl::GetLiveFiles(std::vector<std::string>& ret,
|
||||||
|
uint64_t* manifest_file_size,
|
||||||
|
bool flush_memtable) {
|
||||||
|
// Hold a lock in the beginning to avoid updates to base DB during the call
|
||||||
|
ReadLock rl(&mutex_);
|
||||||
|
Status s = db_->GetLiveFiles(ret, manifest_file_size, flush_memtable);
|
||||||
|
if (!s.ok()) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
ret.reserve(ret.size() + blob_files_.size());
|
||||||
|
for (auto bfile_pair : blob_files_) {
|
||||||
|
auto blob_file = bfile_pair.second;
|
||||||
|
ret.emplace_back(blob_file->PathName());
|
||||||
|
}
|
||||||
|
return Status::OK();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BlobDBImpl::GetLiveFilesMetaData(std::vector<LiveFileMetaData>* metadata) {
|
||||||
|
// Hold a lock in the beginning to avoid updates to base DB during the call
|
||||||
|
ReadLock rl(&mutex_);
|
||||||
|
db_->GetLiveFilesMetaData(metadata);
|
||||||
|
for (auto bfile_pair : blob_files_) {
|
||||||
|
auto blob_file = bfile_pair.second;
|
||||||
|
LiveFileMetaData filemetadata;
|
||||||
|
filemetadata.size = blob_file->GetFileSize();
|
||||||
|
filemetadata.name = blob_file->PathName();
|
||||||
|
auto cfh =
|
||||||
|
reinterpret_cast<ColumnFamilyHandleImpl*>(DefaultColumnFamily());
|
||||||
|
filemetadata.column_family_name = cfh->GetName();
|
||||||
|
metadata->emplace_back(filemetadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Status BlobDBImpl::PutWithTTL(const WriteOptions& options,
|
Status BlobDBImpl::PutWithTTL(const WriteOptions& options,
|
||||||
const Slice& key, const Slice& value,
|
const Slice& key, const Slice& value,
|
||||||
uint64_t ttl) {
|
uint64_t ttl) {
|
||||||
|
@ -227,6 +227,12 @@ class BlobDBImpl : public BlobDB {
|
|||||||
|
|
||||||
virtual Status Write(const WriteOptions& opts, WriteBatch* updates) override;
|
virtual Status Write(const WriteOptions& opts, WriteBatch* updates) override;
|
||||||
|
|
||||||
|
virtual Status GetLiveFiles(std::vector<std::string>&,
|
||||||
|
uint64_t* manifest_file_size,
|
||||||
|
bool flush_memtable = true) override;
|
||||||
|
virtual void GetLiveFilesMetaData(
|
||||||
|
std::vector<LiveFileMetaData>* ) override;
|
||||||
|
|
||||||
using BlobDB::PutWithTTL;
|
using BlobDB::PutWithTTL;
|
||||||
Status PutWithTTL(const WriteOptions& options, const Slice& key,
|
Status PutWithTTL(const WriteOptions& options, const Slice& key,
|
||||||
const Slice& value, uint64_t ttl) override;
|
const Slice& value, uint64_t ttl) override;
|
||||||
|
@ -847,6 +847,30 @@ TEST_F(BlobDBTest, ColumnFamilyNotSupported) {
|
|||||||
delete handle;
|
delete handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(BlobDBTest, GetLiveFilesMetaData) {
|
||||||
|
Random rnd(301);
|
||||||
|
BlobDBOptions 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);
|
||||||
|
}
|
||||||
|
auto *bdb_impl = static_cast<BlobDBImpl *>(blob_db_);
|
||||||
|
std::vector<LiveFileMetaData> metadata;
|
||||||
|
bdb_impl->GetLiveFilesMetaData(&metadata);
|
||||||
|
ASSERT_EQ(1U, metadata.size());
|
||||||
|
std::string filename = dbname_ + "/blob_dir/000001.blob";
|
||||||
|
ASSERT_EQ(filename, metadata[0].name);
|
||||||
|
ASSERT_EQ("default", metadata[0].column_family_name);
|
||||||
|
std::vector<std::string> livefile;
|
||||||
|
uint64_t mfs;
|
||||||
|
bdb_impl->GetLiveFiles(livefile, &mfs, false);
|
||||||
|
ASSERT_EQ(4U, livefile.size());
|
||||||
|
ASSERT_EQ(filename, livefile[3]);
|
||||||
|
VerifyDB(data);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace blob_db
|
} // namespace blob_db
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user