31 #include "mongo/stdx/unordered_set.h" 32 #include "mongo/util/concurrency/spin_lock.h" 41 class MmapV1RecordHeader;
42 class OperationContext;
60 virtual long long dataSize()
const = 0;
64 long long dataSizeIncrement,
65 long long numRecordsIncrement) = 0;
147 typedef stdx::unordered_set<SavedCursor*>
170 bool isSystemIndexes);
186 BSONObjBuilder* extraInfo = NULL,
187 int level = 0)
const;
196 OperationContext*
opCtx,
const char*
data,
int len, Timestamp,
bool enforceQuota);
202 RecordId* idsOut)
final;
205 const RecordId& oldLocation,
216 const char* damageSource,
217 const mutablebson::DamageVector& damages);
227 BSONObjBuilder* output);
230 BSONObjBuilder* result,
233 virtual Status touch(OperationContext*
opCtx, BSONObjBuilder* output)
const;
258 static int bucket(
int size);
278 int lengthWithHeaders,
279 bool enforceQuota) = 0;
338 boost::optional<Record>
next() final;
void registerCursor(SavedCursor *cursor)
Adds given saved cursor to SavedCursorRegistry.
Definition: record_store_v1_base.cpp:102
Status insertRecordsWithDocWriter(OperationContext *opCtx, const DocWriter *const *docs, const Timestamp *, size_t nDocs, RecordId *idsOut) final
Inserts nDocs documents into this RecordStore using the DocWriter interface.
Definition: record_store_v1_base.cpp:302
virtual std::unique_ptr< RecordCursor > getCursorForRepair(OperationContext *opCtx) const
Constructs a cursor over a potentially corrupted store, which can be used to salvage damaged records.
Definition: record_store_v1_base.cpp:497
ValidateCmdLevel
Definition: record_store.h:93
StatusWith< RecordId > _insertRecord(OperationContext *opCtx, const char *data, int len, bool enforceQuota)
internal doesn't check inputs or change padding
Definition: record_store_v1_base.cpp:356
virtual ~RecordStoreV1Base()
Definition: record_store_v1_base.cpp:140
stdx::unordered_set< SavedCursor * > SavedCursorSet
Definition: record_store_v1_base.h:148
IntraExtentIterator(OperationContext *opCtx, DiskLoc start, const RecordStoreV1Base *rs, bool forward=true)
Definition: record_store_v1_base.h:332
DiskLoc _curr
Definition: record_store_v1_base.h:360
Definition: record_store.h:673
~SavedCursorRegistry()
Definition: record_store_v1_base.cpp:96
DiskLoc getNextRecord(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:216
virtual Status updateRecord(OperationContext *opCtx, const RecordId &oldLocation, const char *data, int len, bool enforceQuota, UpdateNotifier *notifier)
Definition: record_store_v1_base.cpp:382
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
virtual long long numRecords(OperationContext *opCtx) const
Total number of record in the RecordStore.
Definition: record_store_v1_base.h:181
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: record_store_v1_base.h:262
DiskLoc loc
Definition: record_store_v1_base.h:118
virtual const MmapV1RecordHeader * recordFor(const DiskLoc &loc) const
Definition: record_store_v1_base.h:353
virtual Status validate(OperationContext *opCtx, ValidateCmdLevel level, ValidateAdaptor *adaptor, ValidateResults *results, BSONObjBuilder *output)
Definition: record_store_v1_base.cpp:554
Definition: record_store_v1_base.h:152
bool unregisterCursor(SavedCursor *cursor)
Removes given saved cursor.
Definition: record_store_v1_base.cpp:109
const std::string & getIdent() const override
Definition: record_store_v1_base.h:174
void _addRecordToRecListInExtent(OperationContext *opCtx, MmapV1RecordHeader *r, DiskLoc loc)
add a record to the end of the linked list chain within this extent.
Definition: record_store_v1_base.cpp:501
A replacement for the Record class.
Definition: record_data.h:43
void invalidate(OperationContext *opCtx, const RecordId &dl) final
Inform the cursor that this id is being invalidated.
Definition: record_store_v1_base.cpp:915
virtual StatusWith< RecordData > updateWithDamages(OperationContext *opCtx, const RecordId &loc, 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: record_store_v1_base.cpp:412
virtual int64_t storageSize(OperationContext *opCtx, BSONObjBuilder *extraInfo=NULL, int level=0) const
Definition: record_store_v1_base.cpp:143
void save() final
Prepares for state changes in underlying data in a way that allows the cursor's current position to b...
Definition: record_store_v1_base.h:340
DiskLoc _getPrevRecordInExtent(OperationContext *opCtx, const DiskLoc &loc) const
void invalidateCursorsForBucket(DiskLoc bucket)
When a btree-bucket disappears due to merge/split or similar, this invalidates all cursors that point...
Definition: record_store_v1_base.cpp:120
DiskLoc getPrevRecord(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:236
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: record_store.h:78
represents a disk location/offset on disk in a database.
Definition: diskloc.h:53
static const int bucketSizes[]
Definition: record_store_v1_base.h:157
DiskLoc _getNextRecordInExtent(OperationContext *opCtx, const DiskLoc &loc) const
SavedCursorSet _cursors
Definition: record_store_v1_base.h:149
static bool isQuantized(int recordSize)
Definition: record_store_v1_base.cpp:941
ExtentManager * _extentManager
Definition: record_store_v1_base.h:319
Allows inserting a Record "in-place" without creating a copy ahead of time.
Definition: record_store.h:62
static const int MaxAllowedAllocation
Definition: record_store_v1_base.h:155
std::shared_ptr< void > data
Definition: ephemeral_for_test_record_store_test.cpp:74
std::unique_ptr< RecordStore > rs
Definition: kv_engine_test_timestamps.cpp:207
virtual StatusWith< DiskLoc > allocRecord(OperationContext *opCtx, int lengthWithHeaders, bool enforceQuota)=0
SpinLock _mutex
Definition: record_store_v1_base.h:146
Iterates over all records within a single extent.
Definition: record_store_v1_base.h:330
DiskLoc bucket
Definition: record_store_v1_base.h:116
The destructor ensures the cursor is unregistered when an exception is thrown.
Definition: record_store_v1_base.h:110
OperationContext Database StringData CollectionOptions bool const BSONObj &idIndex Status
Definition: database_impl.cpp:955
virtual MmapV1RecordHeader * recordFor(const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:192
const RecordStoreV1Base * _rs
Definition: record_store_v1_base.h:361
DiskLoc _findFirstSpot(OperationContext *opCtx, const DiskLoc &extDiskLoc, Extent *e)
finds the first suitable DiskLoc for data will return the DiskLoc of a newly created DeletedRecord
Definition: record_store_v1_base.cpp:256
DiskLoc _getExtentLocForRecord(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:210
SavedCursor()
Definition: record_store_v1_base.h:111
bool _isSystemIndexes
Definition: record_store_v1_base.h:320
Definition: index_key_validate.h:40
virtual bool isCapped() const =0
std::unique_ptr< RecordStoreV1MetaData > _details
Definition: record_store_v1_base.h:318
static int quantizeAllocationSpace(int minSize)
Quantize 'minSize' to the nearest allocation size.
Definition: record_store_v1_base.cpp:930
BSONObj key
Definition: record_store_v1_base.h:117
RecordStoreV1Base(StringData ns, RecordStoreV1MetaData *details, ExtentManager *em, bool isSystemIndexes)
Definition: record_store_v1_base.cpp:134
virtual RecordData dataFor(OperationContext *opCtx, const RecordId &loc) const
Get the RecordData at loc, which must exist.
Definition: record_store_v1_base.cpp:174
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: record_store_v1_base.h:178
This iterator will go over the collection twice - once going forward (first extent -> last extent) an...
Definition: record_store_v1_repair_iterator.h:43
OperationContext * _opCtx
Definition: record_store_v1_base.h:359
Retrieves Records from a RecordStore.
Definition: record_store.h:141
An abstraction used for storing documents in a collection or entries in an index.
Definition: record_store.h:282
DiskLoc bucket
Definition: btree_interface.cpp:336
void reattachToOperationContext(OperationContext *opCtx) final
Reattaches to the OperationContext and reacquires any storage-engine state.
Definition: record_store_v1_base.h:347
DiskLoc getNextRecordInExtent(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:278
bool isValid() const
Definition: diskloc.h:115
virtual const std::string & ns() const
Definition: record_store.h:295
bool _forward
Definition: record_store_v1_base.h:362
DiskLoc _getNextRecord(OperationContext *opCtx, const DiskLoc &loc) const
std::unique_ptr< RecordFetcher > fetcherForNext() const final
Returns a RecordFetcher if needed for a call to next() or none if unneeded.
Definition: record_store_v1_base.cpp:926
DiskLoc getExtentLocForRecord(OperationContext *opCtx, const DiskLoc &loc) const
void increaseStorageSize(OperationContext *opCtx, int size, bool enforceQuota)
Definition: record_store_v1_base.cpp:520
StatusWith< RecordId > insertRecord(OperationContext *opCtx, const char *data, int len, Timestamp, bool enforceQuota)
Definition: record_store_v1_base.cpp:343
Extent * _getExtent(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:206
virtual bool findRecord(OperationContext *opCtx, const RecordId &loc, RecordData *rd) const
Definition: record_store_v1_base.cpp:178
void advance()
Definition: record_store_v1_base.cpp:906
const RecordStoreV1MetaData * details() const
Definition: record_store_v1_base.h:235
ExtentManager basics.
Definition: extent_manager.h:64
const DeletedRecord * deletedRecordFor(const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:196
static int bucket(int size)
Definition: record_store_v1_base.cpp:948
virtual void appendCustomStats(OperationContext *opCtx, BSONObjBuilder *result, double scale) const
Definition: record_store_v1_base.cpp:831
SavedCursorRegistry savedCursors
Definition: record_store_v1_base.h:240
static const int Buckets
Definition: record_store_v1_base.h:154
DiskLoc getPrevRecordInExtent(OperationContext *opCtx, const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:290
virtual Status touch(OperationContext *opCtx, BSONObjBuilder *output) const
Load all data into cache.
Definition: record_store_v1_base.cpp:856
void waitForAllEarlierOplogWritesToBeVisible(OperationContext *opCtx) const override
Waits for all writes that completed before this call to be visible to forward scans.
Definition: record_store_v1_base.h:260
void detachFromOperationContext() final
Detaches from the OperationContext and releases any storage-engine state.
Definition: record_store_v1_base.h:344
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
void deleteRecord(OperationContext *opCtx, const RecordId &dl)
Definition: record_store_v1_base.cpp:434
Class that stores active cursors that have been saved (as part of yielding) to allow them to be inval...
Definition: record_store_v1_base.h:104
virtual bool updateWithDamagesSupported() const
Definition: record_store_v1_base.cpp:408
virtual DeletedRecord * drec(const DiskLoc &loc) const
Definition: record_store_v1_base.cpp:201
DiskLoc _getPrevRecord(OperationContext *opCtx, const DiskLoc &loc) const
virtual bool shouldPadInserts() const =0
boost::optional< Record > next() final
Moves forward and returns the new data or boost::none if there is no more data.
Definition: record_store_v1_base.cpp:898
virtual void addDeletedRec(OperationContext *opCtx, const DiskLoc &dloc)=0
bool restore() final
Recovers from potential state changes in underlying data.
Definition: record_store_v1_base.h:341
SavedCursorRegistry * _registry
Definition: record_store_v1_base.h:123
virtual ~SavedCursor()
Definition: record_store_v1_base.h:112