Compare commits
3 Commits
244aaa414a
...
5140ba96da
Author | SHA1 | Date |
---|---|---|
Vitaliy Filippov | 5140ba96da | |
Vitaliy Filippov | d442c1d6d7 | |
Vitaliy Filippov | 993a066576 |
|
@ -1,6 +1,12 @@
|
||||||
import type { EventEmitter } from 'events';
|
import type { EventEmitter } from 'events';
|
||||||
|
|
||||||
export class AntiEtcd extends EventEmitter
|
import type { TinyRaftEvents } from './tinyraft';
|
||||||
|
|
||||||
|
export type AntiEtcdEvents = {
|
||||||
|
raftchange: TinyRaftEvents['change'],
|
||||||
|
};
|
||||||
|
|
||||||
|
export class AntiEtcd extends EventEmitter<AntiEtcdEvents>
|
||||||
{
|
{
|
||||||
constructor(cfg: object);
|
constructor(cfg: object);
|
||||||
start(): Promise<void>;
|
start(): Promise<void>;
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
import type { EventEmitter } from 'events';
|
||||||
|
|
||||||
|
export type TinyRaftEvents = {
|
||||||
|
change: {
|
||||||
|
state: 'LEADER'|'FOLLOWER'|'CANDIDATE',
|
||||||
|
term: number,
|
||||||
|
leader: string|number,
|
||||||
|
followers: (string|number)[],
|
||||||
|
}[],
|
||||||
|
};
|
||||||
|
|
||||||
|
export type RaftMessage = {
|
||||||
|
type: 'VOTE_REQUEST'|'VOTE'|'PING'|'PONG',
|
||||||
|
term: number,
|
||||||
|
leader?: string|number,
|
||||||
|
priority?: number,
|
||||||
|
};
|
||||||
|
|
||||||
|
export class TinyRaft extends EventEmitter<TinyRaftEvents>
|
||||||
|
{
|
||||||
|
constructor(cfg: {
|
||||||
|
nodes: (number|string)[],
|
||||||
|
nodeId: number|string,
|
||||||
|
electionTimeout?: number,
|
||||||
|
heartbeatTimeout?: number,
|
||||||
|
leadershipTimeout?: number,
|
||||||
|
initialTerm?: number,
|
||||||
|
leaderPriority?: number,
|
||||||
|
send: (to: number|string, msg: RaftMessage) => void,
|
||||||
|
});
|
||||||
|
start();
|
||||||
|
stop();
|
||||||
|
onReceive(from: number|string, msg: RaftMessage);
|
||||||
|
markAlive();
|
||||||
|
setNodes(nodes: (number|string)[]);
|
||||||
|
}
|
|
@ -177,7 +177,7 @@ class TinyRaft extends EventEmitter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const prio = (this.leader == this.nodeId ? this.leaderPriority : undefined);
|
const prio = (this.leader == this.nodeId ? this.leaderPriority : undefined);
|
||||||
this.send(from, { type: VOTE, term: this.term, leader: this.leader, leaderPriority: prio });
|
this.send(from, { type: VOTE, term: this.term, leader: this.leader, priority: prio });
|
||||||
}
|
}
|
||||||
|
|
||||||
_onReceiveVote(from, msg)
|
_onReceiveVote(from, msg)
|
||||||
|
|
Loading…
Reference in New Issue