Zero  0.1.0
scanner.h
Go to the documentation of this file.
1 #ifndef __SCANNER_H
2 #define __SCANNER_H
3 
4 #include "sm_base.h"
5 #include "lsn.h"
6 #include "logarchiver.h"
7 
8 #include "basethread.h"
9 #include "handler.h"
10 
11 #include <bitset>
12 #include <functional>
13 #include <boost/program_options.hpp>
14 
15 namespace po = boost::program_options;
16 
17 class BaseScanner : public basethread_t {
18 public:
19  BaseScanner(const po::variables_map& options)
20  : options(options),
21  restrictFile("") {}
22 
23  virtual ~BaseScanner() {}
24 
25  void setRestrictFile(string fname) {
26  restrictFile = fname;
27  }
28 
29  std::function<void(const char*)> openFileCallback;
30 
31  void add_handler(Handler* h) {
32  handlers.push_back(h);
33  }
34 
35 protected:
36  virtual void handle(logrec_t* lr);
37 
38  virtual void finalize();
39 
40  virtual void initialize();
41 
42  po::variables_map options;
43 
44  vector<Handler*> handlers;
45 
46  string restrictFile;
47 };
48 
49 class BlockScanner : public BaseScanner {
50 public:
51  BlockScanner(const po::variables_map& options,
52  bitset<logrec_t::t_max_logrec>* filter = nullptr);
53 
54  virtual ~BlockScanner();
55 
56  virtual void run();
57 
58 private:
60 
61  char* currentBlock;
62 
63  const char* logdir;
64 
65  size_t blockSize;
66 
67  int pnum;
68 
69  void findFirstFile();
70 
71  string getNextFile();
72 };
73 
75 public:
76  LogArchiveScanner(const po::variables_map& options);
77 
78  virtual ~LogArchiveScanner() {};
79 
80  virtual void run();
81 
82 private:
83  string archdir;
84 
86 
88 
89  int level;
90 
92 
93  void findFirstFile();
94 
95  string getNextFile();
96 };
97 
98 class MergeScanner : public BaseScanner {
99 public:
100  MergeScanner(const po::variables_map& options);
101 
102  virtual ~MergeScanner() {};
103 
104  virtual void run();
105 
106 private:
107  string archdir;
108 
109  int level;
110 
112 };
113 
114 #endif // __SCANNER_H
virtual void handle(logrec_t *lr)
Definition: scanner.cpp:15
Definition: scanner.h:49
PageID scan_pid
Definition: scanner.h:91
int pnum
Definition: scanner.h:67
string archdir
Definition: scanner.h:107
Parses log records from a stream of binary data.
Definition: log_consumer.h:33
Definition: scanner.h:17
lsn_t runBegin
Definition: scanner.h:85
string archdir
Definition: scanner.h:83
Definition: scanner.h:98
int level
Definition: scanner.h:109
Definition: scanner.h:74
void add_handler(Handler *h)
Definition: scanner.h:31
Represents a transactional log record.
Definition: logrec.h:143
uint32_t PageID
Definition: basics.h:45
BaseScanner(const po::variables_map &options)
Definition: scanner.h:19
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
lsn_t runEnd
Definition: scanner.h:87
int level
Definition: scanner.h:89
Definition: basethread.h:15
LogScanner * logScanner
Definition: scanner.h:59
virtual void finalize()
Definition: scanner.cpp:21
Definition: handler.h:11
PageID scan_pid
Definition: scanner.h:111
virtual void initialize()
Definition: scanner.cpp:27
vector< Handler * > handlers
Definition: scanner.h:44
size_t blockSize
Definition: scanner.h:65
virtual void run()=0
const char * logdir
Definition: scanner.h:63
virtual ~BaseScanner()
Definition: scanner.h:23
void setRestrictFile(string fname)
Definition: scanner.h:25
string restrictFile
Definition: scanner.h:46
std::function< void(const char *)> openFileCallback
Definition: scanner.h:29
virtual ~LogArchiveScanner()
Definition: scanner.h:78
po::variables_map options
Definition: scanner.h:42
virtual ~MergeScanner()
Definition: scanner.h:102
char * currentBlock
Definition: scanner.h:61