32 #include "mongo/db/index/index_descriptor.h" 36 #include "mongo/util/elapsed_tracker.h" 90 std::unique_ptr<Lock::CollectionLock> collLk,
91 const bool background);
97 void addDocKey(
const KeyString& ks,
int indexNumber);
98 void removeDocKey(
const KeyString& ks,
int indexNumber);
99 void addIndexKey(
const KeyString& ks,
int indexNumber);
100 void removeIndexKey(
const KeyString& ks,
int indexNumber);
106 void addLongIndexKey(
int indexNumber);
111 int64_t getNumKeys(
int indexNumber)
const;
116 int64_t getNumLongKeys(
int indexNumber)
const;
121 int64_t getNumRecords(
int indexNumber)
const;
127 bool haveEntryMismatch()
const;
136 int64_t getNumExtraIndexKeys(
int indexNumber)
const;
167 void applyChange(
const IndexDescriptor*
descriptor,
168 const boost::optional<IndexKeyEntry>& indexEntry,
187 void setLastProcessedRecordId(RecordId recordId);
192 void setLastProcessedIndexEntry(
const IndexDescriptor& descriptor,
193 const boost::optional<IndexKeyEntry>& indexEntry);
200 void notifyStartIndex(
int indexNumber);
207 void notifyDoneIndex(
int indexNumber);
212 int getIndexNumber(
const std::string& indexNs);
220 bool shouldGetNewSnapshot(
const RecordId recordId)
const;
228 bool shouldGetNewSnapshot(
const KeyString& keyString)
const;
234 void relockCollectionWithMode(
LockMode mode);
246 std::unique_ptr<Lock::CollectionLock>
_collLk;
268 boost::optional<RecordId> _lastProcessedRecordId = boost::none;
271 std::unique_ptr<KeyString> _lastProcessedIndexEntry =
nullptr;
274 int _currentIndex = -1;
280 boost::optional<RecordId> _yieldAtRecordId = boost::none;
283 std::unique_ptr<KeyString> _yieldAtIndexEntry =
nullptr;
286 static const int _kErrorThreshold = 100;
289 int _numErrorsRecorded = 0;
298 void _addDocKey_inlock(
const KeyString& ks,
int indexNumber);
304 void _removeDocKey_inlock(
const KeyString& ks,
int indexNumber);
310 void _addIndexKey_inlock(
const KeyString& ks,
int indexNumber);
316 void _removeIndexKey_inlock(
const KeyString& ks,
int indexNumber);
322 bool _isIndexFinished_inlock(
int indexNumber)
const;
328 bool _isIndexScanning_inlock(
int indexNumber)
const;
335 void _setYieldAtRecord_inlock(
const RecordId recordId);
342 void _setYieldAtIndexEntry_inlock(
const KeyString& keyString);
348 bool _isBeforeLastProcessedRecordId_inlock(RecordId recordId)
const;
354 bool _isBeforeLastProcessedIndexEntry_inlock(
const KeyString& keyString)
const;
359 uint32_t _hashKeyString(
const KeyString& ks,
int indexNumbers)
const;
370 Status _throwExceptionIfError();
bool indexScanFinished
Definition: index_consistency.h:71
Collection * _collection
Definition: index_consistency.h:243
ValidationOperation
The ValidationOperation is used by classes using the IndexObserver to let us know what operation was ...
Definition: index_consistency.h:52
const NamespaceString _nss
Definition: index_consistency.h:244
int64_t numKeys
Definition: index_consistency.h:73
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
OperationContext * _opCtx
Definition: index_consistency.h:242
std::unique_ptr< Lock::CollectionLock > _collLk
Definition: index_consistency.h:246
Collection *const collection
Definition: collection_info_cache_impl.cpp:53
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
int64_t numExtraIndexKeys
Definition: index_consistency.h:81
const RecordStore * _recordStore
Definition: index_consistency.h:245
Definition: key_string.h:47
const bool _isBackground
Definition: index_consistency.h:247
this is NOT safe through a yield right now.
Definition: collection.h:160
ElapsedTracker _tracker
Definition: index_consistency.h:248
Collection *const OperationContext *const const StringData OptionalCollectionUUID CollectionCatalogEntry *const RecordStore *const recordStore
Definition: collection_impl.cpp:80
Definition: index_consistency.h:84
int64_t numLongKeys
Definition: index_consistency.h:75
LockMode
Lock modes.
Definition: lock_manager_defs.h:59
An abstraction used for storing documents in a collection or entries in an index. ...
Definition: record_store.h:282
ValidationStage
The ValidationStage allows the IndexConsistency class to perform the correct operations that depend o...
Definition: index_consistency.h:44
uint32_t indexNsHash
Definition: index_consistency.h:69
IndexCatalogEntry *const OperationContext *const const StringData CollectionCatalogEntry *const std::unique_ptr< IndexDescriptor > descriptor
Definition: index_catalog_entry_impl.cpp:58
std::map< uint32_t, uint32_t > _indexKeyCount
Definition: index_consistency.h:259
bool isReady
Definition: index_consistency.h:67
int64_t numRecords
Definition: index_consistency.h:78
The IndexConsistency class is used to keep track of the index consistency.
Definition: index_consistency.h:65
std::map< int, IndexInfo > _indexesInfo
Definition: index_consistency.h:265
stdx::mutex _classMutex
Definition: index_consistency.h:292
std::map< std::string, int > _indexNumber
Definition: index_consistency.h:262
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80