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;
87 virtual bool setUserFlag(OperationContext* opCtx,
int flag) = 0;
88 virtual bool clearUserFlag(OperationContext* opCtx,
int flag) = 0;
114 _registry->unregisterCursor(
this);
147 typedef stdx::unordered_set<SavedCursor*>
154 static const int Buckets = 26;
155 static const int MaxAllowedAllocation = 16 * 1024 * 1024 + 512 * 1024;
157 static const int bucketSizes[];
170 bool isSystemIndexes);
175 return _details->dataSize();
178 return _details->numRecords();
181 virtual int64_t storageSize(OperationContext*
opCtx,
182 BSONObjBuilder* extraInfo = NULL,
183 int level = 0)
const;
185 virtual RecordData dataFor(OperationContext* opCtx,
const RecordId& loc)
const;
187 virtual bool findRecord(OperationContext* opCtx,
const RecordId& loc,
RecordData* rd)
const;
189 void deleteRecord(OperationContext* opCtx,
const RecordId& dl);
192 OperationContext* opCtx,
const char*
data,
int len, Timestamp,
bool enforceQuota);
194 Status insertRecordsWithDocWriter(OperationContext* opCtx,
198 RecordId* idsOut)
final;
200 virtual Status updateRecord(OperationContext* opCtx,
201 const RecordId& oldLocation,
207 virtual bool updateWithDamagesSupported()
const;
212 const char* damageSource,
213 const mutablebson::DamageVector& damages);
215 virtual std::unique_ptr<RecordCursor> getCursorForRepair(OperationContext* opCtx)
const;
217 void increaseStorageSize(OperationContext* opCtx,
int size,
bool enforceQuota);
219 virtual Status validate(OperationContext* opCtx,
223 BSONObjBuilder* output);
225 virtual void appendCustomStats(OperationContext* opCtx,
226 BSONObjBuilder* result,
229 virtual Status touch(OperationContext* opCtx, BSONObjBuilder* output)
const;
232 return _details.get();
238 DiskLoc getExtentLocForRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
240 DiskLoc getNextRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
241 DiskLoc getPrevRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
243 DiskLoc getNextRecordInExtent(OperationContext* opCtx,
const DiskLoc& loc)
const;
244 DiskLoc getPrevRecordInExtent(OperationContext* opCtx,
const DiskLoc& loc)
const;
249 static int quantizeAllocationSpace(
int minSize);
251 static bool isQuantized(
int recordSize);
254 static int bucket(
int size);
271 virtual bool shouldPadInserts()
const = 0;
274 int lengthWithHeaders,
275 bool enforceQuota) = 0;
278 virtual void addDeletedRec(OperationContext* opCtx,
const DiskLoc& dloc) = 0;
284 Extent* _getExtent(OperationContext* opCtx,
const DiskLoc& loc)
const;
286 DiskLoc _getExtentLocForRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
288 DiskLoc _getNextRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
289 DiskLoc _getPrevRecord(OperationContext* opCtx,
const DiskLoc& loc)
const;
291 DiskLoc _getNextRecordInExtent(OperationContext* opCtx,
const DiskLoc& loc)
const;
292 DiskLoc _getPrevRecordInExtent(OperationContext* opCtx,
const DiskLoc& loc)
const;
334 boost::optional<Record> next()
final;
335 void invalidate(OperationContext*
opCtx,
const RecordId& dl)
final;
346 std::unique_ptr<RecordFetcher> fetcherForNext()
const final;
350 return _rs->recordFor(loc);
std::unique_ptr< RecordStore > _rs
Definition: kv_catalog_feature_tracker_test.cpp:102
ValidateCmdLevel
Definition: record_store.h:93
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:328
DiskLoc _curr
Definition: record_store_v1_base.h:356
Collection *const OperationContext *const const StringData OptionalCollectionUUID CollectionCatalogEntry *const details
Definition: collection_impl.cpp:80
Definition: record_store.h:671
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
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:177
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:258
DiskLoc loc
Definition: record_store_v1_base.h:118
virtual const MmapV1RecordHeader * recordFor(const DiskLoc &loc) const
Definition: record_store_v1_base.h:349
Definition: record_store_v1_base.h:152
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
A replacement for the Record class.
Definition: record_data.h:43
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:336
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
const bool _forward
Definition: ephemeral_for_test_btree_impl.cpp:449
Definition: record_store.h:78
represents a disk location/offset on disk in a database.
Definition: diskloc.h:53
SavedCursorSet _cursors
Definition: record_store_v1_base.h:149
ExtentManager * _extentManager
Definition: record_store_v1_base.h:315
Allows inserting a Record "in-place" without creating a copy ahead of time.
Definition: record_store.h:62
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
SpinLock _mutex
Definition: record_store_v1_base.h:146
Iterates over all records within a single extent.
Definition: record_store_v1_base.h:326
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
const RecordStoreV1Base * _rs
Definition: record_store_v1_base.h:357
SavedCursor()
Definition: record_store_v1_base.h:111
bool _isSystemIndexes
Definition: record_store_v1_base.h:316
Definition: index_key_validate.h:40
std::unique_ptr< RecordStoreV1MetaData > _details
Definition: record_store_v1_base.h:314
BSONObj key
Definition: record_store_v1_base.h:117
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:174
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:355
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:343
bool isValid() const
Definition: diskloc.h:115
bool _forward
Definition: record_store_v1_base.h:358
const RecordStoreV1MetaData * details() const
Definition: record_store_v1_base.h:231
ExtentManager basics.
Definition: extent_manager.h:64
SavedCursorRegistry savedCursors
Definition: record_store_v1_base.h:236
OperationContext * _opCtx
Definition: ephemeral_for_test_btree_impl.cpp:447
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:256
void detachFromOperationContext() final
Detaches from the OperationContext and releases any storage-engine state.
Definition: record_store_v1_base.h:340
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
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
bool restore() final
Recovers from potential state changes in underlying data.
Definition: record_store_v1_base.h:337
SavedCursorRegistry * _registry
Definition: record_store_v1_base.h:123
virtual ~SavedCursor()
Definition: record_store_v1_base.h:112