diff options
author | Eliot Horowitz <eliot@10gen.com> | 2014-03-17 13:25:54 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2014-04-03 13:31:49 -0400 |
commit | 0a7fd1fe4dd20ae0ab7d94e66099f609db9a2ea9 (patch) | |
tree | 2f6fc05a52268577095948f744725328e9c093ef /src/mongo/db/structure/catalog/namespace_details.cpp | |
parent | dc05a58dac1e57b60de4494a1cd352c30cf165bf (diff) | |
download | mongo-0a7fd1fe4dd20ae0ab7d94e66099f609db9a2ea9.tar.gz |
SERVER-13084: more IndexDeails culling
Diffstat (limited to 'src/mongo/db/structure/catalog/namespace_details.cpp')
-rw-r--r-- | src/mongo/db/structure/catalog/namespace_details.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/mongo/db/structure/catalog/namespace_details.cpp b/src/mongo/db/structure/catalog/namespace_details.cpp index 5d7df82db80..26051d41585 100644 --- a/src/mongo/db/structure/catalog/namespace_details.cpp +++ b/src/mongo/db/structure/catalog/namespace_details.cpp @@ -474,7 +474,33 @@ namespace mongo { return e->details[i]; } - NamespaceDetails::IndexIterator::IndexIterator(NamespaceDetails *_d, + + const IndexDetails& NamespaceDetails::idx(int idxNo, bool missingExpected) const { + if( idxNo < NIndexesBase ) { + const IndexDetails& id = _indexes[idxNo]; + return id; + } + const Extra *e = extra(); + if ( ! e ) { + if ( missingExpected ) + throw MsgAssertionException( 17421 , "Missing Extra" ); + massert(17422, "missing Extra", e); + } + int i = idxNo - NIndexesBase; + if( i >= NIndexesExtra ) { + e = e->next(this); + if ( ! e ) { + if ( missingExpected ) + throw MsgAssertionException( 17423 , "missing extra" ); + massert(17424, "missing Extra", e); + } + i -= NIndexesExtra; + } + return e->details[i]; + } + + + NamespaceDetails::IndexIterator::IndexIterator(const NamespaceDetails *_d, bool includeBackgroundInProgress) { d = _d; i = 0; @@ -724,7 +750,7 @@ namespace mongo { } int NamespaceDetails::_catalogFindIndexByName(const StringData& name, - bool includeBackgroundInProgress) { + bool includeBackgroundInProgress) const { IndexIterator i = ii(includeBackgroundInProgress); while( i.more() ) { if ( name == i.next().info.obj().getStringField("name") ) |