36 #include "mongo/db/index/multikey_paths.h" 37 #include "mongo/db/jsobj.h" 38 #include "mongo/db/operation_context.h" 39 #include "mongo/db/record_id.h" 40 #include "mongo/db/server_options.h" 48 class IndexDescriptor;
49 class IndexAccessMethod;
50 struct InsertDeleteOptions;
66 bool ok()
const override;
82 bool haveIdIndex(OperationContext* opCtx)
const override;
89 IndexDescriptor*
findIdIndex(OperationContext* opCtx)
const override;
111 OperationContext* opCtx,
113 const BSONObj& collationSpec,
125 std::vector<IndexDescriptor*>* matches)
const override;
141 const BSONObj& shardKey,
142 bool requireSingleKey)
const override;
145 const std::string& type,
146 std::vector<IndexDescriptor*>& matches,
147 bool includeUnfinishedIndexes =
false)
const override;
161 const IndexDescriptor*
refreshEntry(OperationContext* opCtx,
162 const IndexDescriptor* oldDesc)
override;
167 IndexAccessMethod*
getIndex(
const IndexDescriptor* desc)
override;
168 const IndexAccessMethod*
getIndex(
const IndexDescriptor* desc)
const override;
180 bool includeUnfinishedIndexes);
182 bool more()
override;
183 IndexDescriptor*
next()
override;
186 IndexAccessMethod*
accessMethod(
const IndexDescriptor* desc)
override;
220 BSONObj spec)
override;
223 const BSONObj& original)
const override;
231 bool includingIdIndex,
232 stdx::function<
void(
const IndexDescriptor*)> onDropFn =
nullptr)
override;
234 Status dropIndex(OperationContext* opCtx, IndexDescriptor* desc)
override;
254 bool isMultikey(OperationContext* opCtx,
const IndexDescriptor*
idx)
override;
265 MultikeyPaths
getMultikeyPaths(OperationContext* opCtx,
const IndexDescriptor*
idx)
override;
341 const std::vector<BsonRecord>& bsonRecords,
342 int64_t* keysInsertedOut)
override;
352 int64_t* keysDeletedOut)
override;
357 const BSONObj& keyPattern)
override {
362 const std::string& newPluginName)
override;
373 const IndexDescriptor* desc,
392 const std::vector<BsonRecord>& bsonRecords,
393 int64_t* keysInsertedOut);
397 const std::vector<BsonRecord>& bsonRecords,
398 int64_t* keysInsertedOut);
405 int64_t* keysDeletedOut);
423 const std::string& indexName,
424 const std::string& indexNamespace);
439 const BSONObj& spec);
471 OperationContext*
const opCtx,
472 std::unique_ptr<IndexDescriptor> descriptor,
473 const bool initFromDisk) {
478 OperationContext*
const opCtx,
IndexCatalog *const _catalog
Definition: index_catalog_impl.h:318
bool _inProgress
Definition: index_catalog_impl.h:327
static const BSONObj _idObj
Definition: index_catalog_impl.h:377
Definition: index_catalog_entry.h:272
MultikeyPaths getMultikeyPaths(OperationContext *opCtx, const IndexDescriptor *idx) override
Returns the path components that cause the index 'idx' to be multikey if the index supports path-leve...
Definition: index_catalog_impl.cpp:1101
bool ok() const override
Definition: index_catalog_impl.cpp:202
Collection *const _collection
Definition: index_catalog_impl.h:317
OperationContext *const _opCtx
Definition: index_catalog_impl.h:198
const IndexCatalogEntryContainer & _getEntries() const override
Definition: index_catalog_impl.h:407
bool _shouldOverridePlugin(OperationContext *opCtx, const BSONObj &keyPattern) const
Definition: index_catalog_impl.cpp:224
const IndexKeyEntry _entry
Definition: ephemeral_for_test_btree_impl.cpp:499
bool haveAnyIndexes() const override
Definition: index_catalog_impl.cpp:1110
static StatusWith< BSONObj > _fixIndexSpec(OperationContext *opCtx, Collection *collection, const BSONObj &spec)
Definition: index_catalog_impl.cpp:1516
Status indexRecords(OperationContext *opCtx, const std::vector< BsonRecord > &bsonRecords, int64_t *keysInsertedOut) override
When 'keysInsertedOut' is not null, it will be set to the number of index keys inserted by this opera...
Definition: index_catalog_impl.cpp:1451
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
IndexDescriptor * findIndexByName(OperationContext *opCtx, StringData name, bool includeUnfinishedIndexes=false) const override
Find index by name.
Definition: index_catalog_impl.cpp:1233
IndexDescriptor * findIdIndex(OperationContext *opCtx) const override
Definition: index_catalog_impl.cpp:1223
bool isMultikey(OperationContext *opCtx, const IndexDescriptor *idx) override
Returns true if the index 'idx' is multikey, and returns false otherwise.
Definition: index_catalog_impl.cpp:1095
Database *const this_
Definition: database_impl.cpp:82
void findIndexesByKeyPattern(OperationContext *opCtx, const BSONObj &key, bool includeUnfinishedIndexes, std::vector< IndexDescriptor *> *matches) const override
Find indexes with a matching key pattern, putting them into the vector 'matches'. ...
Definition: index_catalog_impl.cpp:1262
Collection *const collection
Definition: collection_info_cache_impl.cpp:53
Status _indexFilteredRecords(OperationContext *opCtx, IndexCatalogEntry *index, const std::vector< BsonRecord > &bsonRecords, int64_t *keysInsertedOut)
Definition: index_catalog_impl.cpp:1371
void dropAllIndexes(OperationContext *opCtx, bool includingIdIndex, stdx::function< void(const IndexDescriptor *)> onDropFn=nullptr) override
Drops all indexes in the index catalog, optionally dropping the id index depending on the 'includingI...
Definition: index_catalog_impl.cpp:895
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
IndexDescriptor * findIndexByKeyPatternAndCollationSpec(OperationContext *opCtx, const BSONObj &key, const BSONObj &collationSpec, bool includeUnfinishedIndexes=false) const override
Find index by matching key pattern and collation spec.
Definition: index_catalog_impl.cpp:1245
void _deleteIndexFromDisk(OperationContext *opCtx, const std::string &indexName, const std::string &indexNamespace)
Definition: index_catalog_impl.cpp:1069
static IndexCatalogEntry * _setupInMemoryStructures(IndexCatalog *const this_, OperationContext *const opCtx, std::unique_ptr< IndexDescriptor > descriptor, const bool initFromDisk)
Definition: index_catalog_impl.h:469
Status checkUnfinished() const override
Returns a not-ok Status if there are any unfinished index builds.
Definition: index_catalog_impl.cpp:214
BSONObj key
Definition: btree_interface.cpp:334
how many: 1 per Collection.
Definition: index_catalog_impl.h:56
bool _includeUnfinishedIndexes
Definition: index_catalog_impl.h:196
const int _maxNumIndexesAllowed
Definition: index_catalog_impl.h:456
IndexCatalogEntry * catalogEntry(const IndexDescriptor *desc) override
Definition: index_catalog_impl.cpp:1191
disk creation order 1) system.indexes entry 2) collection's NamespaceDetails a) info + head b) _index...
Definition: index_catalog_impl.h:279
StatusWith< BSONObj > prepareSpecForCreate(OperationContext *opCtx, const BSONObj &original) const override
Definition: index_catalog_impl.cpp:309
this is NOT safe through a yield right now.
Definition: collection.h:160
IndexCatalogEntryContainer::const_iterator _iterator
Definition: index_catalog_impl.h:200
IndexDescriptor * findShardKeyPrefixedIndex(OperationContext *opCtx, const BSONObj &shardKey, bool requireSingleKey) const override
Returns an index suitable for shard key range scans.
Definition: index_catalog_impl.cpp:1276
const IndexDescriptor * idx
Definition: coll_mod.cpp:70
std::string _getAccessMethodName(OperationContext *opCtx, const BSONObj &keyPattern) const
This differs from IndexNames::findPluginName in that returns the plugin name we should use...
Definition: index_catalog_impl.cpp:257
const IndexCatalogEntry * getEntry(const IndexDescriptor *desc) const override
Definition: index_catalog_impl.cpp:1325
int numIndexesReady(OperationContext *opCtx) const override
Definition: index_catalog_impl.cpp:1120
void _checkMagic() const
Definition: index_catalog_impl.cpp:206
int numIndexesTotal(OperationContext *opCtx) const override
Definition: index_catalog_impl.cpp:1114
IndexCatalogEntry * _setupInMemoryStructures(OperationContext *opCtx, std::unique_ptr< IndexDescriptor > descriptor, bool initFromDisk)
Definition: index_catalog_impl.cpp:165
IndexCatalogEntry * getEntry()
Definition: index_catalog_impl.h:304
how many: 1 per Collection.
Definition: index_catalog.h:62
const std::string _ns
Definition: index_catalog_impl.h:319
const std::string & getIndexName() const
Definition: index_catalog_impl.h:308
Status _isSpecOk(OperationContext *opCtx, const BSONObj &spec) const
Definition: index_catalog_impl.cpp:541
IndexCatalogEntryContainer & _getEntries() override
Definition: index_catalog_impl.h:411
IndexCatalog *const Collection *const const int maxNumIndexesAllowed
Definition: index_catalog_impl.cpp:75
IndexIteratorImpl * clone_impl() const override
Definition: index_catalog_impl.cpp:1166
StatusWith< BSONObj > createIndexOnEmptyCollection(OperationContext *opCtx, BSONObj spec) override
Call this only on an empty collection from inside a WriteUnitOfWork.
Definition: index_catalog_impl.cpp:332
Definition: index_catalog.h:155
int numIndexesInProgress(OperationContext *opCtx) const
Definition: index_catalog_impl.h:73
IndexCatalogEntry * _prev
Definition: index_catalog_impl.h:204
Definition: index_catalog.h:66
void _advance()
Definition: index_catalog_impl.cpp:1196
std::string ns
Definition: index_catalog_impl.h:244
Collection *const _collection
Definition: index_catalog_impl.h:455
OperationContext *const const IndexCatalog *const const bool includeUnfinishedIndexes
Definition: index_catalog_impl.cpp:84
std::vector< BSONObj > getAndClearUnfinishedIndexes(OperationContext *opCtx) override
will drop all incompleted indexes and return specs after this, the indexes can be rebuilt ...
Definition: index_catalog_impl.cpp:1081
IndexCatalogEntry * _entry
Definition: index_catalog_impl.h:326
Definition: index_key_validate.h:40
Definition: index_catalog_entry.h:56
IndexAccessMethod * accessMethod(const IndexDescriptor *desc) override
Definition: index_catalog_impl.cpp:1186
Status init(OperationContext *opCtx) override
Definition: index_catalog_impl.cpp:131
Definition: index_catalog_impl.h:243
const IndexDescriptor * refreshEntry(OperationContext *opCtx, const IndexDescriptor *oldDesc) override
Reload the index definition for 'oldDesc' from the CollectionCatalogEntry.
Definition: index_catalog_impl.cpp:1332
static BSONObj fixIndexKey(const BSONObj &key)
Definition: index_catalog_impl.cpp:1487
bool _start
Definition: index_catalog_impl.h:202
Status _unindexRecord(OperationContext *opCtx, IndexCatalogEntry *index, const BSONObj &obj, const RecordId &loc, bool logIfError, int64_t *keysDeletedOut)
Definition: index_catalog_impl.cpp:1417
Status _dropIndex(OperationContext *const opCtx, IndexCatalogEntry *const desc)
Definition: index_catalog.h:570
IndexCatalog *const _this
Definition: index_catalog_impl.h:466
OperationContext *const const IndexCatalog *const cat
Definition: index_catalog_impl.cpp:84
Status _dropIndex(OperationContext *opCtx, IndexCatalogEntry *entry) override
this does no sanity checks
Definition: index_catalog_impl.cpp:1022
Definition: index_catalog_impl.h:176
bool more() override
Definition: index_catalog_impl.cpp:1170
IndexCatalogEntry *const OperationContext *const const StringData CollectionCatalogEntry *const std::unique_ptr< IndexDescriptor > descriptor
Definition: index_catalog_entry_impl.cpp:58
Status _doesSpecConflictWithExisting(OperationContext *opCtx, const BSONObj &spec) const
Definition: index_catalog_impl.cpp:779
~IndexCatalogImpl() override
Definition: index_catalog_impl.cpp:123
Status _indexRecords(OperationContext *opCtx, IndexCatalogEntry *index, const std::vector< BsonRecord > &bsonRecords, int64_t *keysInsertedOut)
Definition: index_catalog_impl.cpp:1400
int _magic
Definition: index_catalog_impl.h:454
std::string _indexNamespace
Definition: index_catalog_impl.h:324
std::string name
Definition: index_catalog_impl.h:245
static void prepareInsertDeleteOptions(OperationContext *opCtx, const IndexDescriptor *desc, InsertDeleteOptions *options)
Fills out 'options' in order to indicate whether to allow dups or relax index constraints, as needed by replication.
Definition: index_catalog_impl.cpp:1497
Definition: index_catalog.h:64
IndexCatalogImpl(IndexCatalog *this_, Collection *collection, int maxNumIndexesAllowed)
Definition: index_catalog_impl.cpp:115
OperationContext Database StringData BSONObj options
Definition: database_impl.cpp:949
std::vector< std::unique_ptr< IndexCatalogEntry > >::const_iterator const_iterator
Definition: index_catalog_entry.h:274
IndexCatalogEntry * _next
Definition: index_catalog_impl.h:205
std::string _indexName
Definition: index_catalog_impl.h:323
BSONObj key
Definition: index_catalog_impl.h:246
bool haveIdIndex(OperationContext *opCtx) const override
this is in "alive" until the Collection goes away in which case everything from this tree has to go a...
Definition: index_catalog_impl.cpp:1151
OperationContext * _opCtx
Definition: index_catalog_impl.h:329
const IndexCatalog * _catalog
Definition: index_catalog_impl.h:199
IndexAccessMethod * getIndex(const IndexDescriptor *desc) override
Definition: index_catalog_impl.cpp:1315
static Status _dropIndex(IndexCatalog *const this_, OperationContext *const opCtx, IndexCatalogEntry *const desc)
Definition: index_catalog_impl.h:477
Status _upgradeDatabaseMinorVersionIfNeeded(OperationContext *opCtx, const std::string &newPluginName) override
Definition: index_catalog_impl.cpp:269
const BSONObj & getSpec() const
Definition: index_catalog_impl.h:312
Database *const OperationContext *const const StringData name
Definition: database_impl.cpp:82
IndexCatalogEntry * _setupInMemoryStructures(OperationContext *opCtx, std::unique_ptr< IndexDescriptor > descriptor, bool initFromDisk)
Definition: index_catalog.cpp:44
std::vector< BSONObj > _unfinishedIndexes
Definition: index_catalog_impl.h:464
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
BSONObj _spec
Definition: index_catalog_impl.h:321
const Collection * _getCollection() const override
Definition: index_catalog_impl.h:445
std::string getAccessMethodName(OperationContext *opCtx, const BSONObj &keyPattern) override
Definition: index_catalog_impl.h:356
BSONObj getDefaultIdIndexSpec() const override
Returns the spec for the id index to create by default for this collection.
Definition: index_catalog_impl.cpp:878
OperationContext const IndexDescriptor * desc
Definition: index_catalog_impl.cpp:97
Collection * _getCollection() override
Definition: index_catalog_impl.h:449
IndexDescriptor * next() override
Definition: index_catalog_impl.cpp:1178
IndexIteratorImpl(OperationContext *opCtx, const IndexCatalog *cat, bool includeUnfinishedIndexes)
Definition: index_catalog_impl.cpp:1155
void unindexRecord(OperationContext *opCtx, const BSONObj &obj, const RecordId &loc, bool noWarn, int64_t *keysDeletedOut) override
When 'keysDeletedOut' is not null, it will be set to the number of index keys removed by this operati...
Definition: index_catalog_impl.cpp:1468
void findIndexByType(OperationContext *opCtx, const std::string &type, std::vector< IndexDescriptor *> &matches, bool includeUnfinishedIndexes=false) const override
Definition: index_catalog_impl.cpp:1302
IndexCatalogEntryContainer _entries
Definition: index_catalog_impl.h:458
Status dropIndex(OperationContext *opCtx, IndexDescriptor *desc) override
Definition: index_catalog_impl.cpp:971