summaryrefslogtreecommitdiff
path: root/jstests/multiVersion/keystring_index.js
diff options
context:
space:
mode:
authorRobert Guo <robertguo@me.com>2020-03-17 16:04:08 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-03-18 04:07:46 +0000
commit4d87339d4b427966b9b9fcf879c17bef08437f94 (patch)
treed49e4cde09275c67c6a6698afcb47ac91c519c93 /jstests/multiVersion/keystring_index.js
parent5adb80de95ab4f7784eb2905f82e4d8712578e3a (diff)
downloadmongo-4d87339d4b427966b9b9fcf879c17bef08437f94.tar.gz
SERVER-46326 update last-stable to 4.3
Diffstat (limited to 'jstests/multiVersion/keystring_index.js')
-rw-r--r--jstests/multiVersion/keystring_index.js290
1 files changed, 0 insertions, 290 deletions
diff --git a/jstests/multiVersion/keystring_index.js b/jstests/multiVersion/keystring_index.js
deleted file mode 100644
index 24d3c694a79..00000000000
--- a/jstests/multiVersion/keystring_index.js
+++ /dev/null
@@ -1,290 +0,0 @@
-/**
- * Regression test that runs validate to test KeyString changes across 4.2 and the current
- * version as specified in SERVER-41908.
- *
- * - First, start mongod in 4.2.
- * - For each index create a new collection in testDb, inserting documents and finally an index is
- * created.
- * - After all indexes and collections are added, shutdown mongod.
- * - Restart the database as the current version.
- * - Run Validate.
- * - Remove all collections.
- * - Recreate all the indexes.
- * - Shuwdown mongod.
- * - Restart mongod in 4.2.
- * - Run Validate.
- *
- *
- * The following index types are tested:
- * - btree
- * - 2d
- * - geoHaystack
- * - 2dsphere
- * - text
- * - *hashed
- * - *wildcard
- * * these indexes are only created as v2 non-unique because they are not available unique or in v1
- *
- * For each index type, a v1 unique, v2 unique, v1 non-unique and v2 non-unique index
- * is considered except for hashed and wildcard, which only consider the v2 non-unique case.
- */
-(function() {
-'use strict';
-load('jstests/hooks/validate_collections.js');
-
-// ----- Config
-// The number of documents created for each collection
-const numDocs = 100;
-
-const indexTypes = [
- {
- // an indicator of what the index is
- indexName: "BTreeIndex",
- // This function is called to create documents, which are then inserted into the
- // collection.
- createDoc: i => ({
- a: i,
- b: {x: i, y: i + 1},
- c: [i, i + 1],
- }),
- // the options given to the .createIndex method
- // i.e. collection.createIndex(creationOptions)
- creationOptions: {a: 1, b: 1, c: -1},
- // This optional parameter specifies extra options to give to createIndex.
- // In the code, collection.createIndexes(creationOptions, createIndexOptions)
- // is called.
- createIndexOptions: {}
- },
- {indexName: "2d", createDoc: i => ({loc: [i, i]}), creationOptions: {loc: "2d"}},
- {
- indexName: "hayStack",
- createDoc: i => ({
- loc: {lng: (i / 2.0) * (i / 2.0), lat: (i / 2.0)},
- a: {x: i, y: i + 1, z: [i, i + 1]},
- }),
- creationOptions: {loc: "geoHaystack", a: 1},
- createIndexOptions: {bucketSize: 1}
- },
- {
- indexName: "2dSphere",
- createDoc: i => {
- if (i == 0)
- return {
- "loc": {
- "type": "Polygon",
- "coordinates": [[[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]]
- },
- b: {x: i, y: i + 1},
- c: [i, i + 1],
- };
- else
- return ({
- loc: {type: "Point", coordinates: [(i / 10.0) * (i / 10.0), (i / 10.0)]},
- b: {x: i, y: i + 1},
- c: [i, i + 1],
- });
- },
- creationOptions: {loc: "2dsphere", b: 1, c: -1}
- },
- {
- indexName: "text",
- createDoc: i => ({
- a: "a".repeat(i + 1),
- b: {x: i, y: i + 1, z: [i, i + 1]},
- }),
- creationOptions: {a: "text", b: 1}
- },
- {
- indexName: "hashed",
- createDoc: i => ({
- a: {x: i, y: i + 1, z: [i, i + 1]},
- }),
- creationOptions: {a: "hashed"}
- },
- {
- indexName: "wildCard",
- createDoc: i => {
- if (i == 0)
- return {};
- else if (i == 1)
- return {a: null};
- else if (i == 2)
- return {a: {}};
- else
- return {
- a: i,
- b: {x: i, y: i + 1},
- c: [i, i + 1],
- };
- },
- creationOptions: {"$**": 1}
- }
-];
-// -----
-
-const dbpath = MongoRunner.dataPath + 'keystring_index';
-resetDbpath(dbpath);
-
-const defaultOptions = {
- dbpath: dbpath,
- noCleanData: true
-};
-
-const testCollection = 'testColl';
-
-let mongodOptions42 = Object.extend({binVersion: '4.2'}, defaultOptions);
-let mongodOptionsCurrent = Object.extend({binVersion: 'latest'}, defaultOptions);
-
-// We will first start up an old binary version database, populate the database,
-// then upgrade and validate.
-
-// Start up an old binary version mongod.
-jsTestLog("Starting version: 4.2");
-let conn = MongoRunner.runMongod(mongodOptions42);
-
-assert.neq(null, conn, 'mongod was unable able to start with version ' + tojson(mongodOptions42));
-
-let testDb = conn.getDB('test');
-assert.neq(null, testDb, 'testDb not found. conn.getDB(\'test\') returned null');
-
-populateDb(testDb);
-MongoRunner.stopMongod(conn);
-
-jsTestLog("Starting version: latest");
-
-// Restart the mongod with the latest binary version on the old version's data files.
-conn = MongoRunner.runMongod(mongodOptionsCurrent);
-assert.neq(null, conn, 'mongod was unable to start with the latest version');
-testDb = conn.getDB('test');
-assert.neq(null, testDb, 'testDb not found');
-
-jsTestLog("Validating: 4.2 indexes with latest");
-
-// Validate all the indexes.
-assert.commandWorked(validateCollections(testDb, {full: true}));
-
-// Next, we will repopulate the database with the latest version then downgrade and run
-// validate.
-dropAllUserCollections(testDb);
-populateDb(testDb);
-MongoRunner.stopMongod(conn);
-
-conn = MongoRunner.runMongod(mongodOptions42);
-assert.neq(null, conn, 'mongod was unable able to start with version ' + tojson(mongodOptions42));
-
-testDb = conn.getDB('test');
-assert.neq(null, testDb, 'testDb not found. conn.getDB(\'test\') returned null');
-
-jsTestLog("Validating: latest indexes with 4.2");
-
-assert.commandWorked(validateCollections(testDb, {full: true}));
-MongoRunner.stopMongod(conn);
-
-// ----------------- Utilities
-
-// Populate the database using the config specified by the indexTypes array.
-function populateDb(testDb) {
- // Create a new collection and index for each indexType in the array.
- for (let i = 0; i < indexTypes.length; i++) {
- const indexOptions = indexTypes[i];
- // Try unique and non-unique.
- for (const unique in [true, false]) {
- // Try index-version 1 and 2.
- for (let indexVersion = 1; indexVersion <= 2; indexVersion++) {
- let indexName = indexOptions.indexName;
-
- // We only run V2 non-unique for hashed and wildCard because they don't exist in
- // v1.
- if ((indexName == "hashed" || indexName == "wildCard") &&
- (unique == true || indexVersion == 1))
- continue;
-
- indexName += unique == true ? "Unique" : "NotUnique";
- indexName += `Version${indexVersion}`;
- let collectionName = testCollection + '_' + indexName;
- print(`${indexName}: Creating Collection`);
- assert.commandWorked(testDb.createCollection(collectionName));
-
- print(`${indexName}: Inserting Documents`);
- if (unique)
- insertDocumentsUnique(testDb[collectionName], numDocs, indexOptions.createDoc);
- else
- insertDocumentsNotUnique(
- testDb[collectionName], numDocs, indexOptions.createDoc);
-
- let extraCreateIndexOptions = {
- name: indexName,
- v: indexVersion,
- unique: unique == true
- };
-
- if ("createIndexOptions" in indexOptions)
- extraCreateIndexOptions =
- Object.extend(extraCreateIndexOptions, indexOptions.createIndexOptions);
- print(JSON.stringify(extraCreateIndexOptions));
- print(`${indexName}: Creating Index`);
- assert.commandWorked(testDb[collectionName].createIndex(
- indexOptions.creationOptions, extraCreateIndexOptions));
-
- // Assert that the correct index type was created.
- let indexSpec = getIndexSpecByName(testDb[collectionName], indexName);
- assert.eq(indexVersion, indexSpec.v, tojson(indexSpec));
- }
- }
- }
-}
-
-// Drop all user created collections in a database.
-function dropAllUserCollections(testDb) {
- testDb.getCollectionNames().forEach((collName) => {
- if (!collName.startsWith("system.")) {
- testDb[collName].drop();
- }
- });
-}
-
-function getIndexSpecByName(coll, indexName) {
- const indexes = coll.getIndexes();
- const indexesFilteredByName = indexes.filter(spec => spec.name === indexName);
- assert.eq(
- 1, indexesFilteredByName.length, "index '" + indexName + "' not found: " + tojson(indexes));
- return indexesFilteredByName[0];
-}
-
-function fibonacci(num, memo) {
- memo = memo || {};
-
- if (memo[num])
- return memo[num];
- if (num <= 1)
- return 1;
-
- memo[num] = fibonacci(num - 1, memo) + fibonacci(num - 2, memo);
- return memo[num];
-}
-
-// Insert numDocs documents into the collection by calling getDoc.
-// NOTE: Documents returned from getDoc are inserted more than once.
-function insertDocumentsNotUnique(collection, numDocs, getDoc) {
- let fibNum = 0;
- // fibonacci numbers are used because the fibonnaci sequence is a
- // exponentially growing sequence that allows us to create documents
- // that are duplicated X number of times, for many small values of X and
- // a few large values of X.
- for (let i = 0; i < numDocs; i += fibonacci(fibNum++)) {
- let doc = getDoc(i);
- for (let j = 0; j < fibonacci(fibNum); j++) {
- assert.commandWorked(collection.insert(doc));
- }
- }
-}
-
-// Inserts numDocs into the collection by calling getDoc.
-// NOTE: getDoc is called exactly numDocs times.
-function insertDocumentsUnique(collection, numDocs, getDoc) {
- for (let i = 0; i < numDocs; i++) {
- let doc = getDoc(i);
- assert.commandWorked(collection.insert(doc));
- }
-}
-})();