diff options
author | Kevin Albertson <kevin.albertson@10gen.com> | 2015-06-11 10:30:46 -0400 |
---|---|---|
committer | Kevin Albertson <kevin.albertson@10gen.com> | 2015-07-17 12:07:32 -0400 |
commit | c33f68518b06e6b98596a8133d097e75d8431293 (patch) | |
tree | 49757af46288b63155e554f5bcc64b026ef494f4 /jstests | |
parent | 0db35ed67ac5c22969cc674a43bf741f85cd9bdc (diff) | |
download | mongo-c33f68518b06e6b98596a8133d097e75d8431293.tar.gz |
SERVER-19097 Add version 3 to 2dsphere index
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/core/geo_s2indexversion1.js | 6 | ||||
-rw-r--r-- | jstests/multiVersion/geo_2dsphere_v2_to_v3.js | 113 |
2 files changed, 116 insertions, 3 deletions
diff --git a/jstests/core/geo_s2indexversion1.js b/jstests/core/geo_s2indexversion1.js index 5a2e0877d9e..0899eb404cd 100644 --- a/jstests/core/geo_s2indexversion1.js +++ b/jstests/core/geo_s2indexversion1.js @@ -17,7 +17,7 @@ res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 0}); assert.commandFailed(res); coll.drop(); -res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 3}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 4}); assert.commandFailed(res); coll.drop(); @@ -66,13 +66,13 @@ assert.commandWorked(res); coll.drop(); // -// {2dsphereIndexVersion: 2} should be the default for new indexes. +// {2dsphereIndexVersion: 3} should be the default for new indexes. // res = coll.ensureIndex({geo: "2dsphere"}); assert.commandWorked(res); var specObj = coll.getIndexes().filter( function(z){ return z.name == "geo_2dsphere"; } )[0]; -assert.eq(2, specObj["2dsphereIndexVersion"]); +assert.eq(3, specObj["2dsphereIndexVersion"]); coll.drop(); // diff --git a/jstests/multiVersion/geo_2dsphere_v2_to_v3.js b/jstests/multiVersion/geo_2dsphere_v2_to_v3.js new file mode 100644 index 00000000000..d223358c3de --- /dev/null +++ b/jstests/multiVersion/geo_2dsphere_v2_to_v3.js @@ -0,0 +1,113 @@ +// Tests upgrade/downgrade between 2dsphere index versions 2 and 3 + +function generatePoint() { + var longitude = Math.random() * 10 - 5; + var latitude = Math.random() * 10 - 5; + var pt = { + geometry : { + type : "Point", + coordinates : [longitude, latitude] + } + }; + return pt; +} + +// Generates random points in lat/lon square +// of size 10x10 centered at [0,0] +function generatePoints(amount) { + var points = []; + for (var i = 0; i < amount; i++) { + points.push(generatePoint()); + } + return points; +} + +function generatePolygons(amount) { + var polygons = []; + for (var i = 0; i < amount; i++) { + var numpoints = 4 + Math.floor(Math.random() * 10); + var dist = Math.random() * 5 + .01; + var coordinates = []; + for (var j = 0; j < numpoints-1; j++) { + var angle = (j/numpoints) * 2 * Math.PI; + coordinates.push([dist * Math.cos(angle), dist * Math.sin(angle)]); + } + coordinates.push(coordinates[0]); + polygons.push({ + geometry: { + type: "Polygon", + coordinates: [coordinates] + } + }); + } + return polygons; +} + +function getCollection(conn) { + return conn.getDB("test").twoDSphereVersion; +} + +function get2dsphereIndexVersion(coll) { + var indexes = coll.getIndexes(); + for (var i = 0; i < indexes.length; i++) { + if (indexes[i].name == "geometry_2dsphere") { + return indexes[i]["2dsphereIndexVersion"]; + } + } + return -1; +} + +var nearQuery = { + geometry: { + $near : { + $geometry : { + type: "Point", + coordinates: [0,0] + } + } + } +}; + +var mongod = MongoRunner.runMongod({binVersion: "3.0"}); +var coll = getCollection(mongod); +var res = coll.insert(generatePoints(10)); +res = coll.insert(generatePolygons(10)); +res = coll.createIndex({geometry: "2dsphere"}, {"2dsphereIndexVersion": 2}); +assert.eq(2, get2dsphereIndexVersion(coll)); +res = coll.find(nearQuery); +assert.eq(res.itcount(), 20); + +// Version 2 index should still work fine in latest +MongoRunner.stopMongod(mongod); +mongod = MongoRunner.runMongod({binVersion: "latest", restart: mongod}); +coll = getCollection(mongod); +assert.eq(2, get2dsphereIndexVersion(coll)); +res = coll.find(nearQuery); +assert.eq(res.itcount(), 20); + +// reindex to version 3 +coll.dropIndex({geometry: "2dsphere"}); +res = coll.createIndex({geometry: "2dsphere"}, {"2dsphereIndexVersion": 3}); +assert.eq(3, get2dsphereIndexVersion(coll)); +res = coll.find(nearQuery); +assert.eq(res.itcount(), 20); + +// downgrading shouldn't be able to startup because of assertion error +MongoRunner.stopMongod(mongod); +var failed_mongod = MongoRunner.runMongod({binVersion: "3.0", restart: mongod}); +assert.eq(failed_mongod, null); + +// upgrade, reindex, then downgrade to fix +mongod = MongoRunner.runMongod({binVersion: "latest", restart: mongod}) +coll = getCollection(mongod); +assert.eq(3, get2dsphereIndexVersion(coll)); +res = coll.dropIndex({geometry: "2dsphere"}); +res = coll.createIndex({geometry: "2dsphere"}, {"2dsphereIndexVersion": 2}); +assert.eq(2, get2dsphereIndexVersion(coll)); +MongoRunner.stopMongod(mongod); +mongod = MongoRunner.runMongod({binVersion: "3.0", restart: mongod}); +assert.neq(mongod, null); +coll = getCollection(mongod); +assert.eq(2, get2dsphereIndexVersion(coll)); +res = coll.find(nearQuery); +assert.eq(res.itcount(), 20);
\ No newline at end of file |