@ -30,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/common/mclock"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/les/utils"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/discv5"
@ -129,7 +130,7 @@ type serverPool struct {
adjustStats chan poolStatAdjust
knownQueue , newQueue poolEntryQueue
knownSelect , newSelect * w eightedRandomSelect
knownSelect , newSelect * utils . W eightedRandomSelect
knownSelected , newSelected int
fastDiscover bool
connCh chan * connReq
@ -152,8 +153,8 @@ func newServerPool(db ethdb.Database, ulcServers []string) *serverPool {
disconnCh : make ( chan * disconnReq ) ,
registerCh : make ( chan * registerReq ) ,
closeCh : make ( chan struct { } ) ,
knownSelect : n ewWeightedRandomSelect( ) ,
newSelect : n ewWeightedRandomSelect( ) ,
knownSelect : utils . N ewWeightedRandomSelect( ) ,
newSelect : utils . N ewWeightedRandomSelect( ) ,
fastDiscover : true ,
trustedNodes : parseTrustedNodes ( ulcServers ) ,
}
@ -402,8 +403,8 @@ func (pool *serverPool) eventLoop() {
entry . lastConnected = addr
entry . addr = make ( map [ string ] * poolEntryAddress )
entry . addr [ addr . strKey ( ) ] = addr
entry . addrSelect = * n ewWeightedRandomSelect( )
entry . addrSelect . u pdate( addr )
entry . addrSelect = * utils . N ewWeightedRandomSelect( )
entry . addrSelect . U pdate( addr )
req . result <- entry
}
@ -459,7 +460,7 @@ func (pool *serverPool) findOrNewNode(node *enode.Node) *poolEntry {
entry = & poolEntry {
node : node ,
addr : make ( map [ string ] * poolEntryAddress ) ,
addrSelect : * n ewWeightedRandomSelect( ) ,
addrSelect : * utils . N ewWeightedRandomSelect( ) ,
shortRetry : shortRetryCnt ,
}
pool . entries [ node . ID ( ) ] = entry
@ -477,7 +478,7 @@ func (pool *serverPool) findOrNewNode(node *enode.Node) *poolEntry {
entry . addr [ addr . strKey ( ) ] = addr
}
addr . lastSeen = now
entry . addrSelect . u pdate( addr )
entry . addrSelect . U pdate( addr )
if ! entry . known {
pool . newQueue . setLatest ( entry )
}
@ -505,7 +506,7 @@ func (pool *serverPool) loadNodes() {
pool . entries [ e . node . ID ( ) ] = e
if pool . trustedNodes [ e . node . ID ( ) ] == nil {
pool . knownQueue . setLatest ( e )
pool . knownSelect . u pdate( ( * knownEntry ) ( e ) )
pool . knownSelect . U pdate( ( * knownEntry ) ( e ) )
}
}
}
@ -556,8 +557,8 @@ func (pool *serverPool) saveNodes() {
// Note that it is called by the new/known queues from which the entry has already
// been removed so removing it from the queues is not necessary.
func ( pool * serverPool ) removeEntry ( entry * poolEntry ) {
pool . newSelect . r emove( ( * discoveredEntry ) ( entry ) )
pool . knownSelect . r emove( ( * knownEntry ) ( entry ) )
pool . newSelect . R emove( ( * discoveredEntry ) ( entry ) )
pool . knownSelect . R emove( ( * knownEntry ) ( entry ) )
entry . removed = true
delete ( pool . entries , entry . node . ID ( ) )
}
@ -586,8 +587,8 @@ func (pool *serverPool) setRetryDial(entry *poolEntry) {
// updateCheckDial is called when an entry can potentially be dialed again. It updates
// its selection weights and checks if new dials can/should be made.
func ( pool * serverPool ) updateCheckDial ( entry * poolEntry ) {
pool . newSelect . u pdate( ( * discoveredEntry ) ( entry ) )
pool . knownSelect . u pdate( ( * knownEntry ) ( entry ) )
pool . newSelect . U pdate( ( * discoveredEntry ) ( entry ) )
pool . knownSelect . U pdate( ( * knownEntry ) ( entry ) )
pool . checkDial ( )
}
@ -596,7 +597,7 @@ func (pool *serverPool) updateCheckDial(entry *poolEntry) {
func ( pool * serverPool ) checkDial ( ) {
fillWithKnownSelects := ! pool . fastDiscover
for pool . knownSelected < targetKnownSelect {
entry := pool . knownSelect . c hoose( )
entry := pool . knownSelect . C hoose( )
if entry == nil {
fillWithKnownSelects = false
break
@ -604,7 +605,7 @@ func (pool *serverPool) checkDial() {
pool . dial ( ( * poolEntry ) ( entry . ( * knownEntry ) ) , true )
}
for pool . knownSelected + pool . newSelected < targetServerCount {
entry := pool . newSelect . c hoose( )
entry := pool . newSelect . C hoose( )
if entry == nil {
break
}
@ -615,7 +616,7 @@ func (pool *serverPool) checkDial() {
// is over, we probably won't find more in the near future so select more
// known entries if possible
for pool . knownSelected < targetServerCount {
entry := pool . knownSelect . c hoose( )
entry := pool . knownSelect . C hoose( )
if entry == nil {
break
}
@ -636,7 +637,7 @@ func (pool *serverPool) dial(entry *poolEntry, knownSelected bool) {
} else {
pool . newSelected ++
}
addr := entry . addrSelect . c hoose( ) . ( * poolEntryAddress )
addr := entry . addrSelect . C hoose( ) . ( * poolEntryAddress )
log . Debug ( "Dialing new peer" , "lesaddr" , entry . node . ID ( ) . String ( ) + "@" + addr . strKey ( ) , "set" , len ( entry . addr ) , "known" , knownSelected )
entry . dialed = addr
go func ( ) {
@ -684,7 +685,7 @@ type poolEntry struct {
addr map [ string ] * poolEntryAddress
node * enode . Node
lastConnected , dialed * poolEntryAddress
addrSelect w eightedRandomSelect
addrSelect utils . W eightedRandomSelect
lastDiscovered mclock . AbsTime
known , knownSelected , trusted bool
@ -734,8 +735,8 @@ func (e *poolEntry) DecodeRLP(s *rlp.Stream) error {
e . node = enode . NewV4 ( pubkey , entry . IP , int ( entry . Port ) , int ( entry . Port ) )
e . addr = make ( map [ string ] * poolEntryAddress )
e . addr [ addr . strKey ( ) ] = addr
e . addrSelect = * n ewWeightedRandomSelect( )
e . addrSelect . u pdate( addr )
e . addrSelect = * utils . N ewWeightedRandomSelect( )
e . addrSelect . U pdate( addr )
e . lastConnected = addr
e . connectStats = entry . CStat
e . delayStats = entry . DStat