]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/include/rocksdb/transaction_log.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / include / rocksdb / transaction_log.h
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 <memory>
9 #include <vector>
10 #include "rocksdb/status.h"
11 #include "rocksdb/types.h"
12 #include "rocksdb/write_batch.h"
13
14 namespace ROCKSDB_NAMESPACE {
15
16 class LogFile;
17 typedef std::vector<std::unique_ptr<LogFile>> VectorLogPtr;
18
19 enum WalFileType {
20 /* Indicates that WAL file is in archive directory. WAL files are moved from
21 * the main db directory to archive directory once they are not live and stay
22 * there until cleaned up. Files are cleaned depending on archive size
23 * (Options::WAL_size_limit_MB) and time since last cleaning
24 * (Options::WAL_ttl_seconds).
25 */
26 kArchivedLogFile = 0,
27
28 /* Indicates that WAL file is live and resides in the main db directory */
29 kAliveLogFile = 1
30 };
31
32 class LogFile {
33 public:
34 LogFile() {}
35 virtual ~LogFile() {}
36
37 // Returns log file's pathname relative to the main db dir
38 // Eg. For a live-log-file = /000003.log
39 // For an archived-log-file = /archive/000003.log
40 virtual std::string PathName() const = 0;
41
42 // Primary identifier for log file.
43 // This is directly proportional to creation time of the log file
44 virtual uint64_t LogNumber() const = 0;
45
46 // Log file can be either alive or archived
47 virtual WalFileType Type() const = 0;
48
49 // Starting sequence number of writebatch written in this log file
50 virtual SequenceNumber StartSequence() const = 0;
51
52 // Size of log file on disk in Bytes
53 virtual uint64_t SizeFileBytes() const = 0;
54 };
55
56 struct BatchResult {
57 SequenceNumber sequence = 0;
58 std::unique_ptr<WriteBatch> writeBatchPtr;
59
60 // Add empty __ctor and __dtor for the rule of five
61 // However, preserve the original semantics and prohibit copying
62 // as the std::unique_ptr member does not copy.
63 BatchResult() {}
64
65 ~BatchResult() {}
66
67 BatchResult(const BatchResult&) = delete;
68
69 BatchResult& operator=(const BatchResult&) = delete;
70
71 BatchResult(BatchResult&& bResult)
72 : sequence(std::move(bResult.sequence)),
73 writeBatchPtr(std::move(bResult.writeBatchPtr)) {}
74
75 BatchResult& operator=(BatchResult&& bResult) {
76 sequence = std::move(bResult.sequence);
77 writeBatchPtr = std::move(bResult.writeBatchPtr);
78 return *this;
79 }
80 };
81
82 // A TransactionLogIterator is used to iterate over the transactions in a db.
83 // One run of the iterator is continuous, i.e. the iterator will stop at the
84 // beginning of any gap in sequences
85 class TransactionLogIterator {
86 public:
87 TransactionLogIterator() {}
88 virtual ~TransactionLogIterator() {}
89
90 // An iterator is either positioned at a WriteBatch or not valid.
91 // This method returns true if the iterator is valid.
92 // Can read data from a valid iterator.
93 virtual bool Valid() = 0;
94
95 // Moves the iterator to the next WriteBatch.
96 // REQUIRES: Valid() to be true.
97 virtual void Next() = 0;
98
99 // Returns ok if the iterator is valid.
100 // Returns the Error when something has gone wrong.
101 virtual Status status() = 0;
102
103 // If valid return's the current write_batch and the sequence number of the
104 // earliest transaction contained in the batch.
105 // ONLY use if Valid() is true and status() is OK.
106 virtual BatchResult GetBatch() = 0;
107
108 // The read options for TransactionLogIterator.
109 struct ReadOptions {
110 // If true, all data read from underlying storage will be
111 // verified against corresponding checksums.
112 // Default: true
113 bool verify_checksums_;
114
115 ReadOptions() : verify_checksums_(true) {}
116
117 explicit ReadOptions(bool verify_checksums)
118 : verify_checksums_(verify_checksums) {}
119 };
120 };
121 } // namespace ROCKSDB_NAMESPACE