downloader: added demotion / promotion in prep. for rep. system
This commit is contained in:
parent
eda10c7317
commit
205378016f
@ -245,6 +245,7 @@ out:
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case blockPack := <-d.blockCh:
|
case blockPack := <-d.blockCh:
|
||||||
|
d.peers[blockPack.peerId].promote()
|
||||||
d.queue.deliver(blockPack.peerId, blockPack.blocks)
|
d.queue.deliver(blockPack.peerId, blockPack.blocks)
|
||||||
d.peers.setState(blockPack.peerId, idleState)
|
d.peers.setState(blockPack.peerId, idleState)
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
@ -310,6 +311,9 @@ out:
|
|||||||
// 2) Measure their speed;
|
// 2) Measure their speed;
|
||||||
// 3) Amount and availability.
|
// 3) Amount and availability.
|
||||||
d.queue.deliver(pid, nil)
|
d.queue.deliver(pid, nil)
|
||||||
|
if peer := p.peers[pid]; peer != nil {
|
||||||
|
peer.demote()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -343,6 +347,7 @@ func (d *Downloader) AddBlock(id string, block *types.Block, td *big.Int) {
|
|||||||
peer.td = td
|
peer.td = td
|
||||||
peer.recentHash = block.Hash()
|
peer.recentHash = block.Hash()
|
||||||
peer.mu.Unlock()
|
peer.mu.Unlock()
|
||||||
|
peer.promote()
|
||||||
|
|
||||||
glog.V(logger.Detail).Infoln("Inserting new block from:", id)
|
glog.V(logger.Detail).Infoln("Inserting new block from:", id)
|
||||||
d.queue.addBlock(id, block, td)
|
d.queue.addBlock(id, block, td)
|
||||||
|
@ -95,3 +95,23 @@ func (p *peer) fetch(chunk *chunk) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// promote increases the peer's reputation
|
||||||
|
func (p *peer) promote() {
|
||||||
|
p.mu.Lock()
|
||||||
|
defer p.mu.Unlock()
|
||||||
|
|
||||||
|
p.rep++
|
||||||
|
}
|
||||||
|
|
||||||
|
// demote decreases the peer's reputation or leaves it at 0
|
||||||
|
func (p *peer) demote() {
|
||||||
|
p.mu.Lock()
|
||||||
|
defer p.mu.Unlock()
|
||||||
|
|
||||||
|
if p.rep > 1 {
|
||||||
|
p.rep -= 2
|
||||||
|
} else {
|
||||||
|
p.rep = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user