test('multilevel should not blow up when using live stream overlapping a sublevel',function(t){ var db = sublevel(level('./_testdb')); var subdb = db.sublevel('s'); livestream.install(db); db.pre(function(ch,add){ if(ch.type == "put") add({type:"put",key:ch.key,value:ch.value,prefix:subdb}); }); multilevel.writeManifest(db, __dirname + '/manifest.json'); var manifest = require('./manifest.json'); var client = multilevel.client(manifest); var server = multilevel.server(db); server.pipe(client.createRpcStream()).pipe(server); client.liveStream().on('data',function(change){ t.ok(change,'should not have crashed'); t.end(); }); db.put('z',1); });
DbServer.prototype.writeManifest = function (manifest) { var db, filepath; db = this.db; filepath = Path.resolve(__dirname, this.settings.manifest); Multilevel.writeManifest(db, filepath); };
.on('end', () => { multilevel.writeManifest(sub, METADATA_PATH + MANIFEST_JSON); this.logger.info('starting metadata file backend server'); /* We start a server that will server the sublevel capable rootDB to clients */ net.createServer(con => { con.pipe(multilevel.server(sub)).pipe(con); }).listen(METADATA_PORT); });
sub.createSub = (subName, cb) => { try { sub.sublevel(subName); multilevel.writeManifest(sub, METADATA_PATH + MANIFEST_JSON_TMP); fs.renameSync(METADATA_PATH + MANIFEST_JSON_TMP, METADATA_PATH + MANIFEST_JSON); cb(); } catch (err) { cb(err); } };
function Server (options) { if (!(this instanceof Server)) { return new Server(options) } EventEmitter.call(this); options = options || {}; this.location = options.location || 'level-agile.db'; this.valueEncoding = options.valueEncoding || 'json'; this.db = sublevel(level(this.location, { valueEncoding: this.valueEncoding })); LiveStream.install(this.db); // // Creates a manifest file for use with client, kept here for autogeneration // multilevel.writeManifest(this.db, path.join(__dirname, '..', 'manifest.json')); this.server = net.createServer(this._onSocketConnect.bind(this)); };
} else { res.end('oops!') } }); // 2: db var levelup = require('levelup'); var memdown = require('memdown'); server.listen(process.env.PORT || 3000); var db = levelup('/messages', {db: memdown}); // 3: sockets var multilevel = require('multilevel'); multilevel.writeManifest(db, __dirname + '/manifest.json'); var engine = EngineServer(function(stream) { stream.pipe(multilevel.server(db)).pipe(stream); }); var level = require('level') level('/tmp/level-live-stream', {createIfMissing: true}, function (err, db) { var liveStream = require('level-live-stream')(db) liveStream .on('data', console.log)