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

Immutable shardkey becomes mutable

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical - P2
    • Resolution: Fixed
    • Affects Version/s: 2.2.0
    • Fix Version/s: 2.5.3
    • Component/s: Sharding, Write Ops
    • Labels:
      None
    • Environment:
      linux 64 bit
    • Operating System:
      Linux

      Description

      I'm using the following shard key

      {"categoryId":1, "store":1, "_id":1}

      For testing purposes I only have one document in the collection:

      mongos> db.offerChange.find()
      { "_id" : 123, "categoryId" : 9881, "store" : "NEW" }

      When I want to update a field, I get correctly an alert "Can't modify shard key's value":

      mongos> db.offerChange.update({"_id":123}, {$set:{"store":"NEWEST"}}, true, false)
      Can't modify shard key's value. field: store: "NEWEST" collection: offerChange.offerChange

      However, I can modify the shard key by executing this:

      mongos> db.offerChange.update({"_id":123}, {"_id":123, "categoryId":9881,"store":"NEWEST"}, true, false)
      mongos> db.offerChange.find()
      { "_id" : 123, "categoryId" : 9881, "store" : "NEWEST" }
      mongos> 

      Also, I could call save to change the shard key again (back):

      mongos> db.offerChange.save({"categoryId":9881, "store":"NEW","_id":123})
      mongos> db.offerChange.find()
      { "_id" : 123, "categoryId" : 9881, "store" : "NEW" }
      mongos> 

      Now, when I try to add a second shard key field to the query, I get the same but differently expressed correct alert:

      mongos> db.offerChange.update({"_id":123,"store":"NEW"}, {"_id":123, "categoryId":9881,"store":"NEWEST"}, true, false)
      cannot modify shard key for collection offerChange.offerChange, found new value for store

      However, when I replace the second by the third shard key field in the query, the update works again:

      mongos> db.offerChange.update({"_id":123,"categoryId":9881}, {"_id":123, "categoryId":9881,"store":"NEWEST"}, true, false)
      mongos> db.offerChange.find()
      { "_id" : 123, "categoryId" : 9881, "store" : "NEWEST" }

      I asked already in the mongoDB forum but nobody answered so far.
      https://groups.google.com/group/mongodb-user/browse_thread/thread/300e0ff4676cb30b?hl=de&noredirect=true&pli=1

      As I think that's rather a bug than a feature, I opened this bug report.

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: