diff options
author | Mission Liao <mission.liao@dexon.org> | 2019-01-03 16:00:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-03 16:00:45 +0800 |
commit | 09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8 (patch) | |
tree | 12362787be4d3b6bcd0051591a7bc0c60d859878 /simulation | |
parent | 5739e74781092ac09d8b3a575cddc71b50beedf4 (diff) | |
download | dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar.gz dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar.bz2 dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar.lz dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar.xz dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.tar.zst dexon-consensus-09a00a0580c2fd6e11b17f1793edca5f7bb2f5f8.zip |
simulation: add latency for gossip (#389)
Diffstat (limited to 'simulation')
-rw-r--r-- | simulation/config/config.go | 27 | ||||
-rw-r--r-- | simulation/node.go | 23 | ||||
-rw-r--r-- | simulation/peer-server.go | 9 |
3 files changed, 36 insertions, 23 deletions
diff --git a/simulation/config/config.go b/simulation/config/config.go index 797145c..d22f4f1 100644 --- a/simulation/config/config.go +++ b/simulation/config/config.go @@ -56,14 +56,18 @@ type Node struct { Changes []Change } +// LatencyModel for ths simulation. +type LatencyModel struct { + Mean float64 + Sigma float64 +} + // Networking config. type Networking struct { Type test.NetworkType PeerServer string - - Mean float64 - Sigma float64 - LossRateValue float64 + Direct LatencyModel + Gossip LatencyModel } // Scheduler Settings. @@ -129,11 +133,16 @@ func GenerateDefault(path string) error { MaxBlock: math.MaxUint64, }, Networking: Networking{ - Type: test.NetworkTypeTCPLocal, - PeerServer: "127.0.0.1", - Mean: 100, - Sigma: 10, - LossRateValue: 0, + Type: test.NetworkTypeTCPLocal, + PeerServer: "127.0.0.1", + Direct: LatencyModel{ + Mean: 100, + Sigma: 10, + }, + Gossip: LatencyModel{ + Mean: 300, + Sigma: 25, + }, }, Scheduler: Scheduler{ WorkerNum: 2, diff --git a/simulation/node.go b/simulation/node.go index dc4a725..026db66 100644 --- a/simulation/node.go +++ b/simulation/node.go @@ -70,18 +70,19 @@ type node struct { func newNode(prvKey crypto.PrivateKey, logger common.Logger, cfg config.Config) *node { pubKey := prvKey.PublicKey() - netModule := test.NewNetwork( - pubKey, - &test.NormalLatencyModel{ - Mean: cfg.Networking.Mean, - Sigma: cfg.Networking.Sigma, + netModule := test.NewNetwork(pubKey, test.NetworkConfig{ + Type: cfg.Networking.Type, + PeerServer: cfg.Networking.PeerServer, + PeerPort: peerPort, + DirectLatency: &test.NormalLatencyModel{ + Mean: cfg.Networking.Direct.Mean, + Sigma: cfg.Networking.Direct.Sigma, }, - test.NewDefaultMarshaller(&jsonMarshaller{}), - test.NetworkConfig{ - Type: cfg.Networking.Type, - PeerServer: cfg.Networking.PeerServer, - PeerPort: peerPort, - }) + GossipLatency: &test.NormalLatencyModel{ + Mean: cfg.Networking.Gossip.Mean, + Sigma: cfg.Networking.Gossip.Sigma, + }, + Marshaller: test.NewDefaultMarshaller(&jsonMarshaller{})}) id := types.NewNodeID(pubKey) dbInst, err := db.NewMemBackedDB(id.String() + ".db") if err != nil { diff --git a/simulation/peer-server.go b/simulation/peer-server.go index 14a825a..69ed029 100644 --- a/simulation/peer-server.go +++ b/simulation/peer-server.go @@ -90,7 +90,8 @@ func (p *PeerServer) handleBlockList(id types.NodeID, blocks *BlockList) { } p.verifiedLen += uint64(length) if p.verifiedLen >= p.cfg.Node.MaxBlock { - if err := p.trans.Broadcast(ntfShutdown); err != nil { + if err := p.trans.Broadcast( + p.peers, &test.FixedLatencyModel{}, ntfShutdown); err != nil { panic(err) } } @@ -199,7 +200,8 @@ func (p *PeerServer) Run() { } // Cache peers' info. for _, pubKey := range p.trans.Peers() { - p.peers[types.NewNodeID(pubKey)] = struct{}{} + nID := types.NewNodeID(pubKey) + p.peers[nID] = struct{}{} } // Pick a mater node to execute pending config changes. for nID := range p.peers { @@ -225,7 +227,8 @@ func (p *PeerServer) Run() { break } } - if err := p.trans.Broadcast(ntfReady); err != nil { + if err := p.trans.Broadcast( + p.peers, &test.FixedLatencyModel{}, ntfReady); err != nil { panic(err) } log.Println("Simulation is ready to go with", len(p.peers), "nodes") |