summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorKevin Albertson <kevin.albertson@10gen.com>2015-06-11 10:30:46 -0400
committerKevin Albertson <kevin.albertson@10gen.com>2015-07-17 12:07:32 -0400
commitc33f68518b06e6b98596a8133d097e75d8431293 (patch)
tree49757af46288b63155e554f5bcc64b026ef494f4 /jstests
parent0db35ed67ac5c22969cc674a43bf741f85cd9bdc (diff)
downloadmongo-c33f68518b06e6b98596a8133d097e75d8431293.tar.gz
SERVER-19097 Add version 3 to 2dsphere index
Diffstat (limited to 'jstests')
-rw-r--r--jstests/core/geo_s2indexversion1.js6
-rw-r--r--jstests/multiVersion/geo_2dsphere_v2_to_v3.js113
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