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:
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  uint64_t tableId() const {
243  return _tableId;
244  }
245 
247  _sizeStorer = ss;
248  }
249 
250  bool isOpHidden_forTest(const RecordId& id) const;
251 
252  bool inShutdown() const;
253 
254  void reclaimOplog(OperationContext* opCtx);
255 
260  void reclaimOplog(OperationContext* opCtx, Timestamp persistedTimestamp);
261 
262  int64_t cappedDeleteAsNeeded(OperationContext* opCtx, const RecordId& justInserted);
263 
264  int64_t cappedDeleteAsNeeded_inlock(OperationContext* opCtx, const RecordId& justInserted);
265 
266  // Returns false if the oplog was dropped while waiting for a deletion request.
267  bool yieldAndAwaitOplogDeletionRequest(OperationContext* opCtx);
268 
269  bool haveCappedWaiters();
270 
272 
273  class OplogStones;
274 
275  // Exposed only for testing.
277  return _oplogStones.get();
278  };
279 
280 protected:
281  virtual RecordId getKey(WT_CURSOR* cursor) const = 0;
282 
283  virtual void setKey(WT_CURSOR* cursor, RecordId id) const = 0;
284 
285 private:
286  class RandomCursor;
287 
288  class NumRecordsChange;
289  class DataSizeChange;
290 
291  static WiredTigerRecoveryUnit* _getRecoveryUnit(OperationContext* opCtx);
292 
293  Status _insertRecords(OperationContext* opCtx,
294  Record* records,
295  const Timestamp* timestamps,
296  size_t nRecords);
297 
298  RecordId _nextId();
299  void _setId(RecordId id);
300  bool cappedAndNeedDelete() const;
301  RecordData _getData(const WiredTigerCursor& cursor) const;
302 
308  void _positionAtFirstRecordId(OperationContext* opCtx,
309  WT_CURSOR* cursor,
310  const RecordId& firstKey,
311  bool forTruncate) const;
312 
330  void _changeNumRecords(OperationContext* opCtx, int64_t diff);
331  void _increaseDataSize(OperationContext* opCtx, int64_t amount);
332 
333 
334  const std::string _uri;
335  const uint64_t _tableId; // not persisted
336 
337  // Canonical engine name to use for retrieving options
338  const std::string _engineName;
339  // The capped settings should not be updated once operations have started
340  const bool _isCapped;
341  // True if the storage engine is an in-memory storage engine
342  const bool _isEphemeral;
343  // True if the namespace of this record store starts with "local.oplog.", and false otherwise.
344  const bool _isOplog;
345  int64_t _cappedMaxSize;
346  const int64_t _cappedMaxSizeSlack; // when to start applying backpressure
347  const int64_t _cappedMaxDocs;
349  AtomicInt64 _cappedSleep;
350  AtomicInt64 _cappedSleepMS;
353  mutable stdx::mutex _cappedCallbackMutex; // guards _cappedCallback and _shuttingDown
354 
355  // See comment in ::cappedDeleteAsNeeded
357  mutable stdx::timed_mutex _cappedDeleterMutex;
358 
359  AtomicInt64 _nextIdNum;
360 
361  WiredTigerSizeStorer* _sizeStorer; // not owned, can be NULL
362  std::shared_ptr<WiredTigerSizeStorer::SizeInfo> _sizeInfo;
364 
365  // Non-null if this record store is underlying the active oplog.
366  std::shared_ptr<OplogStones> _oplogStones;
367 };
368 
369 
371 public:
373  OperationContext* opCtx,
374  Params params);
375 
376  virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
377  bool forward) const override;
378 
379  virtual std::unique_ptr<RecordCursor> getRandomCursorWithOptions(
380  OperationContext* opCtx, StringData extraConfig) const override;
381 
382 protected:
383  virtual RecordId getKey(WT_CURSOR* cursor) const;
384 
385  virtual void setKey(WT_CURSOR* cursor, RecordId id) const;
386 };
387 
389 public:
391  OperationContext* opCtx,
392  Params params,
393  KVPrefix prefix);
394 
395  virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
396  bool forward) const override;
397 
398  virtual std::unique_ptr<RecordCursor> getRandomCursorWithOptions(
399  OperationContext* opCtx, StringData extraConfig) const override;
400 
401  virtual KVPrefix getPrefix() const {
402  return _prefix;
403  }
404 
405 protected:
406  virtual RecordId getKey(WT_CURSOR* cursor) const;
407 
408  virtual void setKey(WT_CURSOR* cursor, RecordId id) const;
409 
410 private:
412 };
413 
415 public:
416  WiredTigerRecordStoreCursorBase(OperationContext* opCtx,
417  const WiredTigerRecordStore& rs,
418  bool forward);
419 
420  boost::optional<Record> next();
421 
422  boost::optional<Record> seekExact(const RecordId& id);
423 
424  void save();
425 
426  void saveUnpositioned();
427 
428  bool restore();
429 
430  void detachFromOperationContext();
431 
432  void reattachToOperationContext(OperationContext* opCtx);
433 
434 protected:
435  virtual RecordId getKey(WT_CURSOR* cursor) const = 0;
436 
437  virtual void setKey(WT_CURSOR* cursor, RecordId id) const = 0;
438 
446  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const = 0;
447 
451  virtual void initCursorToBeginning() = 0;
452 
454  OperationContext* _opCtx;
455  const bool _forward;
456  bool _skipNextAdvance = false;
457  boost::optional<WiredTigerCursor> _cursor;
458  bool _eof = false;
459  RecordId _lastReturnedId; // If null, need to seek to first/last record.
460 
461 private:
462  bool isVisible(const RecordId& id);
463 };
464 
466 public:
467  WiredTigerRecordStoreStandardCursor(OperationContext* opCtx,
468  const WiredTigerRecordStore& rs,
469  bool forward = true);
470 
471 protected:
472  virtual RecordId getKey(WT_CURSOR* cursor) const override;
473 
474  virtual void setKey(WT_CURSOR* cursor, RecordId id) const override;
475 
483  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const override;
484 
485  virtual void initCursorToBeginning(){};
486 };
487 
489 public:
490  WiredTigerRecordStorePrefixedCursor(OperationContext* opCtx,
491  const WiredTigerRecordStore& rs,
492  KVPrefix prefix,
493  bool forward = true);
494 
495 protected:
496  virtual RecordId getKey(WT_CURSOR* cursor) const override;
497 
498  virtual void setKey(WT_CURSOR* cursor, RecordId id) const override;
499 
507  virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId* id) const override;
508 
509  virtual void initCursorToBeginning() override;
510 
511 private:
513 };
514 
515 
516 // WT failpoint to throw write conflict exceptions randomly
517 MONGO_FAIL_POINT_DECLARE(WTWriteConflictException);
518 MONGO_FAIL_POINT_DECLARE(WTWriteConflictExceptionForReads);
519 
520 // Prevents oplog writes from being considered durable on the primary. Once activated, new writes
521 // will not be considered durable until deactivated. It is unspecified whether writes that commit
522 // before activation will become visible while active.
523 MONGO_FAIL_POINT_DECLARE(WTPausePrimaryOplogDurabilityLoop);
524 }
Definition: record_store.h:663
int64_t _cappedMaxSize
Definition: wiredtiger_record_store.h:345
void setCappedCallback(CappedCallback *cb)
Definition: wiredtiger_record_store.h:231
int64_t cappedDeleteAsNeeded_inlock(OperationContext *opCtx, const RecordId &justInserted)
Definition: wiredtiger_record_store.cpp:961
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:763
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:1140
const int64_t _cappedMaxDocs
Definition: wiredtiger_record_store.h:347
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
KVPrefix _prefix
Definition: wiredtiger_index.cpp:1144
virtual void cappedTruncateAfter(OperationContext *opCtx, RecordId end, bool inclusive)
Truncate documents newer than the document at &#39;end&#39; from the capped collection.
Definition: wiredtiger_record_store.cpp:1728
virtual StatusWith< RecordId > insertRecord(OperationContext *opCtx, const char *data, int len, Timestamp timestamp, bool enforceQuota)
Definition: wiredtiger_record_store.cpp:1293
void notifyCappedWaitersIfNeeded()
Definition: wiredtiger_record_store.cpp:1314
Definition: wiredtiger_record_store.h:73
virtual ~WiredTigerRecordStore()
Definition: wiredtiger_record_store.cpp:684
CappedCallback * _cappedCallback
Definition: wiredtiger_record_store.h:351
Definition: record_store.h:671
Definition: wiredtiger_record_store.h:488
void setSizeStorer(WiredTigerSizeStorer *ss)
Definition: wiredtiger_record_store.h:246
const bool _isOplog
Definition: wiredtiger_record_store.h:344
virtual std::unique_ptr< SeekableRecordCursor > getCursor(OperationContext *opCtx, bool forward) const =0
Returns a new cursor over this record store.
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
bool _eof
Definition: wiredtiger_index.cpp:1133
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:1628
virtual void deleteRecord(OperationContext *opCtx, const RecordId &id)
Definition: wiredtiger_record_store.cpp:850
friend class PrefixedWiredTigerRecordStore
Definition: wiredtiger_record_store.h:77
AtomicInt64 _cappedSleepMS
Definition: wiredtiger_record_store.h:350
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:1213
const std::string _engineName
Definition: wiredtiger_record_store.h:338
friend class StandardWiredTigerRecordStore
Definition: wiredtiger_record_store.h:76
const std::string _uri
Definition: wiredtiger_record_store.h:334
virtual bool isInRecordIdOrder() const override
Does the RecordStore cursor retrieve its document in RecordId Order?
Definition: wiredtiger_record_store.h:197
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
const WiredTigerRecordStore & _rs
Definition: wiredtiger_record_store.h:453
A replacement for the Record class.
Definition: record_data.h:43
Definition: wiredtiger_record_store.h:388
MONGO_FAIL_POINT_DECLARE(WTPrepareConflictForReads)
bool cappedAndNeedDelete() const
Definition: wiredtiger_record_store.cpp:877
OplogStones * oplogStones()
Definition: wiredtiger_record_store.h:276
virtual bool updateWithDamagesSupported() const
Definition: wiredtiger_record_store.cpp:1403
AtomicInt64 _cappedSleep
Definition: wiredtiger_record_store.h:349
OperationContext * _opCtx
Definition: wiredtiger_record_store.h:454
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:685
Definition: wiredtiger_record_store.h:370
Definition: record_store.h:78
const bool _isCapped
Definition: wiredtiger_record_store.h:340
stdx::timed_mutex _cappedDeleterMutex
Definition: wiredtiger_record_store.h:357
CappedCallback * cappedCallback
Definition: wiredtiger_record_store.h:112
int64_t cappedDeleteAsNeeded(OperationContext *opCtx, const RecordId &justInserted)
Definition: wiredtiger_record_store.cpp:890
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:933
KVPrefix _prefix
Definition: wiredtiger_record_store.h:411
bool inShutdown() const
Definition: wiredtiger_record_store.cpp:758
bool inclusive
Definition: btree_interface.cpp:335
friend class WiredTigerRecordStoreCursorBase
Definition: wiredtiger_record_store.h:74
Definition: collection.h:77
Allows inserting a Record "in-place" without creating a copy ahead of time.
Definition: record_store.h:62
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:1609
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:818
Definition: wiredtiger_record_store.h:414
void _increaseDataSize(OperationContext *opCtx, int64_t amount)
Definition: wiredtiger_record_store.cpp:1713
The data items stored in a RecordStore.
Definition: record_store.h:88
Definition: wiredtiger_kv_engine.h:65
std::unique_ptr< RecordStore > rs
Definition: kv_engine_test_timestamps.cpp:207
WiredTigerKVEngine * _kvEngine
Definition: wiredtiger_record_store.h:363
bool isReadOnly
Definition: wiredtiger_record_store.h:114
std::shared_ptr< OplogStones > _oplogStones
Definition: wiredtiger_record_store.h:366
bool isOpHidden_forTest(const RecordId &id) const
Definition: wiredtiger_record_store.cpp:1302
Definition: wiredtiger_record_store.h:465
Definition: wiredtiger_record_store_oplog_stones.h:46
virtual const char * name() const
Definition: wiredtiger_record_store.cpp:754
RecordId _lastReturnedId
Definition: wiredtiger_record_store.h:459
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 &#39;loc&#39; in-place using the deltas described by &#39;damages&#39;.
Definition: wiredtiger_record_store.cpp:1407
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:1654
AtomicInt64 _nextIdNum
Definition: wiredtiger_record_store.h:359
Status updateCappedSize(OperationContext *opCtx, long long cappedSize) final
used to support online change oplog size.
Definition: wiredtiger_record_store.cpp:2200
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:1617
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:1832
virtual void postConstructorInit(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:702
KVPrefix _prefix
Definition: wiredtiger_record_store.h:512
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:1449
const int64_t _cappedMaxSizeSlack
Definition: wiredtiger_record_store.h:346
stdx::mutex _cappedCallbackMutex
Definition: wiredtiger_record_store.h:353
bool haveCappedWaiters()
Definition: wiredtiger_record_store.cpp:1309
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:348
bool yieldAndAwaitOplogDeletionRequest(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:1112
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:1690
std::unique_ptr< RecordCursor > getRandomCursor(OperationContext *opCtx) const final
Constructs a cursor over a record store that returns documents in a randomized order, and allows storage engines to provide a more efficient way of random sampling of a record store than MongoDB&#39;s default sampling methods, which is used when this method returns {}.
Definition: wiredtiger_record_store.cpp:1443
Definition: wiredtiger_record_store.cpp:477
virtual Status insertRecords(OperationContext *opCtx, std::vector< Record > *records, std::vector< Timestamp > *timestamps, bool enforceQuota)
Definition: wiredtiger_record_store.cpp:1206
const uint64_t _tableId
Definition: wiredtiger_record_store.h:335
uint64_t tableId() const
Definition: wiredtiger_record_store.h:242
std::shared_ptr< WiredTigerSizeStorer::SizeInfo > _sizeInfo
Definition: wiredtiger_record_store.h:362
virtual Status updateRecord(OperationContext *opCtx, const RecordId &oldLocation, const char *data, int len, bool enforceQuota, UpdateNotifier *notifier)
Definition: wiredtiger_record_store.cpp:1364
virtual bool findRecord(OperationContext *opCtx, const RecordId &id, RecordData *out) const
Definition: wiredtiger_record_store.cpp:832
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:767
const std::string kWiredTigerEngineName
Definition: wiredtiger_record_store.cpp:95
Definition: wiredtiger_record_store.cpp:1700
Definition: wiredtiger_record_store.h:104
boost::optional< WiredTigerCursor > _cursor
Definition: wiredtiger_record_store.h:457
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:1322
virtual RecordId getKey(WT_CURSOR *cursor) const =0
int _cappedDeleteCheckCount
Definition: wiredtiger_record_store.h:356
Adds explicit seeking of records.
Definition: record_store.h:236
OperationContext Database StringData BSONObj options
Definition: database_impl.cpp:949
virtual int64_t storageSize(OperationContext *opCtx, BSONObjBuilder *extraInfo=NULL, int infoLevel=0) const
Definition: wiredtiger_record_store.cpp:785
WiredTigerSizeStorer * _sizeStorer
Definition: wiredtiger_record_store.h:361
virtual Status validate(OperationContext *opCtx, ValidateCmdLevel level, ValidateAdaptor *adaptor, ValidateResults *results, BSONObjBuilder *output)
Definition: wiredtiger_record_store.cpp:1494
const bool _isEphemeral
Definition: wiredtiger_record_store.h:342
Definition: collection.h:97
A KVPrefix may be prepended to the keys of entries in an underlying KV store.
Definition: kv_prefix.h:44
static StatusWith< std::string > generateCreateString(const std::string &engineName, StringData ns, const CollectionOptions &options, StringData extraStrings, bool prefixed)
Creates a configuration string suitable for &#39;config&#39; parameter in WT_SESSION::create().
Definition: wiredtiger_record_store.cpp:552
bool isCapped
Definition: wiredtiger_record_store.h:108
virtual void appendCustomStats(OperationContext *opCtx, BSONObjBuilder *result, double scale) const
Definition: wiredtiger_record_store.cpp:1562
Definition: wiredtiger_record_store.cpp:1676
static WiredTigerRecoveryUnit * _getRecoveryUnit(OperationContext *opCtx)
Definition: wiredtiger_record_store.cpp:1672
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:1478
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
void _setId(RecordId id)
const bool _forward
Definition: wiredtiger_record_store.h:455
int64_t cappedMaxSize
Definition: wiredtiger_record_store.h:110
virtual KVPrefix getPrefix() const
Definition: wiredtiger_record_store.h:401
StringData ns
Definition: wiredtiger_record_store.h:105
WiredTigerSizeStorer * sizeStorer
Definition: wiredtiger_record_store.h:113
bool _shuttingDown
Definition: wiredtiger_record_store.h:352
virtual void initCursorToBeginning()
Called when restoring a cursor that has not been advanced.
Definition: wiredtiger_record_store.h:485
virtual Status truncate(OperationContext *opCtx)
removes all Records
Definition: wiredtiger_record_store.cpp:1456
Definition: wiredtiger_recovery_unit.h:52
RecordData _getData(const WiredTigerCursor &cursor) const
Definition: wiredtiger_record_store.cpp:811
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:1665