file_trace_reader_writer.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. #pragma once
  6. #include "rocksdb/trace_reader_writer.h"
  7. namespace ROCKSDB_NAMESPACE {
  8. class RandomAccessFileReader;
  9. class WritableFileWriter;
  10. // FileTraceReader allows reading RocksDB traces from a file.
  11. class FileTraceReader : public TraceReader {
  12. public:
  13. explicit FileTraceReader(std::unique_ptr<RandomAccessFileReader>&& reader);
  14. ~FileTraceReader();
  15. virtual Status Read(std::string* data) override;
  16. virtual Status Close() override;
  17. private:
  18. std::unique_ptr<RandomAccessFileReader> file_reader_;
  19. Slice result_;
  20. size_t offset_;
  21. char* const buffer_;
  22. static const unsigned int kBufferSize;
  23. };
  24. // FileTraceWriter allows writing RocksDB traces to a file.
  25. class FileTraceWriter : public TraceWriter {
  26. public:
  27. explicit FileTraceWriter(std::unique_ptr<WritableFileWriter>&& file_writer)
  28. : file_writer_(std::move(file_writer)) {}
  29. ~FileTraceWriter();
  30. virtual Status Write(const Slice& data) override;
  31. virtual Status Close() override;
  32. virtual uint64_t GetFileSize() override;
  33. private:
  34. std::unique_ptr<WritableFileWriter> file_writer_;
  35. };
  36. } // namespace ROCKSDB_NAMESPACE