summaryrefslogtreecommitdiffstats
path: root/src/rocksdb/utilities/trace/file_trace_reader_writer.h
blob: a9eafa5af1ad7d5f31e790c976bd4662e5679e9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//  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 "rocksdb/trace_reader_writer.h"

namespace ROCKSDB_NAMESPACE {

class RandomAccessFileReader;
class WritableFileWriter;

// FileTraceReader allows reading RocksDB traces from a file.
class FileTraceReader : public TraceReader {
 public:
  explicit FileTraceReader(std::unique_ptr<RandomAccessFileReader>&& reader);
  ~FileTraceReader();

  virtual Status Read(std::string* data) override;
  virtual Status Close() override;

 private:
  std::unique_ptr<RandomAccessFileReader> file_reader_;
  Slice result_;
  size_t offset_;
  char* const buffer_;

  static const unsigned int kBufferSize;
};

// FileTraceWriter allows writing RocksDB traces to a file.
class FileTraceWriter : public TraceWriter {
 public:
  explicit FileTraceWriter(std::unique_ptr<WritableFileWriter>&& file_writer)
      : file_writer_(std::move(file_writer)) {}
  ~FileTraceWriter();

  virtual Status Write(const Slice& data) override;
  virtual Status Close() override;
  virtual uint64_t GetFileSize() override;

 private:
  std::unique_ptr<WritableFileWriter> file_writer_;
};

}  // namespace ROCKSDB_NAMESPACE