summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jstests/concurrency/fsm_workloads/findAndModify_update_grow.js2
-rw-r--r--jstests/core/show_record_id.js (renamed from jstests/core/showdiskloc.js)10
-rw-r--r--jstests/disk/quota2.js3
-rw-r--r--jstests/mmap_v1/use_power_of_2.js6
-rw-r--r--src/mongo/db/exec/idhack.cpp2
-rw-r--r--src/mongo/db/exec/projection_exec.cpp12
-rw-r--r--src/mongo/db/exec/projection_exec.h2
-rw-r--r--src/mongo/db/query/lite_parsed_query.cpp30
-rw-r--r--src/mongo/db/query/lite_parsed_query.h17
-rw-r--r--src/mongo/db/query/lite_parsed_query_test.cpp8
-rw-r--r--src/mongo/db/query/parsed_projection.cpp2
-rw-r--r--src/mongo/shell/query.js14
12 files changed, 59 insertions, 49 deletions
diff --git a/jstests/concurrency/fsm_workloads/findAndModify_update_grow.js b/jstests/concurrency/fsm_workloads/findAndModify_update_grow.js
index c9c70fecc54..bbf17f2154d 100644
--- a/jstests/concurrency/fsm_workloads/findAndModify_update_grow.js
+++ b/jstests/concurrency/fsm_workloads/findAndModify_update_grow.js
@@ -94,7 +94,7 @@ var $config = (function() {
// Since the document has at least doubled in size, and the default
// allocation strategy of mmapv1 is to use power of two sizes, the
// document will have always moved
- assertWhenOwnColl.neq(before.$diskLoc, after.$diskLoc,
+ assertWhenOwnColl.neq(before.$recordId, after.$recordId,
'document should have moved');
}
}
diff --git a/jstests/core/showdiskloc.js b/jstests/core/show_record_id.js
index a5bcd87bbdd..d28cf6560e6 100644
--- a/jstests/core/showdiskloc.js
+++ b/jstests/core/show_record_id.js
@@ -1,30 +1,34 @@
-// Sanity check for the $showDiskLoc option.
+// Sanity check for the showRecordId option.
-t = db.jstests_showdiskloc;
+var t = db.show_record_id;
t.drop();
function checkResults( arr ) {
for( i in arr ) {
a = arr[ i ];
- assert( a['$diskLoc'] );
+ assert( a['$recordId'] );
}
}
// Check query.
t.save( {} );
checkResults( t.find()._addSpecial("$showDiskLoc" , true).toArray() );
+checkResults( t.find().showRecordId().toArray() );
// Check query and get more.
t.save( {} );
t.save( {} );
checkResults( t.find().batchSize( 2 )._addSpecial("$showDiskLoc" , true).toArray() );
+checkResults( t.find().batchSize( 2 ).showRecordId().toArray() );
// Check with a covered index.
t.ensureIndex( { a:1 } );
checkResults
( t.find( {}, { _id:0, a:1 } ).hint( { a:1 } )._addSpecial("$showDiskLoc" , true).toArray() );
+checkResults( t.find( {}, { _id:0, a:1 } ).hint( { a:1 } ).showRecordId().toArray() );
// Check with an idhack query.
t.drop();
t.save({_id: 0, a: 1});
checkResults( t.find( { _id: 0 } )._addSpecial("$showDiskLoc", true).toArray() );
+checkResults( t.find( { _id: 0 } ).showRecordId().toArray() );
diff --git a/jstests/disk/quota2.js b/jstests/disk/quota2.js
index 95639d7cc4c..a53e6dec6b8 100644
--- a/jstests/disk/quota2.js
+++ b/jstests/disk/quota2.js
@@ -26,7 +26,8 @@ for( i = 0; i < n; ++i ) {
c = db[ ''+i ];
res = c.insert({ b: big });
if( !res.hasWriteError() ) {
- assert.eq( 0, c.find()._addSpecial( "$showDiskLoc", true )[ 0 ].$diskLoc.file );
+ var recordId = c.find().showRecord()[0].$recordId;
+ assert.eq(0, recordId >> 32);
}
}
diff --git a/jstests/mmap_v1/use_power_of_2.js b/jstests/mmap_v1/use_power_of_2.js
index 26977034763..7e7d8a466b2 100644
--- a/jstests/mmap_v1/use_power_of_2.js
+++ b/jstests/mmap_v1/use_power_of_2.js
@@ -18,16 +18,16 @@ function checkStorageSize(expectedSize, sameLoc) {
t.insert(doc);
assert.eq(t.stats().size, expectedSize, "size should be expected");
- var oldLoc = t.find()._addSpecial("$showDiskLoc" , true).toArray()[0].$diskLoc;
+ var oldLoc = t.find().showRecordId().toArray()[0].$recordId;
// Remvoe smaller doc, insert a bigger one.
t.remove(doc);
t.insert(bigDoc);
- var newLoc = t.find()._addSpecial("$showDiskLoc" , true).toArray()[0].$diskLoc;
+ var newLoc = t.find().showRecordId().toArray()[0].$recordId;
// Check the diskloc of two docs.
- assert.eq(oldLoc.file == newLoc.file && oldLoc.offset == newLoc.offset, sameLoc);
+ assert.eq(friendlyEqual(oldLoc, newLoc), sameLoc);
}
t.drop();
diff --git a/src/mongo/db/exec/idhack.cpp b/src/mongo/db/exec/idhack.cpp
index d711ea02d35..98aeb7162ff 100644
--- a/src/mongo/db/exec/idhack.cpp
+++ b/src/mongo/db/exec/idhack.cpp
@@ -221,7 +221,7 @@ namespace mongo {
// static
bool IDHackStage::supportsQuery(const CanonicalQuery& query) {
- return !query.getParsed().showDiskLoc()
+ return !query.getParsed().showRecordId()
&& query.getParsed().getHint().isEmpty()
&& 0 == query.getParsed().getSkip()
&& CanonicalQuery::isSimpleIdQuery(query.getParsed().getFilter())
diff --git a/src/mongo/db/exec/projection_exec.cpp b/src/mongo/db/exec/projection_exec.cpp
index 62ea3fffe33..a200f17d381 100644
--- a/src/mongo/db/exec/projection_exec.cpp
+++ b/src/mongo/db/exec/projection_exec.cpp
@@ -131,8 +131,8 @@ namespace mongo {
if (e2.valuestr() == LiteParsedQuery::metaTextScore) {
_meta[e.fieldName()] = META_TEXT_SCORE;
}
- else if (e2.valuestr() == LiteParsedQuery::metaDiskLoc) {
- _meta[e.fieldName()] = META_DISKLOC;
+ else if (e2.valuestr() == LiteParsedQuery::metaRecordId) {
+ _meta[e.fieldName()] = META_RECORDID;
}
else if (e2.valuestr() == LiteParsedQuery::metaGeoNearPoint) {
_meta[e.fieldName()] = META_GEONEAR_POINT;
@@ -338,12 +338,8 @@ namespace mongo {
bob.append(it->first, 0.0);
}
}
- else if (META_DISKLOC == it->second) {
- // For compatibility with old versions, we output as a split DiskLoc.
- const int64_t repr = member->loc.repr();
- BSONObjBuilder sub(bob.subobjStart(it->first));
- sub.append("file", int(repr >> 32));
- sub.append("offset", int(uint32_t(repr)));
+ else if (META_RECORDID == it->second) {
+ bob.append(it->first, static_cast<long long>(member->loc.repr()));
}
}
diff --git a/src/mongo/db/exec/projection_exec.h b/src/mongo/db/exec/projection_exec.h
index 7a4023b831e..6b8dd1456af 100644
--- a/src/mongo/db/exec/projection_exec.h
+++ b/src/mongo/db/exec/projection_exec.h
@@ -56,7 +56,7 @@ namespace mongo {
META_TEXT_SCORE,
META_GEONEAR_DIST,
META_GEONEAR_POINT,
- META_DISKLOC,
+ META_RECORDID,
META_IX_KEY,
};
diff --git a/src/mongo/db/query/lite_parsed_query.cpp b/src/mongo/db/query/lite_parsed_query.cpp
index 6974add4360..6d0bf7aabec 100644
--- a/src/mongo/db/query/lite_parsed_query.cpp
+++ b/src/mongo/db/query/lite_parsed_query.cpp
@@ -45,7 +45,7 @@ namespace mongo {
const string LiteParsedQuery::metaTextScore("textScore");
const string LiteParsedQuery::metaGeoNearDistance("geoNearDistance");
const string LiteParsedQuery::metaGeoNearPoint("geoNearPoint");
- const string LiteParsedQuery::metaDiskLoc("diskloc");
+ const string LiteParsedQuery::metaRecordId("recordId");
const string LiteParsedQuery::metaIndexKey("indexKey");
namespace {
@@ -236,13 +236,13 @@ namespace mongo {
pq->_returnKey = el.boolean();
}
- else if (mongoutils::str::equals(fieldName, "showDiskLoc")) {
+ else if (mongoutils::str::equals(fieldName, "showRecordId")) {
Status status = checkFieldType(el, Bool);
if (!status.isOK()) {
return status;
}
- pq->_showDiskLoc = el.boolean();
+ pq->_showRecordId = el.boolean();
}
else if (mongoutils::str::equals(fieldName, "snapshot")) {
Status status = checkFieldType(el, Bool);
@@ -339,8 +339,8 @@ namespace mongo {
if (pq->returnKey()) {
pq->addReturnKeyMetaProj();
}
- if (pq->showDiskLoc()) {
- pq->addShowDiskLocMetaProj();
+ if (pq->showRecordId()) {
+ pq->addShowRecordIdMetaProj();
}
Status validateStatus = pq->validate();
@@ -363,12 +363,12 @@ namespace mongo {
_proj = projBob.obj();
}
- void LiteParsedQuery::addShowDiskLocMetaProj() {
+ void LiteParsedQuery::addShowRecordIdMetaProj() {
BSONObjBuilder projBob;
projBob.appendElements(_proj);
- BSONObj metaDiskLoc = BSON("$diskLoc" <<
- BSON("$meta" << LiteParsedQuery::metaDiskLoc));
- projBob.append(metaDiskLoc.firstElement());
+ BSONObj metaRecordId = BSON("$recordId" <<
+ BSON("$meta" << LiteParsedQuery::metaRecordId));
+ projBob.append(metaRecordId.firstElement());
_proj = projBob.obj();
}
@@ -485,8 +485,8 @@ namespace mongo {
}
// static
- bool LiteParsedQuery::isDiskLocMeta(BSONElement elt) {
- // elt must be foo: {$meta: "diskloc"}
+ bool LiteParsedQuery::isRecordIdMeta(BSONElement elt) {
+ // elt must be foo: {$meta: "recordId"}
if (mongo::Object != elt.type()) {
return false;
}
@@ -503,7 +503,7 @@ namespace mongo {
if (mongo::String != metaElt.type()) {
return false;
}
- if (LiteParsedQuery::metaDiskLoc != metaElt.valuestr()) {
+ if (LiteParsedQuery::metaRecordId != metaElt.valuestr()) {
return false;
}
// must have exactly 1 element
@@ -556,7 +556,7 @@ namespace mongo {
_maxScan(0),
_maxTimeMS(0),
_returnKey(false),
- _showDiskLoc(false),
+ _showRecordId(false),
_snapshot(false),
_hasReadPref(false),
_tailable(false),
@@ -755,8 +755,8 @@ namespace mongo {
else if (str::equals("showDiskLoc", name)) {
// Won't throw.
if (e.trueValue()) {
- _showDiskLoc = true;
- addShowDiskLocMetaProj();
+ _showRecordId = true;
+ addShowRecordIdMetaProj();
}
}
else if (str::equals("maxTimeMS", name)) {
diff --git a/src/mongo/db/query/lite_parsed_query.h b/src/mongo/db/query/lite_parsed_query.h
index 9ac918e951f..71f98ae6f37 100644
--- a/src/mongo/db/query/lite_parsed_query.h
+++ b/src/mongo/db/query/lite_parsed_query.h
@@ -77,10 +77,11 @@ namespace mongo {
static bool isTextScoreMeta(BSONElement elt);
/**
- * Helper function to identify diskLoc projection
- * Example: {a: {$meta: "diskloc"}}.
+ * Helper function to identify recordId projection.
+ *
+ * Example: {a: {$meta: "recordId"}}.
*/
- static bool isDiskLocMeta(BSONElement elt);
+ static bool isRecordIdMeta(BSONElement elt);
/**
* Helper function to validate a sort object.
@@ -105,7 +106,7 @@ namespace mongo {
static const std::string metaTextScore;
static const std::string metaGeoNearDistance;
static const std::string metaGeoNearPoint;
- static const std::string metaDiskLoc;
+ static const std::string metaRecordId;
static const std::string metaIndexKey;
const std::string& ns() const { return _ns; }
@@ -133,7 +134,7 @@ namespace mongo {
const BSONObj& getMax() const { return _max; }
bool returnKey() const { return _returnKey; }
- bool showDiskLoc() const { return _showDiskLoc; }
+ bool showRecordId() const { return _showRecordId; }
bool isSnapshot() const { return _snapshot; }
bool hasReadPref() const { return _hasReadPref; }
@@ -202,9 +203,9 @@ namespace mongo {
void addReturnKeyMetaProj();
/**
- * Updates the projection object with a $meta projection for the showDiskLoc option.
+ * Updates the projection object with a $meta projection for the showRecordId option.
*/
- void addShowDiskLocMetaProj();
+ void addShowRecordIdMetaProj();
/**
* Initializes options based on the value of the 'options' bit vector.
@@ -239,7 +240,7 @@ namespace mongo {
BSONObj _max;
bool _returnKey;
- bool _showDiskLoc;
+ bool _showRecordId;
bool _snapshot;
bool _hasReadPref;
diff --git a/src/mongo/db/query/lite_parsed_query_test.cpp b/src/mongo/db/query/lite_parsed_query_test.cpp
index 9bb4f29876a..de184b85111 100644
--- a/src/mongo/db/query/lite_parsed_query_test.cpp
+++ b/src/mongo/db/query/lite_parsed_query_test.cpp
@@ -284,7 +284,7 @@ namespace {
"filter: {a: 3},"
"sort: {a: 1},"
"projection: {_id: 0, a: 1},"
- "showDiskLoc: true,"
+ "showRecordId: true,"
"maxScan: 1000}}");
LiteParsedQuery* rawLpq;
@@ -294,7 +294,7 @@ namespace {
scoped_ptr<LiteParsedQuery> lpq(rawLpq);
// Make sure the values from the command BSON are reflected in the LPQ.
- ASSERT(lpq->showDiskLoc());
+ ASSERT(lpq->showRecordId());
ASSERT_EQUALS(1000, lpq->getMaxScan());
}
@@ -550,10 +550,10 @@ namespace {
}
- TEST(LiteParsedQueryTest, ParseFromCommandShowDiskLocWrongType) {
+ TEST(LiteParsedQueryTest, ParseFromCommandShowRecordIdWrongType) {
BSONObj cmdObj = fromjson("{find: 'testns',"
"filter: {a: 1},"
- "showDiskLoc: 3}");
+ "showRecordId: 3}");
LiteParsedQuery* rawLpq;
bool isExplain = false;
diff --git a/src/mongo/db/query/parsed_projection.cpp b/src/mongo/db/query/parsed_projection.cpp
index c18ddd4135e..c88cd715d3b 100644
--- a/src/mongo/db/query/parsed_projection.cpp
+++ b/src/mongo/db/query/parsed_projection.cpp
@@ -152,7 +152,7 @@ namespace mongo {
}
if (e2.valuestr() != LiteParsedQuery::metaTextScore
- && e2.valuestr() != LiteParsedQuery::metaDiskLoc
+ && e2.valuestr() != LiteParsedQuery::metaRecordId
&& e2.valuestr() != LiteParsedQuery::metaIndexKey
&& e2.valuestr() != LiteParsedQuery::metaGeoNearDistance
&& e2.valuestr() != LiteParsedQuery::metaGeoNearPoint) {
diff --git a/src/mongo/shell/query.js b/src/mongo/shell/query.js
index b3553f0ac89..4852763a004 100644
--- a/src/mongo/shell/query.js
+++ b/src/mongo/shell/query.js
@@ -35,7 +35,8 @@ DBQuery.prototype.help = function () {
print("\t.addOption(n) - adds op_query options -- see wire protocol")
print("\t._addSpecial(name, value) - http://dochub.mongodb.org/core/advancedqueries#AdvancedQueries-Metaqueryoperators")
print("\t.batchSize(n) - sets the number of docs to return per getMore")
- print("\t.showDiskLoc() - adds a $diskLoc field to each returned object")
+ print("\t.showDiskLoc() - Deprecated. Use showRecordId().")
+ print("\t.showRecordId() - adds a $recordId field to each returned object")
print("\t.min(idxDoc)")
print("\t.max(idxDoc)")
print("\t.comment(comment)")
@@ -187,7 +188,7 @@ DBQuery.prototype._convertToCommand = function() {
}
if (this._query.$showDiskLoc) {
- cmd["showDiskLoc"] = this._query.$showDiskLoc;
+ cmd["showRecordId"] = this._query.$showDiskLoc;
}
if (this._query.$snapshot) {
@@ -389,8 +390,15 @@ DBQuery.prototype.max = function( max ) {
return this._addSpecial( "$max" , max );
}
+/**
+ * Deprecated. Use showRecordId().
+ */
DBQuery.prototype.showDiskLoc = function() {
- return this._addSpecial( "$showDiskLoc" , true );
+ return this.showRecordId();
+}
+
+DBQuery.prototype.showRecordId = function() {
+ return this._addSpecial("$showDiskLoc", true);
}
DBQuery.prototype.maxTimeMS = function( maxTimeMS ) {