diff options
Diffstat (limited to 'jstests/core/compact.js')
-rw-r--r-- | jstests/core/compact.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/jstests/core/compact.js b/jstests/core/compact.js new file mode 100644 index 00000000000..2121debc17e --- /dev/null +++ b/jstests/core/compact.js @@ -0,0 +1,76 @@ +// compact.js + +var mydb = db.getSiblingDB('compact'); +t = mydb.compacttest; +t.drop(); +t.insert({ x: 3 }); +t.insert({ x: 3 }); +t.insert({ x: 5 }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.insert({ x: 4, z: 2, k: 'aaa' }); +t.ensureIndex({ x: 1 }); + +print("1"); + +var res = mydb.runCommand({ compact: 'compacttest', dev: true, force: true }); +printjson(res); +assert(res.ok); +assert(t.count() == 9); +var v = t.validate(true); +assert(v.ok); +assert(v.extentCount == 1); +assert(v.deletedCount == 1); +assert(t.getIndexes().length == 2); +var ssize = t.stats().storageSize; + +print("2"); +res = mydb.runCommand({ compact: 'compacttest', dev: true,paddingBytes:1000, force:true }); +assert(res.ok); +assert(t.count() == 9); +var v = t.validate(true); +assert(v.ok); +assert(t.stats().storageSize > ssize, "expected more storage given padding is higher. however it rounds off so if something changed this could be"); +//printjson(t.stats()); + +print("z"); + +t.insert({ x: 4, z: 2, k: { a: "", b: ""} }); +t.insert({ x: 4, z: 2, k: { a: "", b: ""} }); +t.insert({ x: 4, z: 2, k: { a: "", b: ""} }); +t.insert({ x: 4, z: 2, k: { a: "", b: ""} }); +t.insert({ x: 4, z: null, k: { f: "", b: ""} }); +t.insert({ x: 4, z: null, k: { c: ""} }); +t.insert({ x: 4, z: null, k: { h: ""} }); +t.insert({ x: 4, z: null }); +t.insert({ x: 4, z: 3}); +t.insert({ x: 4, z: 2, k: { a: "", b: ""} }); +t.insert({ x: 4, z: null, k: { c: ""} }); +t.insert({ x: 4, z: null, k: { c: ""} }); +t.insert({ x: 4, z: 3, k: { c: ""} }); + +t.ensureIndex({ z: 1, k: 1 }); +//t.ensureIndex({ z: 1, k: 1 }, { unique: true }); +//t.ensureIndex({ z: 1, k: 1 }, { dropDups: true, unique:true }); + +res = mydb.runCommand({ compact: 'compacttest', dev: true, paddingFactor: 1.2, force:true }); +printjson(res); +assert(res.ok); +assert(t.count() > 13); +var v = t.validate(true); +assert(v.ok); + +print("3"); + +// works on an empty collection? +t.remove({}); +assert(mydb.runCommand({ compact: 'compacttest', dev: true, force:true }).ok); +assert(t.count() == 0); +v = t.validate(true); +assert(v.ok); +assert(v.extentCount == 1); +assert(t.getIndexes().length == 3); + |