]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/include/rocksdb/transaction_log.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / include / rocksdb / transaction_log.h
CommitLineData
7c673cae 1// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
11fdf7f2
TL
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).
7c673cae 5
11fdf7f2 6#pragma once
7c673cae 7
494da23a
TL
8#include <memory>
9#include <vector>
7c673cae
FG
10#include "rocksdb/status.h"
11#include "rocksdb/types.h"
12#include "rocksdb/write_batch.h"
7c673cae 13
f67539c2 14namespace ROCKSDB_NAMESPACE {
7c673cae
FG
15
16class LogFile;
17typedef std::vector<std::unique_ptr<LogFile>> VectorLogPtr;
18
494da23a 19enum WalFileType {
7c673cae
FG
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
494da23a 30};
7c673cae
FG
31
32class 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
7c673cae
FG
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
56struct 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
494da23a 62 // as the std::unique_ptr member does not copy.
7c673cae
FG
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
85class 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};
f67539c2 121} // namespace ROCKSDB_NAMESPACE