diff options
Diffstat (limited to 'jstests/use_power_of_2.js')
-rw-r--r-- | jstests/use_power_of_2.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/jstests/use_power_of_2.js b/jstests/use_power_of_2.js new file mode 100644 index 00000000000..3200c937452 --- /dev/null +++ b/jstests/use_power_of_2.js @@ -0,0 +1,86 @@ +/* This test ensures that the usePowerOf2 user flag + * effectively reuses space. The test repeatedly inserts and + * then deletes a batch of variable-length strings, then checks + * that doing so does not cause the storageSize to grow. */ + +// A bunch of strings of length 0 to 100 +var var_length_strings = + [ "" , + "aaaaa" , + "aaaaaaaaaa" , + "aaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ] + +//insert all the strings +var batch_insert = function(coll){ + for ( i=0; i < var_length_strings.length; i++ ){ + coll.insert( { a : var_length_strings[i] } ); + } +} + +//delete the same strings +var batch_delete = function(coll){ + for ( i=0; i < var_length_strings.length; i++ ){ + coll.remove( { a : var_length_strings[i] } ); + } +} + +//number of times to repeat batch inserts/deletes +var numrepeats = 1000; + +var testStorageSize = function(ns){ + //insert docs and measure storage size + batch_insert(ns); + var oldSize = ns.stats().storageSize; + + //remove and add same docs a bunch of times + for ( n=0 ; n < numrepeats ; n++ ){ + batch_delete(ns); + batch_insert(ns); + } + + //check size didn't change + var newSize = ns.stats().storageSize; + assert.eq( oldSize , newSize , "storage size changed"); +} + +/****************** TEST 1 *****************************/ + +//create fresh collection, set flag to true, test storage size +var coll = "usepower1" +var t = db.getCollection(coll); +t.drop(); +db.createCollection(coll); +var res = db.runCommand( { "collMod" : coll , "usePowerOf2Sizes" : true } ); +assert.eq( res.ok , 1 , "collMod failed" ); + +res = db.runCommand( { "collMod" : coll , "usePowerOf2Sizess" : true } ) +assert.eq( res.ok , 0 , "collMod should have failed: " + tojson( res ) ) + +testStorageSize(t); + +/**************** Test 2 *****************************/ + +//repeat previous test, but with flag set at creation time +var coll = "usepower2" +var t = db.getCollection(coll); +t.drop(); +db.runCommand({"create" : coll, "flags" : 1 }); + +testStorageSize(t); |