9b083cb11c
Summary: The patch makes sure that the functionality required for the new integrated BlobDB implementation (most importantly, the classes related to reading and writing blob files) is also built in LITE mode by removing the corresponding `#ifndef`s. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7272 Test Plan: Ran `make check` in both regular and LITE mode. Reviewed By: zhichao-cao Differential Revision: D23173280 Pulled By: ltamasi fbshipit-source-id: 1596bd1a76409a8a6d83d8f1dbfe08bfdea7ffe6
83 lines
2.5 KiB
C++
83 lines
2.5 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
|
|
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "db/blob/blob_log_format.h"
|
|
#include "rocksdb/env.h"
|
|
#include "rocksdb/slice.h"
|
|
#include "rocksdb/statistics.h"
|
|
#include "rocksdb/status.h"
|
|
#include "rocksdb/types.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
|
|
class WritableFileWriter;
|
|
|
|
/**
|
|
* BlobLogWriter is the blob log stream writer. It provides an append-only
|
|
* abstraction for writing blob data.
|
|
*
|
|
*
|
|
* Look at blob_db_format.h to see the details of the record formats.
|
|
*/
|
|
|
|
class BlobLogWriter {
|
|
public:
|
|
// Create a writer that will append data to "*dest".
|
|
// "*dest" must be initially empty.
|
|
// "*dest" must remain live while this BlobLogWriter is in use.
|
|
BlobLogWriter(std::unique_ptr<WritableFileWriter>&& dest, Env* env,
|
|
Statistics* statistics, uint64_t log_number, bool use_fsync,
|
|
uint64_t boffset = 0);
|
|
// No copying allowed
|
|
BlobLogWriter(const BlobLogWriter&) = delete;
|
|
BlobLogWriter& operator=(const BlobLogWriter&) = delete;
|
|
|
|
~BlobLogWriter() = default;
|
|
|
|
static void ConstructBlobHeader(std::string* buf, const Slice& key,
|
|
const Slice& val, uint64_t expiration);
|
|
|
|
Status AddRecord(const Slice& key, const Slice& val, uint64_t* key_offset,
|
|
uint64_t* blob_offset);
|
|
|
|
Status AddRecord(const Slice& key, const Slice& val, uint64_t expiration,
|
|
uint64_t* key_offset, uint64_t* blob_offset);
|
|
|
|
Status EmitPhysicalRecord(const std::string& headerbuf, const Slice& key,
|
|
const Slice& val, uint64_t* key_offset,
|
|
uint64_t* blob_offset);
|
|
|
|
Status AppendFooter(BlobLogFooter& footer);
|
|
|
|
Status WriteHeader(BlobLogHeader& header);
|
|
|
|
WritableFileWriter* file() { return dest_.get(); }
|
|
|
|
const WritableFileWriter* file() const { return dest_.get(); }
|
|
|
|
uint64_t get_log_number() const { return log_number_; }
|
|
|
|
Status Sync();
|
|
|
|
private:
|
|
std::unique_ptr<WritableFileWriter> dest_;
|
|
Env* env_;
|
|
Statistics* statistics_;
|
|
uint64_t log_number_;
|
|
uint64_t block_offset_; // Current offset in block
|
|
bool use_fsync_;
|
|
|
|
public:
|
|
enum ElemType { kEtNone, kEtFileHdr, kEtRecord, kEtFileFooter };
|
|
ElemType last_elem_type_;
|
|
};
|
|
|
|
} // namespace ROCKSDB_NAMESPACE
|