Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-34918

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

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Works as Designed
    • Icon: Major - P3 Major - P3
    • None
    • 3.7.9
    • 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();

    Description

      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.

      Attachments

        Activity

          People

            backlog-server-execution Backlog - Storage Execution Team
            robert.guo@mongodb.com Robert Guo (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: