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

Writing index metainfo into WT's app_metadata can cause a parsing error

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 4.1.12
    • Affects Version/s: None
    • Component/s: Storage
    • Labels:
      None
    • Fully Compatible
    • ALL
    • Hide

      On a replica set with > 0 secondaries:

      db.bla.insert({});
      db.bla.ensureIndex({a: 1}, {unique: true});
      db.bla.renameCollection("\x7F");
      db.runCommand({"collMod": "\x7F"});
      
      Show
      On a replica set with > 0 secondaries: db.bla.insert({}); db.bla.ensureIndex({a: 1}, {unique: true }); db.bla.renameCollection( "\x7F" ); db.runCommand({ "collMod" : "\x7F" });
    • Storage NYC 2019-05-20, Execution Team 2019-06-03
    • 5

      Since as far as I care to look back, mongodb has passed index "info objects" to the WT table's app_metadata. The index data is converted to a json string representation which contains the collection name.

      When this string is malformed and WT hits a parsing error, it's typically discovered via the primary and results in a uassert:

      test> db.createCollection("\x7F")
      {
      	"ok" : 0,
      	"errmsg" : "22: Invalid argument",
      	"code" : 2,
      	"codeName" : "BadValue"
      }
      

      However an existing collection can be renamed without renaming the ns field on an index entry:

      test> db.foo.renameCollection("\x7F")
      { "ok" : 1 }
      test> db["\x7F"].find()
      { "_id" : ObjectId("5cd472baae8328407ec23421") }
      

      With the new unique index format, indexes can have their metadata re-written to note the format the index is currently in. This can happen on an empty collMod command. There are cases where a primary will replicate this collMod without having hit the parsing error itself. A secondary processing this oplog entry will crash.

            Assignee:
            gregory.wlodarek@mongodb.com Gregory Wlodarek
            Reporter:
            daniel.gottlieb@mongodb.com Daniel Gottlieb (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: