Created
June 3, 2011 21:50
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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