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

Chunks split on $minKey don't work as expected

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor - P4
    • Resolution: Works as Designed
    • Affects Version/s: 2.6.3
    • Fix Version/s: None
    • Component/s: Sharding
    • Labels:
      None
    • Operating System:
      ALL
    • Steps To Reproduce:
      Hide

      From shell in mongos with >1 shard added

      mongos>sh.enableSharding("ismbtest")
      mongos>sh.shardCollection("ismbtest.audit",{region:1,_id:1}) 
      mongos>sh.splitAt("ismbtest.audit",{region:"NA",_id:null})
      mongos>sh.setBalancerState(false)
      mongos>sh.status()

      — Sharding Status —

        sharding version: {
      	"_id" : 1,
      	"version" : 4,
      	"minCompatibleVersion" : 4,
      	"currentVersion" : 5,
      	"clusterId" : ObjectId("53be36b80698700e22a3bb6f")
      }
        shards:
      	{  "_id" : "shard0000",  "host" : "localhost:27502" }
      	{  "_id" : "shard0001",  "host" : "localhost:27503" }
        databases:
      	{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
      	{  "_id" : "test",  "partitioned" : false,  "primary" : "shard0000" }
      	{  "_id" : "ismbtest",  "partitioned" : true,  "primary" : "shard0000" }
      		ismbtest.audit
      			shard key: { "region" : 1, "_id" : 1 }
      			chunks:
      				shard0001	1
      				shard0000	1
      			{ "region" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "region" : "NA", "_id" : { "$minKey" : 1 } } on : shard0001 Timestamp(2, 0) 
      			{ "region" : "NA", "_id" : { "$minKey" : 1 } } -->> { "region" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(2, 1) 
      	{  "_id" : "isbmtest",  "partitioned" : false,  "primary" : "shard0001" }

      mongos> db.audit.insert({region:"EMEA",_id:"123-456-789-101112",text:"On Emea"})
      WriteResult({ "nInserted" : 1 })
      mongos> db.audit.insert({region:"NA",_id:"123-456-789-101113",text:"On NA"})
      WriteResult({ "nInserted" : 1 })

      mongos> db.audit.stats()
      {
      	"sharded" : true,
      	"systemFlags" : 1,
      	"userFlags" : 1,
      	"ns" : "ismbtest.audit",
      	"count" : 2,
      	"numExtents" : 2,
      	"size" : 224,
      	"storageSize" : 16384,
      	"totalIndexSize" : 32704,
      	"indexSizes" : {
      		"_id_" : 16352,
      		"region_1__id_1" : 16352
      	},
      	"avgObjSize" : 112,
      	"nindexes" : 2,
      	"nchunks" : 2,
      	"shards" : {
      		"shard0000" : {
      			"ns" : "ismbtest.audit",
      			"count" : 0,
      			"size" : 0,
      			"storageSize" : 8192,
      			"numExtents" : 1,
      			"nindexes" : 2,
      			"lastExtentSize" : 8192,
      			"paddingFactor" : 1,
      			"systemFlags" : 1,
      			"userFlags" : 1,
      			"totalIndexSize" : 16352,
      			"indexSizes" : {
      				"_id_" : 8176,
      				"region_1__id_1" : 8176
      			},
      			"ok" : 1
      		},
      		"shard0001" : {
      			"ns" : "ismbtest.audit",
      			"count" : 2,
      			"size" : 224,
      			"avgObjSize" : 112,
      			"storageSize" : 8192,
      			"numExtents" : 1,
      			"nindexes" : 2,
      			"lastExtentSize" : 8192,
      			"paddingFactor" : 1,
      			"systemFlags" : 1,
      			"userFlags" : 1,
      			"totalIndexSize" : 16352,
      			"indexSizes" : {
      				"_id_" : 8176,
      				"region_1__id_1" : 8176
      			},
      			"ok" : 1
      		}
      	},
      	"ok" : 1
      }

      Both went to same shard, it appears that a chunk range of

      { "region" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "region" : "NA", "_id" : { "$minKey" : 1 } } on : shard0001 Timestamp(2, 0) 

      Somehow includes

      {region:"NA","_id:"123-456-789-101113"}

      in sorting does minKey not come first?

      Show
      From shell in mongos with >1 shard added mongos>sh.enableSharding( "ismbtest" ) mongos>sh.shardCollection( "ismbtest.audit" ,{region: 1 ,_id: 1 }) mongos>sh.splitAt( "ismbtest.audit" ,{region: "NA" ,_id: null }) mongos>sh.setBalancerState( false ) mongos>sh.status() — Sharding Status — sharding version: { "_id" : 1 , "version" : 4 , "minCompatibleVersion" : 4 , "currentVersion" : 5 , "clusterId" : ObjectId( "53be36b80698700e22a3bb6f" ) } shards: { "_id" : "shard0000" , "host" : "localhost:27502" } { "_id" : "shard0001" , "host" : "localhost:27503" } databases: { "_id" : "admin" , "partitioned" : false , "primary" : "config" } { "_id" : "test" , "partitioned" : false , "primary" : "shard0000" } { "_id" : "ismbtest" , "partitioned" : true , "primary" : "shard0000" } ismbtest.audit shard key: { "region" : 1 , "_id" : 1 } chunks: shard0001 1 shard0000 1 { "region" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "region" : "NA" , "_id" : { "$minKey" : 1 } } on : shard0001 Timestamp( 2 , 0 ) { "region" : "NA" , "_id" : { "$minKey" : 1 } } -->> { "region" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp( 2 , 1 ) { "_id" : "isbmtest" , "partitioned" : false , "primary" : "shard0001" } mongos> db.audit.insert({region: "EMEA" ,_id: "123-456-789-101112" ,text: "On Emea" }) WriteResult({ "nInserted" : 1 }) mongos> db.audit.insert({region: "NA" ,_id: "123-456-789-101113" ,text: "On NA" }) WriteResult({ "nInserted" : 1 }) mongos> db.audit.stats() { "sharded" : true , "systemFlags" : 1 , "userFlags" : 1 , "ns" : "ismbtest.audit" , "count" : 2 , "numExtents" : 2 , "size" : 224 , "storageSize" : 16384 , "totalIndexSize" : 32704 , "indexSizes" : { "_id_" : 16352 , "region_1__id_1" : 16352 }, "avgObjSize" : 112 , "nindexes" : 2 , "nchunks" : 2 , "shards" : { "shard0000" : { "ns" : "ismbtest.audit" , "count" : 0 , "size" : 0 , "storageSize" : 8192 , "numExtents" : 1 , "nindexes" : 2 , "lastExtentSize" : 8192 , "paddingFactor" : 1 , "systemFlags" : 1 , "userFlags" : 1 , "totalIndexSize" : 16352 , "indexSizes" : { "_id_" : 8176 , "region_1__id_1" : 8176 }, "ok" : 1 }, "shard0001" : { "ns" : "ismbtest.audit" , "count" : 2 , "size" : 224 , "avgObjSize" : 112 , "storageSize" : 8192 , "numExtents" : 1 , "nindexes" : 2 , "lastExtentSize" : 8192 , "paddingFactor" : 1 , "systemFlags" : 1 , "userFlags" : 1 , "totalIndexSize" : 16352 , "indexSizes" : { "_id_" : 8176 , "region_1__id_1" : 8176 }, "ok" : 1 } }, "ok" : 1 } Both went to same shard, it appears that a chunk range of { "region" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "region" : "NA" , "_id" : { "$minKey" : 1 } } on : shard0001 Timestamp( 2 , 0 ) Somehow includes {region: "NA" , "_id:" 123 - 456 - 789 - 101113 "} in sorting does minKey not come first?

      Description

      I hate to raise bugs that don't work the way 'I expect' as it's probably me that's wrong but here goes.

      If I have a compound shard key and when presplitting use {$minKey:1} as the split point it appears to work but then the split is not where I think it is, if I use null instead it works.

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            john.page John Page
            Participants:
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: