]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/include/rocksdb/wal_filter.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / include / rocksdb / wal_filter.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 <map>
9 #include <string>
10
11 #include "rocksdb/rocksdb_namespace.h"
12
13 namespace ROCKSDB_NAMESPACE {
14
15 class WriteBatch;
16
17 // WALFilter allows an application to inspect write-ahead-log (WAL)
18 // records or modify their processing on recovery.
19 // Please see the details below.
20 class WalFilter {
21 public:
22 enum class WalProcessingOption {
23 // Continue processing as usual
24 kContinueProcessing = 0,
25 // Ignore the current record but continue processing of log(s)
26 kIgnoreCurrentRecord = 1,
27 // Stop replay of logs and discard logs
28 // Logs won't be replayed on subsequent recovery
29 kStopReplay = 2,
30 // Corrupted record detected by filter
31 kCorruptedRecord = 3,
32 // Marker for enum count
33 kWalProcessingOptionMax = 4
34 };
35
36 virtual ~WalFilter() {}
37
38 // Provide ColumnFamily->LogNumber map to filter
39 // so that filter can determine whether a log number applies to a given
40 // column family (i.e. that log hasn't been flushed to SST already for the
41 // column family).
42 // We also pass in name->id map as only name is known during
43 // recovery (as handles are opened post-recovery).
44 // while write batch callbacks happen in terms of column family id.
45 //
46 // @params cf_lognumber_map column_family_id to lognumber map
47 // @params cf_name_id_map column_family_name to column_family_id map
48
49 virtual void ColumnFamilyLogNumberMap(
50 const std::map<uint32_t, uint64_t>& /*cf_lognumber_map*/,
51 const std::map<std::string, uint32_t>& /*cf_name_id_map*/) {}
52
53 // LogRecord is invoked for each log record encountered for all the logs
54 // during replay on logs on recovery. This method can be used to:
55 // * inspect the record (using the batch parameter)
56 // * ignoring current record
57 // (by returning WalProcessingOption::kIgnoreCurrentRecord)
58 // * reporting corrupted record
59 // (by returning WalProcessingOption::kCorruptedRecord)
60 // * stop log replay
61 // (by returning kStop replay) - please note that this implies
62 // discarding the logs from current record onwards.
63 //
64 // @params log_number log_number of the current log.
65 // Filter might use this to determine if the log
66 // record is applicable to a certain column family.
67 // @params log_file_name log file name - only for informational purposes
68 // @params batch batch encountered in the log during recovery
69 // @params new_batch new_batch to populate if filter wants to change
70 // the batch (for example to filter some records out,
71 // or alter some records).
72 // Please note that the new batch MUST NOT contain
73 // more records than original, else recovery would
74 // be failed.
75 // @params batch_changed Whether batch was changed by the filter.
76 // It must be set to true if new_batch was populated,
77 // else new_batch has no effect.
78 // @returns Processing option for the current record.
79 // Please see WalProcessingOption enum above for
80 // details.
81 virtual WalProcessingOption LogRecordFound(
82 unsigned long long /*log_number*/, const std::string& /*log_file_name*/,
83 const WriteBatch& batch, WriteBatch* new_batch, bool* batch_changed) {
84 // Default implementation falls back to older function for compatibility
85 return LogRecord(batch, new_batch, batch_changed);
86 }
87
88 // Please see the comments for LogRecord above. This function is for
89 // compatibility only and contains a subset of parameters.
90 // New code should use the function above.
91 virtual WalProcessingOption LogRecord(const WriteBatch& /*batch*/,
92 WriteBatch* /*new_batch*/,
93 bool* /*batch_changed*/) const {
94 return WalProcessingOption::kContinueProcessing;
95 }
96
97 // Returns a name that identifies this WAL filter.
98 // The name will be printed to LOG file on start up for diagnosis.
99 virtual const char* Name() const = 0;
100 };
101
102 } // namespace ROCKSDB_NAMESPACE