33 #include <boost/optional.hpp> 35 #include "mongo/base/owned_pointer_vector.h" 36 #include "mongo/bson/mutable/damage_vector.h" 37 #include "mongo/db/exec/collection_scan_common.h" 38 #include "mongo/db/record_id.h" 46 struct CompactOptions;
49 class NamespaceDetails;
50 class OperationContext;
53 class RecordStoreCompactAdaptor;
56 struct ValidateResults;
57 class ValidateAdaptor;
81 virtual Status recordStoreGoingToUpdateInPlace(OperationContext*
opCtx,
82 const RecordId& loc) = 0;
149 virtual boost::optional<Record> next() = 0;
162 virtual void save() = 0;
177 virtual bool restore() = 0;
186 virtual void detachFromOperationContext() = 0;
194 virtual void reattachToOperationContext(OperationContext*
opCtx) = 0;
203 virtual void invalidate(OperationContext* opCtx,
const RecordId&
id) {}
244 virtual boost::optional<Record> seekExact(
const RecordId&
id) = 0;
263 virtual std::unique_ptr<RecordFetcher>
fetcherForId(
const RecordId&
id)
const {
293 virtual const char*
name()
const = 0;
295 virtual const std::string&
ns()
const {
303 virtual long long dataSize(OperationContext*
opCtx)
const = 0;
309 virtual long long numRecords(OperationContext* opCtx)
const = 0;
311 virtual bool isCapped()
const = 0;
322 virtual int64_t storageSize(OperationContext* opCtx,
323 BSONObjBuilder* extraInfo = NULL,
324 int infoLevel = 0)
const = 0;
339 invariant(findRecord(opCtx, loc, &data));
358 auto cursor = getCursor(opCtx);
359 auto record = cursor->seekExact(loc);
363 record->data.makeOwned();
364 *out = std::move(record->data);
368 virtual void deleteRecord(OperationContext* opCtx,
const RecordId& dl) = 0;
374 bool enforceQuota) = 0;
377 std::vector<Record>* records,
378 std::vector<Timestamp>* timestamps,
381 for (
auto& record : *records) {
385 (*timestamps)[index++],
388 return res.getStatus();
390 record.id = res.getValue();
404 virtual Status insertRecordsWithDocWriter(OperationContext* opCtx,
406 const Timestamp* timestamps,
408 RecordId* idsOut =
nullptr) = 0;
415 Timestamp timestamp) {
417 Status status = insertRecordsWithDocWriter(opCtx, &doc, ×tamp, 1, &out);
435 virtual Status updateRecord(OperationContext* opCtx,
436 const RecordId& oldLocation,
449 virtual bool updateWithDamagesSupported()
const = 0;
462 const char* damageSource,
463 const mutablebson::DamageVector& damages) = 0;
473 virtual std::unique_ptr<SeekableRecordCursor> getCursor(OperationContext* opCtx,
474 bool forward =
true)
const = 0;
496 virtual std::unique_ptr<RecordCursor>
getRandomCursor(OperationContext* opCtx)
const {
505 OperationContext* opCtx)
const {
506 std::vector<std::unique_ptr<RecordCursor>> out(1);
507 out[0] = getCursor(opCtx);
517 virtual Status truncate(OperationContext* opCtx) = 0;
525 virtual void cappedTruncateAfter(OperationContext* opCtx, RecordId end,
bool inclusive) = 0;
576 virtual Status validate(OperationContext* opCtx,
580 BSONObjBuilder* output) = 0;
586 virtual void appendCustomStats(OperationContext* opCtx,
587 BSONObjBuilder* result,
588 double scale)
const = 0;
599 virtual Status touch(OperationContext* opCtx, BSONObjBuilder* output)
const {
600 return Status(ErrorCodes::CommandNotSupported,
601 "this storage engine does not support touch");
612 const RecordId& startingPosition)
const {
630 const Timestamp& opTime,
631 bool orderedCommit) {
642 virtual void waitForAllEarlierOplogWritesToBeVisible(OperationContext* opCtx)
const = 0;
647 virtual void updateStatsAfterRepair(OperationContext* opCtx,
648 long long numRecords,
649 long long dataSize) = 0;
655 return Status(ErrorCodes::CommandNotSupported,
656 "this storage engine does not support updateCappedSize");
666 virtual bool isDataValid(
const RecordData& recData) = 0;
667 virtual size_t dataSize(
const RecordData& recData) = 0;
668 virtual void inserted(
const RecordData& recData,
const RecordId& newLocation) = 0;
689 virtual Status validate(
const RecordId& recordId,
691 size_t* dataSize) = 0;
Definition: record_store.h:663
AtomicLockStats stats
Definition: lock_state.cpp:92
ValidateCmdLevel
Definition: record_store.h:93
Definition: record_store.h:94
virtual Status insertRecords(OperationContext *opCtx, std::vector< Record > *records, std::vector< Timestamp > *timestamps, bool enforceQuota)
Definition: record_store.h:376
virtual std::vector< std::unique_ptr< RecordCursor > > getManyCursors(OperationContext *opCtx) const
Returns many RecordCursors that partition the RecordStore into many disjoint sets.
Definition: record_store.h:504
Definition: record_store.h:671
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
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: record_store.h:629
virtual std::unique_ptr< RecordFetcher > fetcherForNext() const
Returns a RecordFetcher if needed for a call to next() or none if unneeded.
Definition: record_store.h:222
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
std::vector< std::string > errors
Definition: record_store.h:676
virtual bool compactsInPlace() const
Does compact() leave RecordIds alone or can they change.
Definition: record_store.h:541
virtual std::unique_ptr< RecordCursor > getRandomCursor(OperationContext *opCtx) const
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: record_store.h:496
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
StatusWith< RecordId > insertRecordWithDocWriter(OperationContext *opCtx, const DocWriter *doc, Timestamp timestamp)
A thin wrapper around insertRecordsWithDocWriter() to simplify handling of single DocWriters...
Definition: record_store.h:413
Definition: record_store.h:96
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: record_store.h:78
virtual bool compactSupported() const
does this RecordStore support the compact operation?
Definition: record_store.h:532
bool inclusive
Definition: btree_interface.cpp:335
virtual ~RecordStore()
Definition: record_store.h:288
virtual bool isInRecordIdOrder() const
Does the RecordStore cursor retrieve its document in RecordId Order?
Definition: record_store.h:567
Definition: collection.h:77
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
The data items stored in a RecordStore.
Definition: record_store.h:88
virtual void invalidate(OperationContext *opCtx, const RecordId &id)
Inform the cursor that this id is being invalidated.
Definition: record_store.h:203
Status status
Definition: database_impl.cpp:975
Definition: index_key_validate.h:40
virtual std::unique_ptr< RecordFetcher > fetcherForId(const RecordId &id) const
Returns a RecordFetcher if needed to fetch the provided Record or none if unneeded.
Definition: record_store.h:263
virtual void saveUnpositioned()
Prepares for state changes in underlying data without necessarily saving the current state...
Definition: record_store.h:256
RecordId id
Definition: record_store.h:89
Retrieves Records from a RecordStore.
Definition: record_store.h:141
virtual RecordData dataFor(OperationContext *opCtx, const RecordId &loc) const
Get the RecordData at loc, which must exist.
Definition: record_store.h:337
An abstraction used for storing documents in a collection or entries in an index. ...
Definition: record_store.h:282
When a capped collection is modified (delete/insert/etc) then certain notifications need to be made...
Definition: capped_callback.h:44
virtual const std::string & ns() const
Definition: record_store.h:295
virtual bool findRecord(OperationContext *opCtx, const RecordId &loc, RecordData *out) const
Definition: record_store.h:357
virtual ~ValidateAdaptor()
Definition: record_store.h:687
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: record_store.h:611
virtual ~RecordStoreCompactAdaptor()
Definition: record_store.h:665
virtual size_t documentSize() const =0
virtual void writeDocument(char *buf) const =0
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.h:481
NamespaceString _ns
Definition: wiredtiger_record_store_mongod.cpp:128
Adds explicit seeking of records.
Definition: record_store.h:236
OperationContext Database StringData BSONObj options
Definition: database_impl.cpp:949
virtual Status compact(OperationContext *opCtx, RecordStoreCompactAdaptor *adaptor, const CompactOptions *options, CompactStats *stats)
Attempt to reduce the storage space used by this RecordStore.
Definition: record_store.h:551
std::vector< std::string > warnings
Definition: record_store.h:677
Definition: collection.h:97
virtual Status touch(OperationContext *opCtx, BSONObjBuilder *output) const
Load all data into cache.
Definition: record_store.h:599
bool valid
Definition: record_store.h:675
RecordData data
Definition: record_store.h:90
virtual bool addPadding() const
Definition: record_store.h:66
virtual void setCappedCallback(CappedCallback *)
Definition: record_store.h:313
Database *const OperationContext *const const StringData name
Definition: database_impl.cpp:82
virtual Status updateCappedSize(OperationContext *opCtx, long long cappedSize)
used to support online change oplog size.
Definition: record_store.h:654
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
RecordStore(StringData ns)
Definition: record_store.h:286
Definition: record_store.h:95
std::string _ns
Definition: record_store.h:660
ValidateResults()
Definition: record_store.h:672
virtual ~UpdateNotifier()
Definition: record_store.h:80