void run() { const ServiceContext::UniqueOperationContext opCtxPtr = cc().makeOperationContext(); OperationContext& opCtx = *opCtxPtr; dbtests::WriteContextForTests ctx(&opCtx, _nss.ns()); int numFinishedIndexesStart = _catalog->numIndexesReady(&opCtx); dbtests::createIndex(&opCtx, _nss.ns(), BSON("x" << 1)).transitional_ignore(); dbtests::createIndex(&opCtx, _nss.ns(), BSON("y" << 1)).transitional_ignore(); ASSERT_TRUE(_catalog->numIndexesReady(&opCtx) == numFinishedIndexesStart + 2); std::unique_ptr<IndexCatalog::IndexIterator> ii = _catalog->getIndexIterator(&opCtx, false); int indexesIterated = 0; bool foundIndex = false; while (ii->more()) { auto indexDesc = ii->next()->descriptor(); indexesIterated++; BSONObjIterator boit(indexDesc->infoObj()); while (boit.more() && !foundIndex) { BSONElement e = boit.next(); if (e.fieldNameStringData() == "name" && e.valueStringDataSafe() == "y_1") { foundIndex = true; break; } } } ASSERT_TRUE(indexesIterated == _catalog->numIndexesReady(&opCtx)); ASSERT_TRUE(foundIndex); }
void run() { OperationContextImpl txn; Client::WriteContext ctx(&txn, _ns); int numFinishedIndexesStart = _catalog->numIndexesReady(&txn); Helpers::ensureIndex(&txn, _coll, BSON("x" << 1), false, "_x_0"); Helpers::ensureIndex(&txn, _coll, BSON("y" << 1), false, "_y_0"); ASSERT_TRUE(_catalog->numIndexesReady(&txn) == numFinishedIndexesStart+2); IndexCatalog::IndexIterator ii = _catalog->getIndexIterator(&txn,false); int indexesIterated = 0; bool foundIndex = false; while (ii.more()) { IndexDescriptor* indexDesc = ii.next(); indexesIterated++; BSONObjIterator boit(indexDesc->infoObj()); while (boit.more() && !foundIndex) { BSONElement e = boit.next(); if (str::equals(e.fieldName(), "name") && str::equals(e.valuestrsafe(), "_y_0")) { foundIndex = true; break; } } } ctx.commit(); ASSERT_TRUE(indexesIterated == _catalog->numIndexesReady(&txn)); ASSERT_TRUE(foundIndex); }
void run() { Client::WriteContext ctx(_ns); int numFinishedIndexesStart = _catalog->numIndexesReady(); BSONObjBuilder b1; b1.append("key", BSON("x" << 1)); b1.append("ns", _ns); b1.append("name", "_x_0"); _catalog->createIndex(b1.obj(), true); BSONObjBuilder b2; b2.append("key", BSON("y" << 1)); b2.append("ns", _ns); b2.append("name", "_y_0"); _catalog->createIndex(b2.obj(), true); ASSERT_TRUE(_catalog->numIndexesReady() == numFinishedIndexesStart+2); IndexCatalog::IndexIterator ii = _catalog->getIndexIterator(false); int indexesIterated = 0; bool foundIndex = false; while (ii.more()) { IndexDescriptor* indexDesc = ii.next(); indexesIterated++; BSONObjIterator boit(indexDesc->infoObj()); while (boit.more() && !foundIndex) { BSONElement e = boit.next(); if (str::equals(e.fieldName(), "name") && str::equals(e.valuestrsafe(), "_y_0")) { foundIndex = true; break; } } } ASSERT_TRUE(indexesIterated == _catalog->numIndexesReady()); ASSERT_TRUE(foundIndex); }