Skip to content

Old documentation (missing .extends) and Log Replication #18

@GiovanniCapizzi

Description

@GiovanniCapizzi

Hi there, we are working using your liferaft lib in an university project. I found an update after few months and we updated from v.0.1.1 to 1.0.0.
First we tried using something like this (taking this example from your doc):

var LifeBoat = LifeRaft.extend({
  socket: null,
  write: function write(packet, callback) {
    // code etc...
  }
});

But it cannot startup and says "extend is not a function", because it seems disappeared from lib declarations.

We saw also your example in Log Replication and we saw you use now "extends LifeRaft", so maybe it's the documentation that is not updated.
We are asking ourselves also if our idea about transport layer is correct. Before your update we were implementing an "initialize" and "write" functions in your LifeRaft extension. We did a setup with expressjs in this way:

const MsgRaft = LifeRaft.extend({

	update: function(from) {
		this.stored = Object.assign(this.stored || {}, from);
	},

	initialize: function(options) {

		const raft = this; 
		const server = express();

		server.listen(port, () => console.log('initializing on :', raft.address));

		server.use(bodyParser.json())

		server.post('/message', (req, res) => {
			if (LifeRaft.LEADER == raft.state) {
				const packet = raft.packet('store', req.body)
				return raft.message(LifeRaft.CHILD, packet, () => res.json({ "success": true })) // Risposta al client       
			}
			res.json({ "success": false, "leader": raft.leader })
		})

		server.post('/', (req, res) => {
			const msg = req.body;
			if (msg.type == 'store') {
				if (msg.address = raft.leader) {
					raft.update(msg.data);
					raft.emit('new data', raft.stored);
				}
				return res.json({ 'store': true })
			}

			raft.emit('data', msg, function reply(data) {
				res.json(data)
			});

		});

		raft.once('end', () => server.close())

	},

	write: function(packet, fn) {
		console.log('sending packet to', this.address);
		request.post({ url: this.address, body: packet, json: true }, (err, res, body) => {
			fn(err, (body || {}).store ? null : body);
		});
	}

});

We are asking if it is correct the way they reply to each others. Because in this raft explanation seems that the Leader should wait the majority of responses before commit in memory its information, but in this way something seems missing and we do not find difference in your code.
Please can you give us some advises?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions