|
This is a bug in the new mongos read path, and therefore affects only the master branch.
If a capped collection is empty, mongod will refuse to establish a tailable cursor since the position of the tailable cursor cannot be established. In this case, mongod will return a cursor id of 0 to the client. Mongos is expected to exhibit the same behavior. However, the new mongos read path establishes a broken tailable cursor that will never return any results:
mongos> db.c.drop()
|
mongos> db.createCollection("c", {capped: true, size: 1024})
|
|
// This should return a cursor id of 0, but instead returns a non-zero id.
|
mongos> db.runCommand({find: "c", tailable: true})
|
{
|
"cursor" : {
|
"id" : NumberLong("3460288308744221894"),
|
"ns" : "test.c",
|
"firstBatch" : [ ]
|
},
|
"ok" : 1
|
}
|
|
// If documents are inserted into the capped collection, they will not be returned by subsequent getMores against the mongos cursor.
|
mongos> db.c.insert({a: 1})
|
mongos> db.c.insert({a: 1})
|
mongos> db.c.insert({a: 1})
|
mongos> db.c.insert({a: 1})
|
mongos> db.runCommand({getMore: NumberLong("3460288308744221894"), collection: "c"})
|
{
|
"cursor" : {
|
"id" : NumberLong("3460288308744221894"),
|
"ns" : "test.c",
|
"nextBatch" : [ ]
|
},
|
"ok" : 1
|
}
|
|