]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/include/rocksdb/wal_filter.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / include / rocksdb / wal_filter.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
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
13namespace ROCKSDB_NAMESPACE {
7c673cae
FG
14
15class 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.
20class 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