Skip to content

Instantly share code, notes, and snippets.

@oroce
Created August 14, 2013 20:40
Show Gist options
  • Save oroce/6235349 to your computer and use it in GitHub Desktop.
Save oroce/6235349 to your computer and use it in GitHub Desktop.
trying to do some multi-master sync with election
//master1.js
var level = require("level");
var SubLevel = require("level-sublevel");
var net = require("net");
var reconnect = require("reconnect-net");
var Replicate = require("level-replicate");
//setup the database.
var db = SubLevel(level("./example-master"));
//install Master plugin!
var master = Replicate(db, "master", "MASTER-1");
var server = net.createServer(function (stream) {
stream.pipe(master.createStream({tail: true})).pipe(stream);
}).on( "listening", function () {
console.log("[master1] master db listening on %s", server.address().port );
}).on( "close", function(){
console.log( "[master1] closing server" );
});
reconnect(function( stream ){
stream.pipe(master.createStream({tail: true})).pipe(stream);
})
.on( "error", function( err ){
console.error( err );
})
.on( "disconnect", function(){
if( !server._handle ){
console.log( "it's closed, start acting as master" );
server.listen( 9999 );
}
})
.on( "connect", function(){
if( server._handle ){
console.log("[master1] server is listening trying to close" );
return server.close();
}
console.log( "[master1] server isn't listening...and working as slave" );
})
.connect( 9998 );
//master2.js
var level = require("level");
var SubLevel = require("level-sublevel");
var net = require("net");
var Replicate = require("level-replicate");
var reconnect = require("reconnect-net");
var db = SubLevel(level("./example-slave"));
var master = Replicate(db, "master", "MASTER-2");
var server = net.createServer(function (stream) {
stream.pipe(master.createStream({tail: true})).pipe(stream);
}).on( "listening", function () {
console.log("[master2] master db listening on %s", server.address().port );
}).on( "close", function(){
console.log( "[master2] closing server" );
});
reconnect(function( stream ){
stream.pipe(master.createStream({tail: true})).pipe(stream);
})
.on( "error", function( err ){
console.error( err );
})
.on( "disconnect", function(){
if( !server._handle ){
console.log( "it's closed, start acting as master" );
server.listen( 9998 );
}
})
.on( "connect", function(){
if( server._handle ){
console.log("[master2] server is listening trying to close" );
return server.close();
}
console.log( "[master2] server isn't listening...and working as slave" );
})
.connect( 9999 );
{
"name": "level-replicate-mm",
"version": "0.0.0",
"description": "ERROR: No README.md file found!",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": "",
"author": "",
"license": "BSD",
"dependencies": {
"level-replicate": "~1.1.6",
"level-sublevel": "~5.0.1",
"level": "~0.13.0",
"leveldown": "~0.7.0",
"levelup": "~0.13.0",
"reconnect-core": "0.0.0",
"reconnect-net": "0.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment