diff options
Diffstat (limited to 'jstests/noPassthrough/wt_index_option_defaults.js')
-rw-r--r-- | jstests/noPassthrough/wt_index_option_defaults.js | 265 |
1 files changed, 132 insertions, 133 deletions
diff --git a/jstests/noPassthrough/wt_index_option_defaults.js b/jstests/noPassthrough/wt_index_option_defaults.js index 46e91a174e6..ce4f1a1c78d 100644 --- a/jstests/noPassthrough/wt_index_option_defaults.js +++ b/jstests/noPassthrough/wt_index_option_defaults.js @@ -7,152 +7,151 @@ * inMemoryIndexConfigString. */ (function() { - 'use strict'; - - var engine = 'wiredTiger'; - if (jsTest.options().storageEngine) { - engine = jsTest.options().storageEngine; +'use strict'; + +var engine = 'wiredTiger'; +if (jsTest.options().storageEngine) { + engine = jsTest.options().storageEngine; +} + +// Skip this test if not running with the right storage engine. +if (engine !== 'wiredTiger' && engine !== 'inMemory') { + jsTest.log('Skipping test because storageEngine is not "wiredTiger" or "inMemory"'); + return; +} + +// Skip this test when 'xxxIndexConfigString' is already set in TestData. +// TODO: This test can be enabled when MongoRunner supports combining WT config strings with +// commas. +if (jsTest.options()[engine + 'IndexConfigString']) { + jsTest.log('Skipping test because system-wide defaults for index options are already set'); + return; +} + +// Use different values for the same configuration string key to test that index-specific +// options override collection-wide options, and that collection-wide options override +// system-wide options. +var systemWideConfigString = 'split_pct=70,'; +var collectionWideConfigString = 'split_pct=75,'; +var indexSpecificConfigString = 'split_pct=80,'; + +// Start up a mongod with system-wide defaults for index options and create a collection without +// any additional options. Tests than an index without any additional options should take on the +// system-wide defaults, whereas an index with additional options should override the +// system-wide defaults. +runTest({}); + +// Start up a mongod with system-wide defaults for index options and create a collection with +// additional options. Tests than an index without any additional options should take on the +// collection-wide defaults, whereas an index with additional options should override the +// collection-wide defaults. +runTest({indexOptionDefaults: collectionWideConfigString}); + +function runTest(collOptions) { + var hasIndexOptionDefaults = collOptions.hasOwnProperty('indexOptionDefaults'); + + var dbpath = MongoRunner.dataPath + 'wt_index_option_defaults'; + resetDbpath(dbpath); + + // Start a mongod with system-wide defaults for engine-specific index options. + var conn = MongoRunner.runMongod({ + dbpath: dbpath, + noCleanData: true, + [engine + 'IndexConfigString']: systemWideConfigString, + }); + assert.neq(null, conn, 'mongod was unable to start up'); + + var testDB = conn.getDB('test'); + var cmdObj = {create: 'coll'}; + + // Apply collection-wide defaults for engine-specific index options if any were + // specified. + if (hasIndexOptionDefaults) { + cmdObj.indexOptionDefaults = { + storageEngine: {[engine]: {configString: collOptions.indexOptionDefaults}} + }; } + assert.commandWorked(testDB.runCommand(cmdObj)); - // Skip this test if not running with the right storage engine. - if (engine !== 'wiredTiger' && engine !== 'inMemory') { - jsTest.log('Skipping test because storageEngine is not "wiredTiger" or "inMemory"'); - return; - } + // Create an index that does not specify any engine-specific options. + assert.commandWorked(testDB.coll.createIndex({a: 1}, {name: 'without_options'})); - // Skip this test when 'xxxIndexConfigString' is already set in TestData. - // TODO: This test can be enabled when MongoRunner supports combining WT config strings with - // commas. - if (jsTest.options()[engine + 'IndexConfigString']) { - jsTest.log('Skipping test because system-wide defaults for index options are already set'); - return; - } + // Create an index that specifies engine-specific index options. + assert.commandWorked(testDB.coll.createIndex({b: 1}, { + name: 'with_options', + storageEngine: {[engine]: {configString: indexSpecificConfigString}} + })); - // Use different values for the same configuration string key to test that index-specific - // options override collection-wide options, and that collection-wide options override - // system-wide options. - var systemWideConfigString = 'split_pct=70,'; - var collectionWideConfigString = 'split_pct=75,'; - var indexSpecificConfigString = 'split_pct=80,'; - - // Start up a mongod with system-wide defaults for index options and create a collection without - // any additional options. Tests than an index without any additional options should take on the - // system-wide defaults, whereas an index with additional options should override the - // system-wide defaults. - runTest({}); - - // Start up a mongod with system-wide defaults for index options and create a collection with - // additional options. Tests than an index without any additional options should take on the - // collection-wide defaults, whereas an index with additional options should override the - // collection-wide defaults. - runTest({indexOptionDefaults: collectionWideConfigString}); - - function runTest(collOptions) { - var hasIndexOptionDefaults = collOptions.hasOwnProperty('indexOptionDefaults'); - - var dbpath = MongoRunner.dataPath + 'wt_index_option_defaults'; - resetDbpath(dbpath); - - // Start a mongod with system-wide defaults for engine-specific index options. - var conn = MongoRunner.runMongod({ - dbpath: dbpath, - noCleanData: true, - [engine + 'IndexConfigString']: systemWideConfigString, - }); - assert.neq(null, conn, 'mongod was unable to start up'); - - var testDB = conn.getDB('test'); - var cmdObj = {create: 'coll'}; - - // Apply collection-wide defaults for engine-specific index options if any were - // specified. - if (hasIndexOptionDefaults) { - cmdObj.indexOptionDefaults = { - storageEngine: {[engine]: {configString: collOptions.indexOptionDefaults}} - }; - } - assert.commandWorked(testDB.runCommand(cmdObj)); - - // Create an index that does not specify any engine-specific options. - assert.commandWorked(testDB.coll.createIndex({a: 1}, {name: 'without_options'})); - - // Create an index that specifies engine-specific index options. - assert.commandWorked(testDB.coll.createIndex({b: 1}, { - name: 'with_options', - storageEngine: {[engine]: {configString: indexSpecificConfigString}} - })); - - var collStats = testDB.runCommand({collStats: 'coll'}); - assert.commandWorked(collStats); - - checkIndexWithoutOptions(collStats.indexDetails); - checkIndexWithOptions(collStats.indexDetails); - - MongoRunner.stopMongod(conn); - - function checkIndexWithoutOptions(indexDetails) { - var indexSpec = getIndexSpecByName(testDB.coll, 'without_options'); - assert(!indexSpec.hasOwnProperty('storageEngine'), - 'no storage engine options should have been set in the index spec: ' + - tojson(indexSpec)); - - var creationString = indexDetails.without_options.creationString; - if (hasIndexOptionDefaults) { - assert.eq(-1, - creationString.indexOf(systemWideConfigString), - 'system-wide index option present in the creation string even though a ' + - 'collection-wide option was specified: ' + creationString); - assert.lte(0, - creationString.indexOf(collectionWideConfigString), - 'collection-wide index option not present in the creation string: ' + - creationString); - } else { - assert.lte(0, - creationString.indexOf(systemWideConfigString), - 'system-wide index option not present in the creation string: ' + - creationString); - assert.eq(-1, - creationString.indexOf(collectionWideConfigString), - 'collection-wide index option present in creation string even though ' + - 'it was not specified: ' + creationString); - } + var collStats = testDB.runCommand({collStats: 'coll'}); + assert.commandWorked(collStats); - assert.eq(-1, - creationString.indexOf(indexSpecificConfigString), - 'index-specific option present in creation string even though it was not' + - ' specified: ' + creationString); - } + checkIndexWithoutOptions(collStats.indexDetails); + checkIndexWithOptions(collStats.indexDetails); - function checkIndexWithOptions(indexDetails) { - var indexSpec = getIndexSpecByName(testDB.coll, 'with_options'); - assert(indexSpec.hasOwnProperty('storageEngine'), - 'storage engine options should have been set in the index spec: ' + - tojson(indexSpec)); - assert.docEq({[engine]: {configString: indexSpecificConfigString}}, - indexSpec.storageEngine, - engine + ' index options not present in the index spec'); + MongoRunner.stopMongod(conn); - var creationString = indexDetails.with_options.creationString; + function checkIndexWithoutOptions(indexDetails) { + var indexSpec = getIndexSpecByName(testDB.coll, 'without_options'); + assert(!indexSpec.hasOwnProperty('storageEngine'), + 'no storage engine options should have been set in the index spec: ' + + tojson(indexSpec)); + + var creationString = indexDetails.without_options.creationString; + if (hasIndexOptionDefaults) { assert.eq(-1, creationString.indexOf(systemWideConfigString), - 'system-wide index option present in the creation string even though an ' + - 'index-specific option was specified: ' + creationString); - assert.eq(-1, - creationString.indexOf(collectionWideConfigString), - 'system-wide index option present in the creation string even though an ' + - 'index-specific option was specified: ' + creationString); + 'system-wide index option present in the creation string even though a ' + + 'collection-wide option was specified: ' + creationString); + assert.lte(0, + creationString.indexOf(collectionWideConfigString), + 'collection-wide index option not present in the creation string: ' + + creationString); + } else { assert.lte( 0, - creationString.indexOf(indexSpecificConfigString), - 'index-specific option not present in the creation string: ' + creationString); + creationString.indexOf(systemWideConfigString), + 'system-wide index option not present in the creation string: ' + creationString); + assert.eq(-1, + creationString.indexOf(collectionWideConfigString), + 'collection-wide index option present in creation string even though ' + + 'it was not specified: ' + creationString); } + + assert.eq(-1, + creationString.indexOf(indexSpecificConfigString), + 'index-specific option present in creation string even though it was not' + + ' specified: ' + creationString); } - function getIndexSpecByName(coll, indexName) { - var indexes = coll.getIndexes().filter(function(spec) { - return spec.name === indexName; - }); - assert.eq(1, indexes.length, 'index "' + indexName + '" not found'); - return indexes[0]; + function checkIndexWithOptions(indexDetails) { + var indexSpec = getIndexSpecByName(testDB.coll, 'with_options'); + assert( + indexSpec.hasOwnProperty('storageEngine'), + 'storage engine options should have been set in the index spec: ' + tojson(indexSpec)); + assert.docEq({[engine]: {configString: indexSpecificConfigString}}, + indexSpec.storageEngine, + engine + ' index options not present in the index spec'); + + var creationString = indexDetails.with_options.creationString; + assert.eq(-1, + creationString.indexOf(systemWideConfigString), + 'system-wide index option present in the creation string even though an ' + + 'index-specific option was specified: ' + creationString); + assert.eq(-1, + creationString.indexOf(collectionWideConfigString), + 'system-wide index option present in the creation string even though an ' + + 'index-specific option was specified: ' + creationString); + assert.lte(0, + creationString.indexOf(indexSpecificConfigString), + 'index-specific option not present in the creation string: ' + creationString); } +} + +function getIndexSpecByName(coll, indexName) { + var indexes = coll.getIndexes().filter(function(spec) { + return spec.name === indexName; + }); + assert.eq(1, indexes.length, 'index "' + indexName + '" not found'); + return indexes[0]; +} })(); |