8e7aa62813
Summary: The patch adds logic to BlobDB to maintain the mapping between blob files and SSTs for which the blob file in question is the oldest blob file referenced by the SST file. The mapping is initialized during database open based on the information retrieved using `GetLiveFilesMetaData`, and updated after flushes/compactions based on the information received through the `EventListener` interface (or, in the case of manual compactions issued through the `CompactFiles` API, the `CompactionJobInfo` object). Pull Request resolved: https://github.com/facebook/rocksdb/pull/6020 Test Plan: Added a unit test; also tested using the BlobDB mode of `db_bench`. Differential Revision: D18410508 Pulled By: ltamasi fbshipit-source-id: dd9e778af781cfdb0d7056298c54ba9cebdd54a5
67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#pragma once
|
|
|
|
#ifndef ROCKSDB_LITE
|
|
|
|
#include <atomic>
|
|
|
|
#include "rocksdb/listener.h"
|
|
#include "util/mutexlock.h"
|
|
#include "utilities/blob_db/blob_db_impl.h"
|
|
|
|
namespace rocksdb {
|
|
namespace blob_db {
|
|
|
|
class BlobDBListener : public EventListener {
|
|
public:
|
|
explicit BlobDBListener(BlobDBImpl* blob_db_impl)
|
|
: blob_db_impl_(blob_db_impl) {}
|
|
|
|
void OnFlushBegin(DB* /*db*/, const FlushJobInfo& /*info*/) override {
|
|
assert(blob_db_impl_ != nullptr);
|
|
blob_db_impl_->SyncBlobFiles();
|
|
}
|
|
|
|
void OnFlushCompleted(DB* /*db*/, const FlushJobInfo& /*info*/) override {
|
|
assert(blob_db_impl_ != nullptr);
|
|
blob_db_impl_->UpdateLiveSSTSize();
|
|
}
|
|
|
|
void OnCompactionCompleted(DB* /*db*/,
|
|
const CompactionJobInfo& /*info*/) override {
|
|
assert(blob_db_impl_ != nullptr);
|
|
blob_db_impl_->UpdateLiveSSTSize();
|
|
}
|
|
|
|
protected:
|
|
BlobDBImpl* blob_db_impl_;
|
|
};
|
|
|
|
class BlobDBListenerGC : public BlobDBListener {
|
|
public:
|
|
explicit BlobDBListenerGC(BlobDBImpl* blob_db_impl)
|
|
: BlobDBListener(blob_db_impl) {}
|
|
|
|
void OnFlushCompleted(DB* db, const FlushJobInfo& info) override {
|
|
BlobDBListener::OnFlushCompleted(db, info);
|
|
|
|
assert(blob_db_impl_);
|
|
blob_db_impl_->ProcessFlushJobInfo(info);
|
|
}
|
|
|
|
void OnCompactionCompleted(DB* db, const CompactionJobInfo& info) override {
|
|
BlobDBListener::OnCompactionCompleted(db, info);
|
|
|
|
assert(blob_db_impl_);
|
|
blob_db_impl_->ProcessCompactionJobInfo(info);
|
|
}
|
|
};
|
|
|
|
} // namespace blob_db
|
|
} // namespace rocksdb
|
|
#endif // !ROCKSDB_LITE
|