diff options
-rw-r--r-- | jstests/concurrency/fsm_workloads/findAndModify_update_grow.js | 2 | ||||
-rw-r--r-- | jstests/core/show_record_id.js (renamed from jstests/core/showdiskloc.js) | 10 | ||||
-rw-r--r-- | jstests/disk/quota2.js | 3 | ||||
-rw-r--r-- | jstests/mmap_v1/use_power_of_2.js | 6 | ||||
-rw-r--r-- | src/mongo/db/exec/idhack.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/exec/projection_exec.cpp | 12 | ||||
-rw-r--r-- | src/mongo/db/exec/projection_exec.h | 2 | ||||
-rw-r--r-- | src/mongo/db/query/lite_parsed_query.cpp | 30 | ||||
-rw-r--r-- | src/mongo/db/query/lite_parsed_query.h | 17 | ||||
-rw-r--r-- | src/mongo/db/query/lite_parsed_query_test.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/query/parsed_projection.cpp | 2 | ||||
-rw-r--r-- | src/mongo/shell/query.js | 14 |
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 ) { |