From 9693ebbdb9a0098dbcd894a739218ae30238c72d Mon Sep 17 00:00:00 2001 From: nehakhatri5 Date: Sat, 13 Oct 2018 06:22:07 +1100 Subject: SERVER-37555 Abort of collMod need not refreshEntry for index on rollback. --- src/mongo/db/catalog/coll_mod.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/mongo/db') diff --git a/src/mongo/db/catalog/coll_mod.cpp b/src/mongo/db/catalog/coll_mod.cpp index 295c65979c8..bc7061147aa 100644 --- a/src/mongo/db/catalog/coll_mod.cpp +++ b/src/mongo/db/catalog/coll_mod.cpp @@ -67,6 +67,8 @@ namespace { // databases if none are provided). MONGO_FAIL_POINT_DEFINE(hangBeforeDatabaseUpgrade); +MONGO_FAIL_POINT_DEFINE(assertAfterIndexUpdate); + struct CollModRequest { const IndexDescriptor* idx = nullptr; BSONElement indexExpireAfterSeconds = {}; @@ -398,11 +400,14 @@ Status _collModInternal(OperationContext* opCtx, // Notify the index catalog that the definition of this index changed. cmr.idx = coll->getIndexCatalog()->refreshEntry(opCtx, cmr.idx); result->appendAs(newExpireSecs, "expireAfterSeconds_new"); - opCtx->recoveryUnit()->onRollback([ opCtx, idx = cmr.idx, coll ]() { - coll->getIndexCatalog()->refreshEntry(opCtx, idx); - }); + + if (MONGO_FAIL_POINT(assertAfterIndexUpdate)) { + log() << "collMod - assertAfterIndexUpdate fail point enabled."; + uasserted(50968, "trigger rollback after the index update"); + } } + // Save previous TTL index expiration. ttlInfo = TTLCollModInfo{Seconds(newExpireSecs.safeNumberLong()), Seconds(oldExpireSecs.safeNumberLong()), @@ -444,8 +449,10 @@ Status _collModInternal(OperationContext* opCtx, // Refresh the in-memory instance of the index. desc = coll->getIndexCatalog()->refreshEntry(opCtx, desc); - opCtx->recoveryUnit()->onRollback( - [opCtx, desc, coll]() { coll->getIndexCatalog()->refreshEntry(opCtx, desc); }); + if (MONGO_FAIL_POINT(assertAfterIndexUpdate)) { + log() << "collMod - assertAfterIndexUpdate fail point enabled."; + uasserted(50969, "trigger rollback for unique index update"); + } } } -- cgit v1.2.1