summaryrefslogtreecommitdiff
path: root/jstests/slow2/dur_big_atomic_update.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/slow2/dur_big_atomic_update.js')
-rw-r--r--jstests/slow2/dur_big_atomic_update.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/jstests/slow2/dur_big_atomic_update.js b/jstests/slow2/dur_big_atomic_update.js
new file mode 100644
index 00000000000..18a7c4a68f2
--- /dev/null
+++ b/jstests/slow2/dur_big_atomic_update.js
@@ -0,0 +1,48 @@
+// @file dur_big_atomic_update.js
+//
+// this tests writing 1GB in an atomic update to make sure we commit periodically
+
+var path = MongoRunner.dataDir + "/dur_big_atomic_update";
+
+conn = startMongodEmpty("--port", 30001, "--dbpath", path, "--dur", "--durOptions", 8);
+d = conn.getDB("test");
+d.foo.drop();
+
+for (var i=0; i<1024; i++){
+ d.foo.insert({_id:i});
+}
+
+big_string = 'xxxxxxxxxxxxxxxx';
+while (big_string.length < 1024*1024) {
+ big_string += big_string;
+}
+
+d.foo.update({$atomic:1}, {$set: {big_string: big_string}}, false, /*multi*/true);
+err = d.getLastErrorObj();
+
+assert(err.err == null);
+assert(err.n == 1024);
+
+d.dropDatabase();
+
+for (var i=0; i<1024; i++){
+ d.foo.insert({_id:i});
+}
+
+// Do it again but in a db.eval
+d.eval(
+ function(big_string) {
+ new Mongo().getDB("test").foo.update({}, {$set: {big_string: big_string}}, false, /*multi*/true)
+ }, big_string); // Can't pass in connection or DB objects
+
+err = d.getLastErrorObj();
+
+assert(err.err == null);
+assert(err.n == 1024);
+
+// free up space
+d.dropDatabase();
+
+stopMongod(30001);
+
+print("dur big atomic update SUCCESS");