#include <memory>
#include <unordered_set>
+#include "db/blob/blob_log_format.h"
+#include "db/blob/blob_log_writer.h"
#include "file/random_access_file_reader.h"
#include "port/port.h"
#include "rocksdb/env.h"
#include "rocksdb/options.h"
-#include "utilities/blob_db/blob_log_format.h"
-#include "utilities/blob_db/blob_log_reader.h"
-#include "utilities/blob_db/blob_log_writer.h"
namespace ROCKSDB_NAMESPACE {
namespace blob_db {
friend class BlobDBImpl;
friend struct BlobFileComparator;
friend struct BlobFileComparatorTTL;
+ friend class BlobIndexCompactionFilterBase;
friend class BlobIndexCompactionFilterGC;
private:
SequenceNumber obsolete_sequence_{0};
// Sequential/Append writer for blobs
- std::shared_ptr<Writer> log_writer_;
+ std::shared_ptr<BlobLogWriter> log_writer_;
// random access file reader for GET calls
std::shared_ptr<RandomAccessFileReader> ra_file_reader_;
// time when the random access reader was last created.
std::atomic<std::int64_t> last_access_{-1};
- // last time file was fsync'd/fdatasyncd
- std::atomic<uint64_t> last_fsync_{0};
-
bool header_valid_{false};
bool footer_valid_{false};
return obsolete_sequence_;
}
- // we will assume this is atomic
- bool NeedsFsync(bool hard, uint64_t bytes_per_sync) const;
-
Status Fsync();
uint64_t GetFileSize() const {
// All Get functions which are not atomic, will need ReadLock on the mutex
- ExpirationRange GetExpirationRange() const { return expiration_range_; }
+ const ExpirationRange& GetExpirationRange() const {
+ return expiration_range_;
+ }
void ExtendExpirationRange(uint64_t expiration) {
expiration_range_.first = std::min(expiration_range_.first, expiration);
CompressionType GetCompressionType() const { return compression_; }
- std::shared_ptr<Writer> GetWriter() const { return log_writer_; }
+ std::shared_ptr<BlobLogWriter> GetWriter() const { return log_writer_; }
// Read blob file header and footer. Return corruption if file header is
// malform or incomplete. If footer is malform or incomplete, set
bool* fresh_open);
private:
- std::shared_ptr<Reader> OpenRandomAccessReader(
- Env* env, const DBOptions& db_options,
- const EnvOptions& env_options) const;
-
Status ReadFooter(BlobLogFooter* footer);
Status WriteFooterAndCloseLocked(SequenceNumber sequence);