Skip to content

Instantly share code, notes, and snippets.

@andrewjstone
Created June 3, 2011 21:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewjstone/1007236 to your computer and use it in GitHub Desktop.
Save andrewjstone/1007236 to your computer and use it in GitHub Desktop.
Connect to mongodb with replica sets using native driver and allow testing of failover via web interface
var mongo = require('mongodb'),
Server = mongo.Server,
ReplSetServers = mongo.ReplSetServers,
http = require('http'),
inspect = require('util').inspect
;
var replSet = new ReplSetServers([
new Server('1.1.1.1', 27017, {auto_reconnect: true}),
new Server('2.2.2.2', 27017, {auto_reconnect: true}),
new Server('3.3.3.3', 27017, {auto_reconnect: true})
],
{rs_name: 'rs1'}
);
var client, collection;
var cool_kids = ['Andrew', 'Jake', 'Mark', 'Pin-Bo', 'Bob', 'Chris', 'Sabo', 'Leonard'];
var db = new mongo.Db('repltest', replSet);
var server = http.createServer(function(req, res) {
if (req.url != '/query' && req.url != '/insert') {
return res.end();
}
req.on('data', function(chunk) {
console.log("data received: "+chunk);
});
req.on('end', function() {
if (req.url === '/insert') {
var i = Math.floor(Math.random()*cool_kids.length);
collection.insert({name: cool_kids[i]}, {safe: true}, function(err, docs) {
if (err) return res.end(err);
return res.end('Added '+cool_kids[i]+' to the cool_kids collection');
});
} else { // query
collection.find({}).toArray(function(err, docs) {
if (err) return res.end(err);
return res.end(inspect(docs));
});
}
});
});
server.listen(10000, function(err) {
function open() {
db.open(function(err, client_) {
if (err) console.error("db.open err: "+err);
client = client_;
client.dropDatabase(function(err, done) {
if (err) console.error("dropDatabase err: "+err);
client.createCollection('cool_kids', function(err, collection_) {
if (err) console.error("createCollection err: "+err);
collection = collection_;
collection.insert({name: 'Andrew'}, {safe: true}, function(err, docs) {
if (err) console.error("insert err: "+err);
});
});
});
});
}
db.on('timeout', function(replSet) {
console.error("Err: server timeout");
});
db.on('close', function(replSet) {
var err = new Error('close err');
console.error("Err: server close: "+err.stack);
});
open();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment