Storage Engine API
wiredtiger_record_store.h
Go to the documentation of this file.
1 // wiredtiger_record_store.h
2 
32 #pragma once
33 
34 #include <memory>
35 #include <set>
36 #include <string>
37 #include <wiredtiger.h>
38 
46 #include "mongo/platform/atomic_word.h"
47 #include "mongo/stdx/condition_variable.h"
48 #include "mongo/stdx/mutex.h"
49 #include "mongo/stdx/thread.h"
50 #include "mongo/util/fail_point_service.h"
51 
57 #define WT_OP_CHECK(x) (((MONGO_FAIL_POINT(WTWriteConflictException))) ? (WT_ROLLBACK) : (x))
58 
62 #define WT_READ_CHECK(x) \
63  (((MONGO_FAIL_POINT(WTWriteConflictExceptionForReads))) ? (WT_ROLLBACK) : (x))
64 
65 namespace mongo {
66 
67 class RecoveryUnit;
68 class WiredTigerSessionCache;
69 class WiredTigerSizeStorer;
70 
71 extern const std::string kWiredTigerEngineName;
72 
75 
78 
79 public:
85  static StatusWith<std::string> parseOptionsField(const BSONObj options);
86 
98  static StatusWith<std::string> generateCreateString(const std::string& engineName,
99  StringData ns,
100  const CollectionOptions& options,
101  StringData extraStrings,
102  bool prefixed);
103 
104  struct Params {
105  StringData ns;
106  std::string uri;
107  std::string engineName;
108  bool isCapped;
110  int64_t cappedMaxSize;
111  int64_t cappedMaxDocs;
115  };
116 
117  WiredTigerRecordStore(WiredTigerKVEngine* kvEngine, OperationContext* opCtx, Params params);
118 
119  virtual ~WiredTigerRecordStore();
120 
121  virtual void postConstructorInit(OperationContext* opCtx);
122 
123  // name of the RecordStore implementation
124  virtual const char* name() const;
125 
126  virtual long long dataSize(OperationContext* opCtx) const;
127 
128  virtual long long numRecords(OperationContext* opCtx) const;
129 
130  virtual bool isCapped() const;
131 
132  virtual int64_t storageSize(OperationContext* opCtx,
133  BSONObjBuilder* extraInfo = NULL,
134  int infoLevel = 0) const;
135 
136  // CRUD related
137 
138  virtual RecordData dataFor(OperationContext* opCtx, const RecordId& id) const;
139 
140  virtual bool findRecord(OperationContext* opCtx, const RecordId& id, RecordData* out) const;
141 
142  virtual void deleteRecord(OperationContext* opCtx, const RecordId& id);
143 
144  virtual Status insertRecords(OperationContext* opCtx,
145  std::vector<Record>* records,
146  std::vector<Timestamp>* timestamps,
147  bool enforceQuota);
148 
150  OperationContext* opCtx, const char* data, int len, Timestamp timestamp, bool enforceQuota);
151 
152  virtual Status insertRecordsWithDocWriter(OperationContext* opCtx,
153  const DocWriter* const* docs,
154  const Timestamp* timestamps,
155  size_t nDocs,
156  RecordId* idsOut);
157 
158  virtual Status updateRecord(OperationContext* opCtx,
159  const RecordId& oldLocation,
160  const char* data,
161  int len,
162  bool enforceQuota,
163  UpdateNotifier* notifier);
164 
165  virtual bool updateWithDamagesSupported() const;
166 
167  virtual StatusWith<RecordData> updateWithDamages(OperationContext* opCtx,
168  const RecordId& id,
169  const RecordData& oldRec,
170  const char* damageSource,
171  const mutablebson::DamageVector& damages);
172 
173  virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
174  bool forward) const = 0;
175 
176  std::unique_ptr<RecordCursor> getRandomCursor(OperationContext* opCtx) const final;
177 
178  virtual std::unique_ptr<RecordCursor> getRandomCursorWithOptions(
179  OperationContext* opCtx, StringData extraConfig) const = 0;
180 
181  std::vector<std::unique_ptr<RecordCursor>> getManyCursors(OperationContext* opCtx) const final;
182 
183  virtual Status truncate(OperationContext* opCtx);
184 
185  virtual bool compactSupported() const {
186  return !_isEphemeral;
187  }
188  virtual bool compactsInPlace() const {
189  return true;
190  }
191 
192  virtual Status compact(OperationContext* opCtx,
193  RecordStoreCompactAdaptor* adaptor,
194  const CompactOptions* options,
196 
197  virtual bool isInRecordIdOrder() const override {
198  return true;
199  }
200 
201  virtual Status validate(OperationContext* opCtx,
202  ValidateCmdLevel level,
203  ValidateAdaptor* adaptor,
204  ValidateResults* results,
205  BSONObjBuilder* output);
206 
207  virtual void appendCustomStats(OperationContext* opCtx,
208  BSONObjBuilder* result,
209  double scale) const;
210 
211  virtual Status touch(OperationContext* opCtx, BSONObjBuilder* output) const;
212 
213  virtual void cappedTruncateAfter(OperationContext* opCtx, RecordId end, bool inclusive);
214 
215  virtual boost::optional<RecordId> oplogStartHack(OperationContext* opCtx,
216  const RecordId& startingPosition) const;
217 
218  virtual Status oplogDiskLocRegister(OperationContext* opCtx,
219  const Timestamp& opTime,
220  bool orderedCommit);
221 
222  virtual void updateStatsAfterRepair(OperationContext* opCtx,
223  long long numRecords,
224  long long dataSize);
225 
226 
227  void waitForAllEarlierOplogWritesToBeVisible(OperationContext* opCtx) const override;
228 
229  Status updateCappedSize(OperationContext* opCtx, long long cappedSize) final;
230 
232  stdx::lock_guard<stdx::mutex> lk(_cappedCallbackMutex);
233  _cappedCallback = cb;
234  }
235 
236  int64_t cappedMaxDocs() const;
237  int64_t cappedMaxSize() const;
238 
239  const std::string& getURI() const {
240  return _uri;
241  }
242 
243  const std::string& getIdent() const override {
244  return _uri;
245  }
246 
247  uint64_t tableId() const {
248  return _tableId;
249  }
250 
252  _sizeStorer = ss;
253  }
254 
255  bool isOpHidden_forTest(const RecordId& id) const;
256 
257  bool inShutdown() const;
258 
259  void reclaimOplog(OperationContext* opCtx);
260 
265  void reclaimOplog(OperationContext* opCtx, Timestamp persistedTimestamp);
266 
267  int64_t cappedDeleteAsNeeded(OperationContext* opCtx, const RecordId& justInserted);
268 
269  int64_t cappedDeleteAsNeeded_inlock(OperationContext* opCtx, const RecordId& justInserted);
270 
271  // Returns false if the oplog was dropped while waiting for a deletion request.
272  bool yieldAndAwaitOplogDeletionRequest(OperationContext* opCtx);
273 
274  bool haveCappedWaiters();
275 
277 
278  class OplogStones;
279 
280  // Exposed only for testing.
282  return _oplogStones.get();
283  };
284 
285 protected:
286  virtual RecordId getKey(WT_CURSOR* cursor) const = 0;
287 
288  virtual void setKey(WT_CURSOR* cursor, RecordId id) const = 0;
289 
290 private:
291  class RandomCursor;
292 
293  class NumRecordsChange;
294  class DataSizeChange;
295 
296  static WiredTigerRecoveryUnit* _getRecoveryUnit(OperationContext* opCtx);
297 
298  Status _insertRecords(OperationContext* opCtx,
299  Record* records,
300  const Timestamp* timestamps,
301  size_t nRecords);
302 
303  RecordId _nextId();
304  void _setId(RecordId id);
305  bool cappedAndNeedDelete() const;
306  RecordData _getData(const WiredTigerCursor& cursor) const;
307 
313  void _positionAtFirstRecordId(OperationContext* opCtx,
314  WT_CURSOR* cursor,
315  const RecordId& firstKey,
316  bool forTruncate) const;
317 
335  void _changeNumRecords(OperationContext* opCtx, int64_t diff);
336  void _increaseDataSize(OperationContext* opCtx, int64_t amount);
337 
338 
339  const std::string _uri;
340  const uint64_t _tableId; // not persisted
341 
342  // Canonical engine name to use for retrieving options
343  const std::string _engineName;
344  // The capped settings should not be updated once operations have started
345  const bool _isCapped;
346  // True if the storage engine is an in-memory storage engine
347  const bool _isEphemeral;
348  // True if the namespace of this record store starts with "local.oplog.", and false otherwise.
349  const bool _isOplog;
350  int64_t _cappedMaxSize;
351  const int64_t _cappedMaxSizeSlack; // when to start applying backpressure
352  const int64_t _cappedMaxDocs;
354  AtomicInt64 _cappedSleep;
355  AtomicInt64 _cappedSleepMS;
358  mutable stdx::mutex _cappedCallbackMutex; // guards _cappedCallback and _shuttingDown
359 
360  // See comment in ::cappedDeleteAsNeeded
362  mutable stdx::timed_mutex _cappedDeleterMutex;
363 
364  AtomicInt64 _nextIdNum;
365 
366  WiredTigerSizeStorer* _sizeStorer; // not owned, can be NULL
367  std::shared_ptr<WiredTigerSizeStorer::SizeInfo> _sizeInfo;
369 
370  // Non-null if this record store is underlying the active oplog.
371  std::shared_ptr<OplogStones> _oplogStones;
372 };
373 
374 
376 public:
378  OperationContext* opCtx,
379  Params params);
380 
381  virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
382  bool forward) const override;
383 
384  virtual std::unique_ptr<RecordCursor> getRandomCursorWithOptions(
385  OperationContext* opCtx, StringData extraConfig) const override;
386 
387 protected:
388  virtual RecordId getKey(WT_CURSOR* cursor) const;
389 
390  virtual void setKey(WT_CURSOR* cursor, RecordId id) const;
391 };
392 
394 public:
396  OperationContext* opCtx,
397  Params params,
398  KVPrefix prefix);
399 
400  virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
401  bool forward) const override;
402 
403  virtual std::unique_ptr<RecordCursor> getRandomCursorWithOptions(
404  OperationContext* opCtx, StringData extraConfig) const override;
405 
406  virtual KVPrefix getPrefix() const {
407  return _prefix;
408  }
409 
410 protected:
411  virtual RecordId getKey(WT_CURSOR* cursor) const;
412 
413  virtual void setKey(WT_CURSOR* cursor, RecordId id) const;
414 
415 private:
417 };
418 
420 public:
421  WiredTigerRecordStoreCursorBase(OperationContext* opCtx,
422  const WiredTigerRecordStore& rs,
423  bool forward);
424 
425  boost::optional<Record> next();
426 
427  boost::optional<Record> seekExact(const RecordId& id);
428 
429  void save();
430 
431  void saveUnpositioned();
432 
433  bool restore();
434 
436 
437  void reattachToOperationContext(OperationContext* opCtx);
438 
439 protected:
440  virtual RecordId getKey(WT_CURSOR* cursor) const = 0;
441 
442  virtual void setKey(WT_CURSOR* cursor, RecordId id) const = 0;
443 
451  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const = 0;
452 
456  virtual void initCursorToBeginning() = 0;
457 
459  OperationContext* _opCtx;
460  const bool _forward;
461  bool _skipNextAdvance = false;
462  boost::optional<WiredTigerCursor> _cursor;
463  bool _eof = false;
464  RecordId _lastReturnedId; // If null, need to seek to first/last record.
465 
466 private:
467  bool isVisible(const RecordId& id);
468 };
469 
471 public:
472  WiredTigerRecordStoreStandardCursor(OperationContext* opCtx,
473  const WiredTigerRecordStore& rs,
474  bool forward = true);
475 
476 protected:
477  virtual RecordId getKey(WT_CURSOR* cursor) const override;
478 
479  virtual void setKey(WT_CURSOR* cursor, RecordId id) const override;
480 
488  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const override;
489 
490  virtual void initCursorToBeginning(){};
491 };
492 
494 public:
495  WiredTigerRecordStorePrefixedCursor(OperationContext* opCtx,
496  const WiredTigerRecordStore& rs,
497  KVPrefix prefix,
498  bool forward = true);
499 
500 protected:
501  virtual RecordId getKey(WT_CURSOR* cursor) const override;
502 
503  virtual void setKey(WT_CURSOR* cursor, RecordId id) const override;
504 
512  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const override;
513 
514  virtual void initCursorToBeginning() override;
515 
516 private:
518 };
519 
520 
521 // WT failpoint to throw write conflict exceptions randomly
522 MONGO_FAIL_POINT_DECLARE(WTWriteConflictException);
523 MONGO_FAIL_POINT_DECLARE(WTWriteConflictExceptionForReads);
524 
525 // Prevents oplog writes from being considered durable on the primary. Once activated, new writes
526 // will not be considered durable until deactivated. It is unspecified whether writes that commit
527 // before activation will become visible while active.
528 MONGO_FAIL_POINT_DECLARE(WTPausePrimaryOplogDurabilityLoop);
529 }
virtual void setKey(WT_CURSOR *cursor, RecordId id) const override
Definition: wiredtiger_record_store.cpp:2136
Definition: record_store.h:665
int64_t _cappedMaxSize
Definition: wiredtiger_record_store.h:350
void setCappedCallback(CappedCallback *cb)
Definition: wiredtiger_record_store.h:231
int64_t cappedDeleteAsNeeded_inlock(OperationContext *opCtx, const RecordId &justInserted)
Definition: wiredtiger_record_store.cpp:974
AtomicLockStats stats
Definition: lock_state.cpp:92
bool isEphemeral
Definition: wiredtiger_record_store.h:109
virtual long long dataSize(OperationContext *opCtx) const
The dataSize is an approximation of the sum of the sizes (in bytes) of the documents or entries in th...
Definition: wiredtiger_record_store.cpp:756
ValidateCmdLevel
Definition: record_store.h:93
virtual std::unique_ptr< RecordCursor > getRandomCursorWithOptions(OperationContext *opCtx, StringData extraConfig) const =0
void reclaimOplog(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:1153
WiredTigerRecordStorePrefixedCursor(OperationContext *opCtx, const WiredTigerRecordStore &rs, KVPrefix prefix, bool forward=true)
Definition: wiredtiger_record_store.cpp:2130
const int64_t _cappedMaxDocs
Definition: wiredtiger_record_store.h:352
int64_t cappedMaxDocs
Definition: wiredtiger_record_store.h:111
virtual bool compactsInPlace() const
Does compact() leave RecordIds alone or can they change.
Definition: wiredtiger_record_store.h:188
virtual void cappedTruncateAfter(OperationContext *opCtx, RecordId end, bool inclusive)
Truncate documents newer than the document at 'end' from the capped collection.
Definition: wiredtiger_record_store.cpp:1744
virtual StatusWith< RecordId > insertRecord(OperationContext *opCtx, const char *data, int len, Timestamp timestamp, bool enforceQuota)
Definition: wiredtiger_record_store.cpp:1306
void notifyCappedWaitersIfNeeded()
Definition: wiredtiger_record_store.cpp:1327
Definition: wiredtiger_record_store.h:73
virtual ~WiredTigerRecordStore()
Definition: wiredtiger_record_store.cpp:670
CappedCallback * _cappedCallback
Definition: wiredtiger_record_store.h:356
Definition: record_store.h:673
Definition: wiredtiger_record_store.h:493
void setSizeStorer(WiredTigerSizeStorer *ss)
Definition: wiredtiger_record_store.h:251
const bool _isOplog
Definition: wiredtiger_record_store.h:349
bool isVisible(const RecordId &id)
virtual std::unique_ptr< SeekableRecordCursor > getCursor(OperationContext *opCtx, bool forward) const =0
Returns a new cursor over this record store.
PrefixedWiredTigerRecordStore(WiredTigerKVEngine *kvEngine, OperationContext *opCtx, Params params, KVPrefix prefix)
Definition: wiredtiger_record_store.cpp:2089
Definition: collection_options.h:57
The WiredTigerSizeStorer class serves as a write buffer to durably store size information for MongoDB...
Definition: wiredtiger_size_storer.h:57
const std::string & getIdent() const override
Definition: wiredtiger_record_store.h:243
virtual boost::optional< RecordId > oplogStartHack(OperationContext *opCtx, const RecordId &startingPosition) const
Return the RecordId of an oplog entry as close to startingPosition as possible without being higher.
Definition: wiredtiger_record_store.cpp:1641
virtual void deleteRecord(OperationContext *opCtx, const RecordId &id)
Definition: wiredtiger_record_store.cpp:843
AtomicInt64 _cappedSleepMS
Definition: wiredtiger_record_store.h:355
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
Status _insertRecords(OperationContext *opCtx, Record *records, const Timestamp *timestamps, size_t nRecords)
Definition: wiredtiger_record_store.cpp:1226
virtual bool hasWrongPrefix(WT_CURSOR *cursor, RecordId *id) const override
Callers must have already checked the return value of a positioning method against 'WT_NOTFOUND'.
Definition: wiredtiger_record_store.cpp:2080
const std::string _engineName
Definition: wiredtiger_record_store.h:343
const std::string _uri
Definition: wiredtiger_record_store.h:339
virtual bool isInRecordIdOrder() const override
Does the RecordStore cursor retrieve its document in RecordId Order?
Definition: wiredtiger_record_store.h:197
const WiredTigerRecordStore & _rs
Definition: wiredtiger_record_store.h:458
virtual void initCursorToBeginning() override
Called when restoring a cursor that has not been advanced.
Definition: wiredtiger_record_store.cpp:2157
A replacement for the Record class.
Definition: record_data.h:43
StandardWiredTigerRecordStore(WiredTigerKVEngine *kvEngine, OperationContext *opCtx, Params params)
Definition: wiredtiger_record_store.cpp:2027
Definition: wiredtiger_record_store.h:393
virtual bool hasWrongPrefix(WT_CURSOR *cursor, RecordId *id) const =0
Callers must have already checked the return value of a positioning method against 'WT_NOTFOUND'.
MONGO_FAIL_POINT_DECLARE(WTPrepareConflictForReads)
bool cappedAndNeedDelete() const
Definition: wiredtiger_record_store.cpp:870
OplogStones * oplogStones()
Definition: wiredtiger_record_store.h:281
virtual bool updateWithDamagesSupported() const
Definition: wiredtiger_record_store.cpp:1416
virtual void setKey(WT_CURSOR *cursor, RecordId id) const
Definition: wiredtiger_record_store.cpp:2038
AtomicInt64 _cappedSleep
Definition: wiredtiger_record_store.h:354
OperationContext * _opCtx
Definition: wiredtiger_record_store.h:459
virtual RecordId getKey(WT_CURSOR *cursor) const override
Definition: wiredtiger_record_store.cpp:2140
virtual RecordId getKey(WT_CURSOR *cursor) const
Definition: wiredtiger_record_store.cpp:2118
This is so when a RecordStore is validating all records it can call back to someone to check if a rec...
Definition: record_store.h:687
Definition: wiredtiger_record_store.h:375
Definition: record_store.h:78
int64_t cappedMaxSize() const
Definition: wiredtiger_record_store.cpp:773
const bool _isCapped
Definition: wiredtiger_record_store.h:345
stdx::timed_mutex _cappedDeleterMutex
Definition: wiredtiger_record_store.h:362
CappedCallback * cappedCallback
Definition: wiredtiger_record_store.h:112
int64_t cappedDeleteAsNeeded(OperationContext *opCtx, const RecordId &justInserted)
Definition: wiredtiger_record_store.cpp:883
void _positionAtFirstRecordId(OperationContext *opCtx, WT_CURSOR *cursor, const RecordId &firstKey, bool forTruncate) const
Position the cursor at the first key.
Definition: wiredtiger_record_store.cpp:946
virtual void initCursorToBeginning()=0
Called when restoring a cursor that has not been advanced.
KVPrefix _prefix
Definition: wiredtiger_record_store.h:416
bool inShutdown() const
Definition: wiredtiger_record_store.cpp:751
bool inclusive
Definition: btree_interface.cpp:335
Definition: collection.h:77
Allows inserting a Record "in-place" without creating a copy ahead of time.
Definition: record_store.h:62
virtual RecordId getKey(WT_CURSOR *cursor) const override
Definition: wiredtiger_record_store.cpp:2073
const std::string & getURI() const
Definition: wiredtiger_record_store.h:239
virtual Status touch(OperationContext *opCtx, BSONObjBuilder *output) const
Load all data into cache.
Definition: wiredtiger_record_store.cpp:1622
std::shared_ptr< void > data
Definition: ephemeral_for_test_record_store_test.cpp:74
virtual RecordData dataFor(OperationContext *opCtx, const RecordId &id) const
Get the RecordData at loc, which must exist.
Definition: wiredtiger_record_store.cpp:811
void reattachToOperationContext(OperationContext *opCtx)
Reattaches to the OperationContext and reacquires any storage-engine state.
Definition: wiredtiger_record_store.cpp:2019
Definition: wiredtiger_record_store.h:419
void _increaseDataSize(OperationContext *opCtx, int64_t amount)
Definition: wiredtiger_record_store.cpp:1729
The data items stored in a RecordStore.
Definition: record_store.h:88
Definition: wiredtiger_kv_engine.h:66
std::unique_ptr< RecordStore > rs
Definition: kv_engine_test_timestamps.cpp:207
WiredTigerKVEngine * _kvEngine
Definition: wiredtiger_record_store.h:368
bool isReadOnly
Definition: wiredtiger_record_store.h:114
std::shared_ptr< OplogStones > _oplogStones
Definition: wiredtiger_record_store.h:371
bool isOpHidden_forTest(const RecordId &id) const
Definition: wiredtiger_record_store.cpp:1315
virtual std::unique_ptr< SeekableRecordCursor > getCursor(OperationContext *opCtx, bool forward) const override
Returns a new cursor over this record store.
Definition: wiredtiger_record_store.cpp:2042
Definition: wiredtiger_record_store.h:470
Definition: wiredtiger_record_store_oplog_stones.h:46
virtual const char * name() const
Definition: wiredtiger_record_store.cpp:747
RecordId _lastReturnedId
Definition: wiredtiger_record_store.h:464
bool _eof
Definition: wiredtiger_record_store.h:463
This is a smart pointer that wraps a WT_CURSOR and knows how to obtain and get from pool.
Definition: wiredtiger_recovery_unit.h:187
virtual StatusWith< RecordData > updateWithDamages(OperationContext *opCtx, const RecordId &id, const RecordData &oldRec, const char *damageSource, const mutablebson::DamageVector &damages)
Updates the record positioned at 'loc' in-place using the deltas described by 'damages'.
Definition: wiredtiger_record_store.cpp:1420
virtual void updateStatsAfterRepair(OperationContext *opCtx, long long numRecords, long long dataSize)
Called after a repair operation is run with the recomputed numRecords and dataSize.
Definition: wiredtiger_record_store.cpp:1667
AtomicInt64 _nextIdNum
Definition: wiredtiger_record_store.h:364
OperationContext Database StringData CollectionOptions bool const BSONObj &idIndex Status
Definition: database_impl.cpp:955
virtual void setKey(WT_CURSOR *cursor, RecordId id) const override
Definition: wiredtiger_record_store.cpp:2069
Status updateCappedSize(OperationContext *opCtx, long long cappedSize) final
used to support online change oplog size.
Definition: wiredtiger_record_store.cpp:2216
void detachFromOperationContext()
Detaches from the OperationContext and releases any storage-engine state.
Definition: wiredtiger_record_store.cpp:2014
void waitForAllEarlierOplogWritesToBeVisible(OperationContext *opCtx) const override
Waits for all writes that completed before this call to be visible to forward scans.
Definition: wiredtiger_record_store.cpp:1630
bool _skipNextAdvance
Definition: wiredtiger_record_store.h:461
virtual void setKey(WT_CURSOR *cursor, RecordId id) const =0
Definition: index_key_validate.h:40
virtual Status oplogDiskLocRegister(OperationContext *opCtx, const Timestamp &opTime, bool orderedCommit)
When we write to an oplog, we call this so that if the storage engine supports doc locking,...
Definition: wiredtiger_record_store.cpp:1848
virtual void postConstructorInit(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:688
virtual std::unique_ptr< RecordCursor > getRandomCursorWithOptions(OperationContext *opCtx, StringData extraConfig) const override
Definition: wiredtiger_record_store.cpp:2060
KVPrefix _prefix
Definition: wiredtiger_record_store.h:517
WiredTigerRecordStoreStandardCursor(OperationContext *opCtx, const WiredTigerRecordStore &rs, bool forward=true)
Definition: wiredtiger_record_store.cpp:2065
WiredTigerRecordStore(WiredTigerKVEngine *kvEngine, OperationContext *opCtx, Params params)
Definition: wiredtiger_record_store.cpp:621
std::vector< std::unique_ptr< RecordCursor > > getManyCursors(OperationContext *opCtx) const final
Returns many RecordCursors that partition the RecordStore into many disjoint sets.
Definition: wiredtiger_record_store.cpp:1462
bool restore()
Recovers from potential state changes in underlying data.
Definition: wiredtiger_record_store.cpp:1955
const int64_t _cappedMaxSizeSlack
Definition: wiredtiger_record_store.h:351
void save()
Prepares for state changes in underlying data in a way that allows the cursor's current position to b...
Definition: wiredtiger_record_store.cpp:1940
stdx::mutex _cappedCallbackMutex
Definition: wiredtiger_record_store.h:358
bool haveCappedWaiters()
Definition: wiredtiger_record_store.cpp:1322
virtual void setKey(WT_CURSOR *cursor, RecordId id) const
Definition: wiredtiger_record_store.cpp:2126
An abstraction used for storing documents in a collection or entries in an index.
Definition: record_store.h:282
static StatusWith< std::string > parseOptionsField(const BSONObj options)
Parses collections options for wired tiger configuration string for table creation.
Definition: wiredtiger_record_store.cpp:457
When a capped collection is modified (delete/insert/etc) then certain notifications need to be made,...
Definition: capped_callback.h:44
RecordId _cappedFirstRecord
Definition: wiredtiger_record_store.h:353
virtual void setKey(WT_CURSOR *cursor, RecordId id) const =0
bool yieldAndAwaitOplogDeletionRequest(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:1125
virtual const std::string & ns() const
Definition: record_store.h:295
void _changeNumRecords(OperationContext *opCtx, int64_t diff)
Adjusts the record count and data size metadata for this record store, respectively.
Definition: wiredtiger_record_store.cpp:1706
std::unique_ptr< RecordCursor > getRandomCursor(OperationContext *opCtx) const final
Constructs a cursor over a record store that returns documents in a randomized order,...
Definition: wiredtiger_record_store.cpp:1456
virtual Status insertRecords(OperationContext *opCtx, std::vector< Record > *records, std::vector< Timestamp > *timestamps, bool enforceQuota)
Definition: wiredtiger_record_store.cpp:1219
const uint64_t _tableId
Definition: wiredtiger_record_store.h:340
uint64_t tableId() const
Definition: wiredtiger_record_store.h:247
std::shared_ptr< WiredTigerSizeStorer::SizeInfo > _sizeInfo
Definition: wiredtiger_record_store.h:367
virtual Status updateRecord(OperationContext *opCtx, const RecordId &oldLocation, const char *data, int len, bool enforceQuota, UpdateNotifier *notifier)
Definition: wiredtiger_record_store.cpp:1377
virtual bool findRecord(OperationContext *opCtx, const RecordId &id, RecordData *out) const
Definition: wiredtiger_record_store.cpp:825
virtual RecordId getKey(WT_CURSOR *cursor) const
Definition: wiredtiger_record_store.cpp:2032
std::string engineName
Definition: wiredtiger_record_store.h:107
virtual long long numRecords(OperationContext *opCtx) const
Total number of record in the RecordStore.
Definition: wiredtiger_record_store.cpp:760
const std::string kWiredTigerEngineName
Definition: wiredtiger_record_store.cpp:95
Definition: wiredtiger_record_store.h:104
boost::optional< Record > next()
Moves forward and returns the new data or boost::none if there is no more data.
Definition: wiredtiger_record_store.cpp:1873
boost::optional< WiredTigerCursor > _cursor
Definition: wiredtiger_record_store.h:462
WiredTigerRecordStoreCursorBase(OperationContext *opCtx, const WiredTigerRecordStore &rs, bool forward)
Definition: wiredtiger_record_store.cpp:1866
void saveUnpositioned()
Prepares for state changes in underlying data without necessarily saving the current state.
Definition: wiredtiger_record_store.cpp:1950
virtual Status insertRecordsWithDocWriter(OperationContext *opCtx, const DocWriter *const *docs, const Timestamp *timestamps, size_t nDocs, RecordId *idsOut)
Inserts nDocs documents into this RecordStore using the DocWriter interface.
Definition: wiredtiger_record_store.cpp:1335
virtual RecordId getKey(WT_CURSOR *cursor) const =0
int _cappedDeleteCheckCount
Definition: wiredtiger_record_store.h:361
boost::optional< Record > seekExact(const RecordId &id)
Seeks to a Record with the provided id.
Definition: wiredtiger_record_store.cpp:1918
Adds explicit seeking of records.
Definition: record_store.h:236
virtual int64_t storageSize(OperationContext *opCtx, BSONObjBuilder *extraInfo=NULL, int infoLevel=0) const
Definition: wiredtiger_record_store.cpp:778
virtual RecordId getKey(WT_CURSOR *cursor) const =0
virtual bool hasWrongPrefix(WT_CURSOR *cursor, RecordId *id) const override
Callers must have already checked the return value of a positioning method against 'WT_NOTFOUND'.
Definition: wiredtiger_record_store.cpp:2149
WiredTigerSizeStorer * _sizeStorer
Definition: wiredtiger_record_store.h:366
virtual Status validate(OperationContext *opCtx, ValidateCmdLevel level, ValidateAdaptor *adaptor, ValidateResults *results, BSONObjBuilder *output)
Definition: wiredtiger_record_store.cpp:1507
const bool _isEphemeral
Definition: wiredtiger_record_store.h:347
Definition: collection.h:97
A KVPrefix may be prepended to the keys of entries in an underlying KV store.
Definition: kv_prefix.h:44
virtual std::unique_ptr< RecordCursor > getRandomCursorWithOptions(OperationContext *opCtx, StringData extraConfig) const override
Definition: wiredtiger_record_store.cpp:2113
static StatusWith< std::string > generateCreateString(const std::string &engineName, StringData ns, const CollectionOptions &options, StringData extraStrings, bool prefixed)
Creates a configuration string suitable for 'config' parameter in WT_SESSION::create().
Definition: wiredtiger_record_store.cpp:552
int64_t cappedMaxDocs() const
Definition: wiredtiger_record_store.cpp:768
bool isCapped
Definition: wiredtiger_record_store.h:108
virtual void appendCustomStats(OperationContext *opCtx, BSONObjBuilder *result, double scale) const
Definition: wiredtiger_record_store.cpp:1575
virtual bool isCapped() const
Definition: wiredtiger_record_store.cpp:764
static WiredTigerRecoveryUnit * _getRecoveryUnit(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:1688
virtual Status compact(OperationContext *opCtx, RecordStoreCompactAdaptor *adaptor, const CompactOptions *options, CompactStats *stats)
Attempt to reduce the storage space used by this RecordStore.
Definition: wiredtiger_record_store.cpp:1491
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
void _setId(RecordId id)
const bool _forward
Definition: wiredtiger_record_store.h:460
int64_t cappedMaxSize
Definition: wiredtiger_record_store.h:110
virtual KVPrefix getPrefix() const
Definition: wiredtiger_record_store.h:406
StringData ns
Definition: wiredtiger_record_store.h:105
WiredTigerSizeStorer * sizeStorer
Definition: wiredtiger_record_store.h:113
bool _shuttingDown
Definition: wiredtiger_record_store.h:357
virtual void initCursorToBeginning()
Called when restoring a cursor that has not been advanced.
Definition: wiredtiger_record_store.h:490
virtual Status truncate(OperationContext *opCtx)
removes all Records
Definition: wiredtiger_record_store.cpp:1469
Definition: wiredtiger_recovery_unit.h:52
RecordData _getData(const WiredTigerCursor &cursor) const
Definition: wiredtiger_record_store.cpp:804
virtual std::unique_ptr< SeekableRecordCursor > getCursor(OperationContext *opCtx, bool forward) const override
Returns a new cursor over this record store.
Definition: wiredtiger_record_store.cpp:2095
virtual bool compactSupported() const
does this RecordStore support the compact operation?
Definition: wiredtiger_record_store.h:185
std::string uri
Definition: wiredtiger_record_store.h:106
RecordId _nextId()
Definition: wiredtiger_record_store.cpp:1681