inserts in txns can exceed max document count in a capped collection

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Works as Designed
    • Priority: Major - P3
    • None
    • Affects Version/s: 3.7.9
    • Component/s: Storage
    • None
    • Storage Execution
    • ALL
    • Hide
      /*
       * Set up cluster.
       */
      var r = new ReplSetTest({nodes:2});
      r.startSet();r.initiate();
      
      var dbName = 'test';
      var collName = 'test';
      
      const sessionOptions = {causalConsistency: false};
      const session = r.getPrimary().startSession(sessionOptions);
      const sessionDb = session.getDatabase(dbName);
      const sessionColl = sessionDb.getCollection(collName);
      
      
      /*
       * Repro
       */
      
      
      assert.commandWorked(sessionDb.runCommand({create: collName, writeConcern: {w: "majority"}, capped: true, size: 64000, max: 10}));
      
      // Insert 11 documents.
      session.startTransaction();
      for (var i = 0; i < 11; i++) {
          sessionColl.insert({_id: i});
      }
      session.commitTransaction();
      
      // Insert 12 documents.
      session.startTransaction();
      for (var i = 12; i < 24; i++) {
          sessionColl.insert({_id: i});
      }
      session.commitTransaction();
      
      session.startTransaction();
      printjson(sessionColl.find().toArray());
      assert.eq(10, sessionColl.find().itcount());
      session.commitTransaction();
      
      session.endSession();
      
      Show
      /* * Set up cluster. */ var r = new ReplSetTest({nodes:2}); r.startSet();r.initiate(); var dbName = 'test'; var collName = 'test'; const sessionOptions = {causalConsistency: false}; const session = r.getPrimary().startSession(sessionOptions); const sessionDb = session.getDatabase(dbName); const sessionColl = sessionDb.getCollection(collName); /* * Repro */ assert.commandWorked(sessionDb.runCommand({create: collName, writeConcern: {w: "majority"}, capped: true, size: 64000, max: 10})); // Insert 11 documents. session.startTransaction(); for (var i = 0; i < 11; i++) { sessionColl.insert({_id: i}); } session.commitTransaction(); // Insert 12 documents. session.startTransaction(); for (var i = 12; i < 24; i++) { sessionColl.insert({_id: i}); } session.commitTransaction(); session.startTransaction(); printjson(sessionColl.find().toArray()); assert.eq(10, sessionColl.find().itcount()); session.commitTransaction(); session.endSession();
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Inserts in transaction can exceed the number of max documents allowed in a capped collection and still succeed. These documents are visible to subsequent reads after the transaction has committed.

      Inserts exceeding the size of a capped collection will result in a "Transaction has been aborted." error when attempting to run commitTransaction.

            Assignee:
            [DO NOT USE] Backlog - Storage Execution Team
            Reporter:
            Robert Guo (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: