Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Implement persistence leadership #1

Open
wants to merge 37 commits into
base: feat/persister
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4ff7b65
Network Simulator
dirkmc Nov 9, 2018
c40a8b7
Optimize simulator trigonometric line calculation
dirkmc Nov 11, 2018
6d0afd3
Move simulator dependencies to package devDependencies
dirkmc Nov 11, 2018
cfa866d
Move simulator options to left side
dirkmc Nov 11, 2018
a98891e
Simulator: dont switch layouts when adding new node
dirkmc Nov 11, 2018
b4f97f0
Simulator: fix gossip message delivery
dirkmc Nov 11, 2018
ca47ecf
Simulator: Add reset to default options button
dirkmc Nov 12, 2018
0d146e1
Simulator: use public method instead of private membership field
dirkmc Nov 12, 2018
6c7033c
Add simulator README
dirkmc Nov 12, 2018
02732ba
Simulator: Fix README spacing
dirkmc Nov 12, 2018
60f49f1
Simulator: amend membership documentation
dirkmc Nov 12, 2018
f9745c4
Merge branch 'feat/sim' into feat/leadership
dirkmc Nov 12, 2018
705abd4
WIP: leadership persistence
dirkmc Nov 12, 2018
8367a04
Merge from master
dirkmc Nov 13, 2018
2f63aaf
Leadership: increase default wait time for incoming gossip messages
dirkmc Nov 13, 2018
d7357c5
Merge branch 'feat/persister' of github.com:dirkmc/peer-star-app into…
dirkmc Nov 13, 2018
d5d4991
Include all fields in options.ipfs when creating IPFS instance
dirkmc Nov 13, 2018
8f5a14a
Membership util tests
dirkmc Nov 13, 2018
b37e7d5
Don’t clobber options getters when merging options with defaults
dirkmc Nov 13, 2018
71b0277
Leadership: add voting tests
dirkmc Nov 13, 2018
795d989
Options merge
dirkmc Nov 13, 2018
1babeca
Leadership: tests for various scenarios and state changes
dirkmc Nov 15, 2018
4502158
Leadership: more tests
dirkmc Nov 15, 2018
9b0f8b0
Test bad parameters to leadership
dirkmc Nov 15, 2018
05d3f65
Leadership: test events
dirkmc Nov 15, 2018
64cd5fa
Leadership: more testing of events
dirkmc Nov 15, 2018
495e3ac
Merge from master
dirkmc Nov 19, 2018
3411183
Leadership: when we receive a gossip message where remote leader is d…
dirkmc Nov 19, 2018
895aea9
Merge branch 'feat/persister' of github.com:dirkmc/peer-star-app into…
dirkmc Nov 19, 2018
904ada4
Handle stop being called multiple times on persister
dirkmc Nov 19, 2018
0af06ae
Simulator: Update for leadership
dirkmc Nov 19, 2018
658344c
Leadership: Added convergence tests
dirkmc Nov 19, 2018
9ad157d
Leadership: simulator
dirkmc Nov 19, 2018
03b05c5
Leadership: Make leadership optional and fix tests
dirkmc Nov 20, 2018
04b17a0
Leadership: wait for constant period of time for incoming communicati…
dirkmc Nov 21, 2018
446b0ed
Fix pinner
dirkmc Nov 21, 2018
1086f0a
Add missing file
dirkmc Nov 21, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sim/javascripts/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ async function init() {
})

let electionStart = Date.now()
network.on('leader removed', () => {
network.on('leader removed', p => {
electionStart = Date.now()
infoBox.addMessage(null, 'Leader removed')
infoBox.addMessage(p, 'Leader removed', false)
})
network.on('leader elected', p => {
const elapsed = (Date.now() - electionStart) / 1000
Expand Down
28 changes: 18 additions & 10 deletions sim/javascripts/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const DiasSet = require('../../src/common/dias-peer-set')
const Membership = require('../../src/collaboration/membership')
const { decode } = require('delta-crdts-msgpack-codec')
const Color = require('./color')
const Options = require('../../src/common/options')

class Network extends EventEmitter {
constructor(options) {
Expand All @@ -23,7 +24,7 @@ class Network extends EventEmitter {
this.messages.set(id, { id, message, from, to, duration, start: Date.now() })
this.emit('gossip send', id, message, from, to, duration)
setTimeout(() => {
to.membership.deliverRemoteMembership(message[1])
to.membership.deliverGossipMessage(message)
this.messages.delete(id)
this.emit('gossip arrive', id, message, from, to, duration)
}, duration)
Expand Down Expand Up @@ -70,6 +71,10 @@ class Network extends EventEmitter {
name: 'my collab',
typeName: 'rga'
}
const replicationMock = {
sent() {},
received() {}
}
const connectionManagerMock = Object.assign(new EventEmitter(), {
start() {},
stop() {}
Expand All @@ -79,7 +84,7 @@ class Network extends EventEmitter {
peerInfo,
b58: peerInfo.id.toB58String(),
diasSet: DiasSet(this.options.peerIdByteCount, peerInfo, this.options.preambleByteCount),
membership: new Membership(ipfsMock, null, appMock, collaborationMock, null, null, Object.assign({}, this.options, {
membership: new Membership(ipfsMock, null, appMock, collaborationMock, null, null, null, Options.merge(this.options, {
connectionManager: connectionManagerMock
})),
getMemberPeers() {
Expand All @@ -92,8 +97,8 @@ class Network extends EventEmitter {
}))
},
getLeader() {
// return this.membership._leadership._leader
return (this.membership._leadership || {})._leader
const leadership = this.membership.leadership
return leadership && leadership.getLeader()
},
shutdown() {
this.membership.stop()
Expand All @@ -119,10 +124,11 @@ class Network extends EventEmitter {

setTimeout(async () => {
await peer.membership.start()
// peer.membership._leadership.on('leader', () => {
// this.emit('peer chose leader', peer)
// this.checkLeaderElected()
// })
const leadership = peer.membership.leadership
leadership && leadership.on('leader', () => {
this.emit('peer chose leader', peer)
this.checkLeaderElected()
})
peer.membership.on('changed', () => this.checkMembershipConverged())
peer.running = true
peer.log('started')
Expand All @@ -135,7 +141,7 @@ class Network extends EventEmitter {
p.shutdown()
this.peers = this.peers.filter(i => i !== p)
this.emit('peer removed', p)
// this.checkLeaderRemoved(p)
this.checkLeaderRemoved(p)
}

checkMembershipConverged() {
Expand Down Expand Up @@ -168,7 +174,9 @@ class Network extends EventEmitter {
if (p.getLeader() !== leader) return
}
this.leader = this.peers.find(p => p.b58 === leader)
this.emit('leader elected', this.leader)
if (leader) {
this.emit('leader elected', this.leader)
}
}
}

Expand Down
6 changes: 4 additions & 2 deletions sim/javascripts/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ const OptionDefaults = {
// These are specific to the simulator
avgNetworkDelay: 400,
avgPeerStartTime: 500,
initialPeerCount: 1
initialPeerCount: 1,
leadershipMaxIdleTickCount: 3
}
// Not configurable
const options = {
preambleByteCount: 2,
peerIdByteCount: 32,
nodeRadius: 10,
paddingY: 20
paddingY: 20,
leadershipEnabled: true
}

function localStorageKey(name) {
Expand Down
Loading