37 #include <wiredtiger.h> 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" 57 #define WT_OP_CHECK(x) (((MONGO_FAIL_POINT(WTWriteConflictException))) ? (WT_ROLLBACK) : (x)) 62 #define WT_READ_CHECK(x) \ 63 (((MONGO_FAIL_POINT(WTWriteConflictExceptionForReads))) ? (WT_ROLLBACK) : (x)) 68 class WiredTigerSessionCache;
69 class WiredTigerSizeStorer;
101 StringData extraStrings,
124 virtual const char*
name()
const;
133 BSONObjBuilder* extraInfo = NULL,
134 int infoLevel = 0)
const;
145 std::vector<Record>* records,
146 std::vector<Timestamp>* timestamps,
150 OperationContext*
opCtx,
const char*
data,
int len, Timestamp timestamp,
bool enforceQuota);
154 const Timestamp* timestamps,
159 const RecordId& oldLocation,
170 const char* damageSource,
171 const mutablebson::DamageVector& damages);
173 virtual std::unique_ptr<SeekableRecordCursor>
getCursor(OperationContext*
opCtx,
174 bool forward)
const = 0;
179 OperationContext*
opCtx, StringData extraConfig)
const = 0;
181 std::vector<std::unique_ptr<RecordCursor>>
getManyCursors(OperationContext*
opCtx)
const final;
205 BSONObjBuilder* output);
208 BSONObjBuilder* result,
211 virtual Status touch(OperationContext* opCtx, BSONObjBuilder* output)
const;
215 virtual boost::optional<RecordId>
oplogStartHack(OperationContext* opCtx,
216 const RecordId& startingPosition)
const;
219 const Timestamp& opTime,
260 void reclaimOplog(OperationContext* opCtx, Timestamp persistedTimestamp);
281 virtual RecordId
getKey(WT_CURSOR* cursor)
const = 0;
283 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const = 0;
295 const Timestamp* timestamps,
310 const RecordId& firstKey,
311 bool forTruncate)
const;
362 std::shared_ptr<WiredTigerSizeStorer::SizeInfo>
_sizeInfo;
373 OperationContext*
opCtx,
376 virtual std::unique_ptr<SeekableRecordCursor>
getCursor(OperationContext* opCtx,
377 bool forward)
const override;
380 OperationContext* opCtx, StringData extraConfig)
const override;
383 virtual RecordId
getKey(WT_CURSOR* cursor)
const;
385 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const;
391 OperationContext*
opCtx,
395 virtual std::unique_ptr<SeekableRecordCursor>
getCursor(OperationContext* opCtx,
396 bool forward)
const override;
399 OperationContext* opCtx, StringData extraConfig)
const override;
406 virtual RecordId
getKey(WT_CURSOR* cursor)
const;
408 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const;
420 boost::optional<Record> next();
422 boost::optional<Record> seekExact(
const RecordId&
id);
426 void saveUnpositioned();
430 void detachFromOperationContext();
432 void reattachToOperationContext(OperationContext* opCtx);
435 virtual RecordId
getKey(WT_CURSOR* cursor)
const = 0;
437 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const = 0;
446 virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId*
id)
const = 0;
451 virtual void initCursorToBeginning() = 0;
456 bool _skipNextAdvance =
false;
462 bool isVisible(
const RecordId&
id);
469 bool forward =
true);
472 virtual RecordId
getKey(WT_CURSOR* cursor)
const override;
474 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const override;
483 virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId*
id)
const override;
493 bool forward =
true);
496 virtual RecordId
getKey(WT_CURSOR* cursor)
const override;
498 virtual void setKey(WT_CURSOR* cursor, RecordId
id)
const override;
507 virtual bool hasWrongPrefix(WT_CURSOR* cursor, RecordId*
id)
const override;
509 virtual void initCursorToBeginning()
override;
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 'end' 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 'loc' in-place using the deltas described by 'damages'.
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'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 'config' 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
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