[SERVER-48525] Forbid dropping config.transactions when there are prepared transactions Created: 01/Jun/20  Updated: 29/Oct/23  Resolved: 16/Jul/20

Status: Closed
Project: Core Server
Component/s: Replication
Affects Version/s: 4.2.7, 4.4.0-rc7
Fix Version/s: 4.2.9, 4.4.1, 4.7.0

Type: Bug Priority: Major - P3
Reporter: Tess Avitabile (Inactive) Assignee: Vesselina Ratcheva (Inactive)
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Backports
Depends
Documented
is documented by DOCS-13764 [Server] Forbid dropping config.trans... Closed
Related
related to SERVER-49386 Always forbid dropping config.transac... Closed
is related to SERVER-47323 If config.system.indexBuilds is dropp... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Backport Requested:
v4.4, v4.2
Steps To Reproduce:

Update no_writes_to_config_transactions_with_prepared_transaction.js with the following diff, so that writes to config.transactions are performed without a session. The update and delete fail correctly, but the drop does not fail as expected.

diff --git a/jstests/core/txns/no_writes_to_config_transactions_with_prepared_transaction.js b/jstests/core/txns/no_writes_to_config_transactions_with_prepared_transaction.js
index 067bf1482f..215f4c661b 100644
--- a/jstests/core/txns/no_writes_to_config_transactions_with_prepared_transaction.js
+++ b/jstests/core/txns/no_writes_to_config_transactions_with_prepared_transaction.js
@@ -52,9 +52,9 @@ const txnNum = transactionEntry.txnNum;
 jsTestLog("Test that updates to config.transactions fails when there is a prepared " +
           "transaction on the session");
 assert.commandFailedWithCode(
-    sessionConfigDB.transactions.update({_id: transactionEntry._id},
+    config.transactions.update({_id: transactionEntry._id},
                                         {$set: {"txnNumber": NumberLong(23)}}),
-    40528);
+    267);
 
 // Make sure that the txnNumber wasn't modified.
 transactionEntry = config.transactions.findOne();
@@ -62,8 +62,8 @@ assert.eq(transactionEntry.txnNum, NumberLong(txnNum));
 
 jsTestLog("Test that deletes to config.transactions fails when there is a prepared " +
           "transaction on the session");
-assert.commandFailedWithCode(sessionConfigDB.transactions.remove({_id: transactionEntry._id}),
-                             40528);
+assert.commandFailedWithCode(config.transactions.remove({_id: transactionEntry._id}),
+                             267);
 
 // Make sure that the entry in config.transactions wasn't removed.
 transactionEntry = config.transactions.findOne();
@@ -72,9 +72,9 @@ assert(transactionEntry);
 jsTestLog("Test that dropping config.transactions fails when there is a prepared transaction" +
           " on the session");
 assert.commandFailedWithCode(assert.throws(function() {
-                                              sessionConfigDB.transactions.drop();
+                                              config.transactions.drop();
                                           }),
-                                          40528);
+                                          267);
 
 jsTestLog("Test that we can prepare a transaction on a different session");
 const session2 = db.getMongo().startSession({causalConsistency: false});

Sprint: Repl 2020-06-29, Repl 2020-07-13, Repl 2020-07-27
Participants:
Linked BF Score: 23

 Comments   
Comment by Githook User [ 20/Aug/20 ]

Author:

{'name': 'Vesselina Ratcheva', 'email': 'vesselina.ratcheva@10gen.com', 'username': 'vessy-mongodb'}

Message: SERVER-48525 Forbid dropping config.transactions when there are prepared transactions

(cherry picked from commit d520082a3f8568b9303ab7e37c111d436d1dd50b)
Branch: v4.4
https://github.com/mongodb/mongo/commit/27eaf9f0ad03c837f7781d2b6037322ee213eb51

Comment by Githook User [ 07/Aug/20 ]

Author:

{'name': 'Vesselina Ratcheva', 'email': 'vesselina.ratcheva@10gen.com', 'username': 'vessy-mongodb'}

Message: SERVER-48525 Forbid dropping config.transactions when there are prepared transactions

(cherry picked from commit d520082a3f8568b9303ab7e37c111d436d1dd50b)
Branch: v4.2
https://github.com/mongodb/mongo/commit/d61f0526692d5717c1375666637164c4f0744b43

Comment by Githook User [ 16/Jul/20 ]

Author:

{'name': 'Vesselina Ratcheva', 'email': 'vesselina.ratcheva@10gen.com', 'username': 'vessy-mongodb'}

Message: SERVER-48525 Forbid dropping config.transactions when there are prepared transactions

This reverts commit 2e53e13f576ab96188e2f27221c657ef02d15dd0.
Branch: master
https://github.com/mongodb/mongo/commit/d520082a3f8568b9303ab7e37c111d436d1dd50b

Comment by Githook User [ 15/Jul/20 ]

Author:

{'name': 'Vesselina Ratcheva', 'email': 'vesselina.ratcheva@10gen.com', 'username': 'vessy-mongodb'}

Message: Revert "SERVER-48525 Forbid dropping config.transactions when there are prepared transactions"

This reverts commit 7e4402baf44531acabfe4a58c7be61c478c46bac.
Branch: master
https://github.com/mongodb/mongo/commit/b52de8036887396dec91c32b531790e7b1fe01cc

Comment by Githook User [ 14/Jul/20 ]

Author:

{'name': 'Vesselina Ratcheva', 'email': 'vesselina.ratcheva@10gen.com', 'username': 'vessy-mongodb'}

Message: SERVER-48525 Forbid dropping config.transactions when there are prepared transactions
Branch: master
https://github.com/mongodb/mongo/commit/7e4402baf44531acabfe4a58c7be61c478c46bac

Generated at Thu Feb 08 05:17:22 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.