Skip to content

Commit e10a9be

Browse files
committed
NODE-696 Handle interrupted error for createIndexes
1 parent 915d5c8 commit e10a9be

File tree

3 files changed

+87
-1
lines changed

3 files changed

+87
-1
lines changed

lib/db.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,9 +1065,10 @@ var createIndex = function(self, name, fieldOrSpec, options, callback) {
10651065
// 67 = 'CannotCreateIndex' (malformed index options)
10661066
// 85 = 'IndexOptionsConflict' (index already exists with different options)
10671067
// 11000 = 'DuplicateKey' (couldn't build unique index because of dupes)
1068+
// 11600 = 'InterruptedAtShutdown' (interrupted at shutdown)
10681069
// These errors mean that the server recognized `createIndex` as a command
10691070
// and so we don't need to fallback to an insert.
1070-
if(err.code === 67 || err.code == 11000 || err.code === 85) {
1071+
if(err.code === 67 || err.code == 11000 || err.code === 85 || err.code == 11600) {
10711072
return handleCallback(callback, err, result);
10721073
}
10731074

test/functional/apm_tests.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,3 +974,30 @@ exports['Ensure killcursor commands are sent on 3.0 or earlier when APM is enabl
974974
});
975975
}
976976
}
977+
978+
exports['Ensure killcursor commands are sent on 3.0 or earlier when APM is enabled'] = {
979+
metadata: { requires: { topology: ['single', 'replicaset'] } },
980+
981+
// The actual test we wish to run
982+
test: function(configuration, test) {
983+
var started = [];
984+
var succeeded = [];
985+
var failed = [];
986+
var callbackTriggered = false;
987+
988+
var listener = require('../..').instrument(function(err, instrumentations) {});
989+
var db = configuration.newDbInstance({w:1}, {poolSize:1, auto_reconnect:false});
990+
db.open(function(err, db) {
991+
var collection = db.collection('apm_killcursor_tests_1');
992+
993+
// make sure collection has records (more than 2)
994+
collection.insert({}, function(err, r) {
995+
test.equal(null, err);
996+
997+
listener.uninstrument();
998+
db.close();
999+
test.done();
1000+
});
1001+
});
1002+
}
1003+
}

test/functional/replset_failover_tests.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,3 +553,61 @@ exports['shouldStillQuerySecondaryWhenNoPrimaryAvailable'] = {
553553
});
554554
}
555555
}
556+
557+
// /**
558+
// * @ignore
559+
// */
560+
// exports['Should correctly re-execute createIndex against primary after step-down'] = {
561+
// metadata: { requires: { topology: 'replicaset' } },
562+
563+
// test: function(configuration, test) {
564+
// // The state
565+
// var manager = configuration.manager;
566+
567+
// var db = configuration.newDbInstance({w:1}, {poolSize:1});
568+
// db.open(function(err, db) {
569+
// db.once('fullsetup', function() {
570+
// // Wait for close event due to primary stepdown
571+
// db.serverConfig.on('joined', function(t, d, s) {
572+
// if(t == 'primary') console.log("primary joined " + s.name)
573+
// });
574+
575+
// db.serverConfig.on('left', function(t, s) {
576+
// if(t == 'primary') {
577+
// }
578+
// });
579+
580+
// manager.primary().then(function(primary) {
581+
// primary.stop(9).then(function() {
582+
// });
583+
584+
// // // Execute createIndex
585+
// // db.collection('t').createIndex({'accessControl.get': 1}, {background: true}, function(err, r) {
586+
// // console.dir(err)
587+
// // console.dir(r)
588+
589+
// // test.ok(err != null);
590+
// // test.ok(err.message.indexOf('key accessControl.get must not contain') == -1);
591+
592+
// // db.close();
593+
// // test.done();
594+
// // });
595+
596+
// setTimeout(function() {
597+
// // Execute createIndex
598+
// db.collection('t').createIndex({'accessControl.get': 1}, {background: true}, function(err, r) {
599+
// console.dir(err)
600+
// console.dir(r)
601+
602+
// test.ok(err != null);
603+
// test.ok(err.message.indexOf('key accessControl.get must not contain') == -1);
604+
605+
// db.close();
606+
// test.done();
607+
// });
608+
// }, 100);
609+
// });
610+
// });
611+
// });
612+
// }
613+
// }

0 commit comments

Comments
 (0)