/
replicator.js
48 lines (43 loc) · 1.46 KB
/
replicator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var levelws = require('level-ws');
var JSONStream = require('JSONStream');
var skeleton = require('log-skeleton');
var zlib = require('zlib');
module.exports = function (options) {
var log = skeleton((options) ? options.log : undefined);
var replicator = {};
//ReplicateFromStream
replicator.replicateFromSnapShotStream = function (readStream, indexes, callback) {
var indexesws = levelws(indexes);
readStream.pipe(zlib.createGunzip())
.pipe(JSONStream.parse())
.pipe(indexesws.createWriteStream())
.on('close', callback);
};
//ReplicateFromBatch
replicator.replicateFromSnapShotBatch = function (serializedDB, indexes, callback) {
for (var i = 0; i < serializedDB.length; i++)
serializedDB[i].type = 'put';
indexes.batch(serializedDB, function (err) {
if (err) return log.warn('Ooops!', err);
log.info('Great success dear leader!');
callback(err);
});
};
//createSnapShotForStream
replicator.createSnapShot = function (indexes, callback) {
callback(indexes.createReadStream()
.pipe(JSONStream.stringify('', '\n', ''))
.pipe(zlib.createGzip())
);
};
//createSnapShotForBatch
replicator.createSnapShotBatch = function (indexes, callback) {
//has to be like this in order for norch snapshotting to work
callback
(indexes.createReadStream()
.pipe(JSONStream.stringify('[', ',', ']'))
.pipe(zlib.createGzip())
);
};
return replicator;
};