summaryrefslogtreecommitdiff
path: root/src/mongo/db/structure/catalog/namespace_details.cpp
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2014-03-17 13:25:54 -0400
committerEliot Horowitz <eliot@10gen.com>2014-04-03 13:31:49 -0400
commit0a7fd1fe4dd20ae0ab7d94e66099f609db9a2ea9 (patch)
tree2f6fc05a52268577095948f744725328e9c093ef /src/mongo/db/structure/catalog/namespace_details.cpp
parentdc05a58dac1e57b60de4494a1cd352c30cf165bf (diff)
downloadmongo-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.cpp30
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") )