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

MongoDB 3.4 returns document with duplicate "roles" key for "rolesInfo" command.

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Duplicate
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Operating System:
      ALL
    • Steps To Reproduce:
      Hide

      This PR demonstrates & fixes the issue on the java driver side. C & C++ drivers are not affected that much, but COULD be, if you were ever to iterate over the fields and bson_iter_next returns the key-value pair twice:

      https://github.com/mongodb/mongo-java-driver/pull/382

      Show
      This PR demonstrates & fixes the issue on the java driver side. C & C++ drivers are not affected that much, but COULD be, if you were ever to iterate over the fields and bson_iter_next returns the key-value pair twice: https://github.com/mongodb/mongo-java-driver/pull/382

      Description

      When running

      db.foo.runCommand({rolesInfo:1, showBuiltinRoles:true})
      

      MongoDB 3.4 (but not any previous version I tested) will return a document with two "roles" fields:

      {
          "roles": [<This is the data we want>],
          "roles": [],
          ...
      }
      

      Note that the above command will not actually produce a document with two "roles" keys, but on the "wire" (meaning the BSON binary chunk) it will be a duplicate that is then (maybe) disambiguated "in some way" by the driver you use.

      Unfortunately, the first "roles" entry has the data, while the second one is empty. The java driver behaves differently compared to the C based drivers, since Map::put() will overwrite existing entries, thus making the last occurrence matter, while the C based drivers use a forward scan that will always return the first occurrence.

      Further, I want to point out that this is NOT a bug in the java driver, but since the broken MongoDB has already been shipped to production, we still need a fix to deal with the broken MongoDBs that are in circulation.

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: