1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. 2 // This source code is licensed under both the GPLv2 (found in the 3 // COPYING file in the root directory) and Apache 2.0 License 4 // (found in the LICENSE.Apache file in the root directory). 5 6 #pragma once 7 8 #include "rocksdb/trace_reader_writer.h" 9 10 namespace ROCKSDB_NAMESPACE { 11 12 class RandomAccessFileReader; 13 class WritableFileWriter; 14 15 // FileTraceReader allows reading RocksDB traces from a file. 16 class FileTraceReader : public TraceReader { 17 public: 18 explicit FileTraceReader(std::unique_ptr<RandomAccessFileReader>&& reader); 19 ~FileTraceReader(); 20 21 virtual Status Read(std::string* data) override; 22 virtual Status Close() override; 23 24 private: 25 std::unique_ptr<RandomAccessFileReader> file_reader_; 26 Slice result_; 27 size_t offset_; 28 char* const buffer_; 29 30 static const unsigned int kBufferSize; 31 }; 32 33 // FileTraceWriter allows writing RocksDB traces to a file. 34 class FileTraceWriter : public TraceWriter { 35 public: FileTraceWriter(std::unique_ptr<WritableFileWriter> && file_writer)36 explicit FileTraceWriter(std::unique_ptr<WritableFileWriter>&& file_writer) 37 : file_writer_(std::move(file_writer)) {} 38 ~FileTraceWriter(); 39 40 virtual Status Write(const Slice& data) override; 41 virtual Status Close() override; 42 virtual uint64_t GetFileSize() override; 43 44 private: 45 std::unique_ptr<WritableFileWriter> file_writer_; 46 }; 47 48 } // namespace ROCKSDB_NAMESPACE 49