Zero  0.1.0
logarchive_writer.h
Go to the documentation of this file.
1 #ifndef __LOGARCHIVE_WRITER_H
2 #define __LOGARCHIVE_WRITER_H
3 
4 #include <vector>
5 
6 #include "basics.h"
7 #include "lsn.h"
8 #include "thread_wrapper.h"
9 
10 class AsyncRingBuffer;
11 class ArchiveIndex;
12 class logrec_t;
13 
24 private:
25 
27 
29 
31 
33 
34  unsigned level;
35 
37 
38 public:
39  virtual void run();
40 
42  return index;
43  }
44 
45  /*
46  * Called by processFlushRequest to forcibly start a new run
47  */
48  void resetCurrentRun() {
49  currentRun++;
50  maxLSNInRun = lsn_t::null;
51  maxPIDInRun = std::numeric_limits<PageID>::min();
52  }
53 
54  WriterThread(AsyncRingBuffer* writebuf, ArchiveIndex* index, unsigned level)
55  :
56  buf(writebuf),
57  index(index),
58  maxLSNInRun(lsn_t::null),
59  currentRun(0),
60  level(level),
61  maxPIDInRun(std::numeric_limits<PageID>::min()) {}
62 
63  virtual ~WriterThread() {}
64 };
65 
96 public:
97  BlockAssembly(ArchiveIndex* index, unsigned level = 1, bool compression = true);
98 
99  virtual ~BlockAssembly();
100 
101  bool start(run_number_t run);
102 
103  bool add(logrec_t* lr);
104 
105  void finish();
106 
107  void shutdown();
108 
109  bool hasPendingBlocks();
110 
111  void resetWriter() {
112  writer->resetCurrentRun();
113  }
114 
116  return maxPID;
117  }
118 
119  // methods that abstract block metadata
120  static run_number_t getRunFromBlock(const char* b);
121 
122  static lsn_t getLSNFromBlock(const char* b);
123 
124  static size_t getEndOfBlock(const char* b);
125 
126  static PageID getMaxPIDFromBlock(const char* b);
127 
128 private:
129  char* dest;
130 
132 
134 
136 
137  size_t blockSize;
138 
139  size_t pos;
140 
141  size_t fpos;
142 
144 
146 
148 
150 
152 
154 
156 
158 
159  // if using a variable-bucket index, this is the number of page IDs
160  // that will be stored within a bucket (aka restore's segment)
161  size_t bucketSize;
162 
163  // list of buckets beginning in the current block
164  std::vector<pair<PageID, size_t>> buckets;
165 
166  // number of the nex bucket to be indexed
167  size_t nextBucket;
168 
169  unsigned level;
170 
172 
173  // Amount of space to reserve in each block (e.g., for skip log record)
175 
176 public:
177  struct BlockHeader {
179  uint32_t end;
182  };
183 };
184 
185 #endif // __LOGARCHIVE_WRITER_H
Definition: logarchive_writer.h:177
size_t pos
Definition: logarchive_writer.h:139
void resetCurrentRun()
Definition: logarchive_writer.h:48
PageID currentPID
Definition: logarchive_writer.h:149
lsn_t maxLSNInRun
Definition: logarchive_writer.h:30
Definition: ringbuffer.h:38
lsn_t lsn
Definition: logarchive_writer.h:178
run_number_t lastRun
Definition: logarchive_writer.h:147
WriterThread * writer
Definition: logarchive_writer.h:133
ArchiveIndex * archIndex
Definition: logarchive_writer.h:135
run_number_t currentRun
Definition: logarchive_writer.h:32
Definition: thread_wrapper.h:16
Asynchronous writer thread to produce run files on disk.
Definition: logarchive_writer.h:23
STL namespace.
AsyncRingBuffer * writebuf
Definition: logarchive_writer.h:131
std::vector< pair< PageID, size_t > > buckets
Definition: logarchive_writer.h:164
static const lsn_t null
Definition: lsn.h:371
lsn_t maxLSNInBlock
Definition: logarchive_writer.h:143
size_t currentPIDfpos
Definition: logarchive_writer.h:153
int32_t run_number_t
Definition: basics.h:50
Component that consumes a partially-sorted log record stream and generates indexed runs from it...
Definition: logarchive_writer.h:95
Encapsulates all file and I/O operations on the log archive.
Definition: logarchive_index.h:94
virtual void run()
Definition: logarchive_writer.cpp:205
Represents a transactional log record.
Definition: logrec.h:143
PageID maxPID
Definition: logarchive_writer.h:180
unsigned level
Definition: logarchive_writer.h:34
size_t currentPIDpos
Definition: logarchive_writer.h:151
PageID maxPIDInRun
Definition: logarchive_writer.h:36
WriterThread(AsyncRingBuffer *writebuf, ArchiveIndex *index, unsigned level)
Definition: logarchive_writer.h:54
size_t nextBucket
Definition: logarchive_writer.h:167
uint32_t PageID
Definition: basics.h:45
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
size_t fpos
Definition: logarchive_writer.h:141
virtual ~WriterThread()
Definition: logarchive_writer.h:63
size_t blockSize
Definition: logarchive_writer.h:137
bool enableCompression
Definition: logarchive_writer.h:157
PageID getCurrentMaxPID()
Definition: logarchive_writer.h:115
ArchiveIndex * getIndex()
Definition: logarchive_writer.h:41
lsn_t currentPIDprevLSN
Definition: logarchive_writer.h:155
int maxLSNLength
Definition: logarchive_writer.h:145
unsigned level
Definition: logarchive_writer.h:169
uint32_t end
Definition: logarchive_writer.h:179
char * dest
Definition: logarchive_writer.h:129
AsyncRingBuffer * buf
Definition: logarchive_writer.h:26
size_t bucketSize
Definition: logarchive_writer.h:161
size_t spaceToReserve
Definition: logarchive_writer.h:174
void resetWriter()
Definition: logarchive_writer.h:111
const T min(const T x, const T y)
Definition: w_minmax.h:52
ArchiveIndex * index
Definition: logarchive_writer.h:28
run_number_t run
Definition: logarchive_writer.h:181
PageID maxPID
Definition: logarchive_writer.h:171