]>
Commit | Line | Data |
---|---|---|
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 FG |
5 | |
6 | #pragma once | |
11fdf7f2 | 7 | |
7c673cae | 8 | #include <map> |
494da23a | 9 | #include <string> |
7c673cae | 10 | |
f67539c2 TL |
11 | #include "rocksdb/rocksdb_namespace.h" |
12 | ||
13 | namespace ROCKSDB_NAMESPACE { | |
7c673cae FG |
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 | |
494da23a | 39 | // so that filter can determine whether a log number applies to a given |
7c673cae FG |
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( | |
11fdf7f2 TL |
50 | const std::map<uint32_t, uint64_t>& /*cf_lognumber_map*/, |
51 | const std::map<std::string, uint32_t>& /*cf_name_id_map*/) {} | |
7c673cae FG |
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. | |
11fdf7f2 TL |
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) { | |
7c673cae FG |
84 | // Default implementation falls back to older function for compatibility |
85 | return LogRecord(batch, new_batch, batch_changed); | |
86 | } | |
87 | ||
494da23a TL |
88 | // Please see the comments for LogRecord above. This function is for |
89 | // compatibility only and contains a subset of parameters. | |
7c673cae | 90 | // New code should use the function above. |
11fdf7f2 TL |
91 | virtual WalProcessingOption LogRecord(const WriteBatch& /*batch*/, |
92 | WriteBatch* /*new_batch*/, | |
93 | bool* /*batch_changed*/) const { | |
7c673cae FG |
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 | ||
f67539c2 | 102 | } // namespace ROCKSDB_NAMESPACE |