diff --git a/jstests/replsets/bf-10827.js b/jstests/replsets/bf-10827.js
new file mode 100644
index 0000000000..6d11ca719e
--- /dev/null
+++ b/jstests/replsets/bf-10827.js
@@ -0,0 +1,57 @@
+(function() {
+"use strict";
+load('jstests/libs/parallel_shell_helpers.js');
+load("jstests/libs/check_log.js");
+
+const dbName = 'foo';
+const collName1 = 'bar1';
+const collName2 = 'bar2';
+
+const rst = new ReplSetTest({
+    nodes: 2,
+    nodeOptions: {setParameter: {writePeriodicNoops: true, periodicNoopIntervalSecs: 2}}
+});
+rst.startSet();
+rst.initiateWithHighElectionTimeout();
+
+const p = rst.getPrimary();
+const testDB = p.getDB(dbName);
+const testColl = testDB[collName1];
+assert.commandWorked(testColl.insert({a: 1}));
+assert.commandWorked(testDB[collName2].insert({a: 1}));
+
+const fp1Name = "hangBeforeCompletingCollectionDrop1";
+const fp2Name = "hangBeforeCompletingCollectionDrop2";
+let failPoint1 =
+    assert.commandWorked(p.adminCommand({configureFailPoint: fp1Name, mode: "alwaysOn"}));
+let failPoint2 =
+    assert.commandWorked(p.adminCommand({configureFailPoint: fp2Name, mode: {skip: 1}}));
+
+const awaitFP = startParallelShell(
+    funWithArgs(function(fp1Name) {
+        checkLog.containsWithCount(db.getMongo(), fp1Name + " enabled", 2);
+        assert.commandWorked(db.adminCommand({configureFailPoint: fp1Name, mode: "off"}));
+    }, fp1Name), testDB.getMongo().port);
+
+jsTestLog("Dropping");
+testColl.drop({writeConcern: {w: "majority"}});
+
+checkLog.contains(p, fp2Name + " enabled");
+
+jsTestLog("Dropped, starting txn");
+const session = p.startSession();
+const sessionDB = session.getDatabase(dbName);
+const sessionColl = sessionDB.getCollection(collName2);
+session.startTransaction();
+assert.commandWorked(sessionColl.insert({a: 1}));
+assert.commandWorked(session.commitTransaction_forTesting());
+
+jsTestLog("Await FP");
+awaitFP();
+
+jsTestLog("Disable FP2");
+assert.commandWorked(testDB.adminCommand({configureFailPoint: fp2Name, mode: "off"}));
+
+jsTestLog("stop set");
+rst.stopSet();
+}());
\ No newline at end of file
diff --git a/src/mongo/db/repl/storage_interface_impl.cpp b/src/mongo/db/repl/storage_interface_impl.cpp
index 0f0402be18..5ec3598ba8 100644
--- a/src/mongo/db/repl/storage_interface_impl.cpp
+++ b/src/mongo/db/repl/storage_interface_impl.cpp
@@ -77,12 +77,16 @@
 #include "mongo/db/repl/rollback_gen.h"
 #include "mongo/db/service_context.h"
 #include "mongo/util/assert_util.h"
+#include "mongo/util/fail_point_service.h"
 #include "mongo/util/log.h"
 #include "mongo/util/mongoutils/str.h"

 namespace mongo {
 namespace repl {

+MONGO_FAIL_POINT_DEFINE(hangBeforeCompletingCollectionDrop1);
+MONGO_FAIL_POINT_DEFINE(hangBeforeCompletingCollectionDrop2);
+
 const char StorageInterfaceImpl::kDefaultRollbackIdNamespace[] = "local.system.rollback.id";
 const char StorageInterfaceImpl::kRollbackIdFieldName[] = "rollbackId";
 const char StorageInterfaceImpl::kRollbackIdDocumentId[] = "rollbackId";
@@ -426,7 +430,21 @@ Status StorageInterfaceImpl::createCollection(OperationContext* opCtx,
 Status StorageInterfaceImpl::dropCollection(OperationContext* opCtx, const NamespaceString& nss) {
     return writeConflictRetry(opCtx, "StorageInterfaceImpl::dropCollection", nss.ns(), [&] {
         UninterruptibleLockGuard noInterrupt(opCtx->lockState());
+        if (MONGO_FAIL_POINT(hangBeforeCompletingCollectionDrop1)) {
+            log() << "hangBeforeCompletingCollectionDrop1 enabled";
+            while (MONGO_FAIL_POINT(hangBeforeCompletingCollectionDrop1)) {
+                mongo::sleepsecs(1);
+            }
+            log() << "hangBeforeCompletingCollectionDrop1 disabled";
+        }
         AutoGetDb autoDB(opCtx, nss.db(), MODE_X);
+        if (MONGO_FAIL_POINT(hangBeforeCompletingCollectionDrop2)) {
+            log() << "hangBeforeCompletingCollectionDrop2 enabled";
+            while (MONGO_FAIL_POINT(hangBeforeCompletingCollectionDrop2)) {
+                mongo::sleepsecs(1);
+            }
+            log() << "hangBeforeCompletingCollectionDrop2 disabled";
+        }
         if (!autoDB.getDb()) {
             // Database does not exist - nothing to do.
             return Status::OK();