mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* [NOD-1079] Fix block rejects over "Already have block" (#783) * [NOD-1079] Return regular error instead of ruleError on already-have-block in ProcessBlock. * [NOD-1079] Fix bad implementation of IsSelectedTipKnown. * [NOD-1079] In shouldQueryPeerSelectedTips use selected DAG tip timestamp instead of past median time. * [NOD-1079] Remove redundant (and possibly buggy) clearing of sm.requestedBlocks. * [NOD-684] change simnet block rate to block per ms (#782) * [NOD-684] Get rid of dag.targetTimePerBlock and use finality duration in dag params * [NOD-684] Fix regtest genesis block * [NOD-684] Set simnet's TargetTimePerBlock to 1ms * [NOD-684] Shorten simnet finality duration * [NOD-684] Change isDAGCurrentMaxDiff to be written as number of blocks * [NOD-684] Fix NextBlockMinimumTime to be add one millisecond after past median time * [NOD-1004] Make AddrManager.getAddress use only 1 loop to check all address chances and pick one of them (#741) * [NOD-1004] Remove code duplication in Good(). * [NOD-1004] Remove some more code duplication in Good(). * [NOD-1004] Remove some more code duplication in Good(). * [NOD-1004] Remove code duplication in GetAddress(). * [NOD-1004] Remove code duplication in updateAddress. * [NOD-1004] Remove some more code duplication in updateAddress. * [NOD-1004] Remove redundant check in expireNew. * [NOD-1004] Remove superfluous existence check from updateAddress. * [NOD-1004] Make triedBucket use a slice instead of a list. * [NOD-1004] Remove code duplication in getAddress. * [NOD-1004] Remove infinite loops out of getAddress. * [NOD-1004] Made impossible branch panic. * [NOD-1004] Remove a mystery comment. * [NOD-1004] Remove an unnecessary sort. * [NOD-1004] Make AddressKey a type alias. * [NOD-1004] Added comment for AddressKey * [NOD-1004] Fix merge errors. * [NOD-1004] Fix merge errors. * [NOD-1004] Do some renaming. * [NOD-1004] Do some more renaming. * [NOD-1004] Rename AddrManager to AddressManager. * [NOD-1004] Rename AddrManager to AddressManager. * [NOD-1004] Do some more renaming. * [NOD-1004] Rename bucket to addressBucketArray. * [NOD-1004] Fix a comment. * [NOD-1004] Rename na to netAddress. * [NOD-1004] Bring back an existence check. * [NOD-1004] Fix an error message. * [NOD-1004] Fix a comment. * [NOD-1004] Use a boolean instead of -1. * [NOD-1004] Use a boolean instead of -1 in another place. Co-authored-by: Mike Zak <feanorr@gmail.com> * Fix merge errors. * [NOD-1181] Move isBanned logic into addressManager. * [NOD-1181] Persist bans to disk. * [NOD-1181] Add comments. * [NOD-1181] Add an additional exit condition to the connection loop. * [NOD-1181] Add a TODO. * [NOD-1181] Wrap not-found errors in addressManager. * [NOD-1181] Fix a comment. * [NOD-1181] Rename banned to isBanned. * [NOD-1181] Fix bad error handling in routerInitializer. * [NOD-1181] Remove a TODO. Co-authored-by: Ori Newman <orinewman1@gmail.com> Co-authored-by: Mike Zak <feanorr@gmail.com>
62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
package connmanager
|
|
|
|
// checkOutgoingConnections goes over all activeOutgoing and makes sure they are still active.
|
|
// Then it opens connections so that we have targetOutgoing active connections
|
|
func (c *ConnectionManager) checkOutgoingConnections(connSet connectionSet) {
|
|
for address := range c.activeOutgoing {
|
|
connection, ok := connSet.get(address)
|
|
if ok { // connection is still connected
|
|
connSet.remove(connection)
|
|
continue
|
|
}
|
|
|
|
// if connection is dead - remove from list of active ones
|
|
delete(c.activeOutgoing, address)
|
|
}
|
|
|
|
liveConnections := len(c.activeOutgoing)
|
|
if c.targetOutgoing == liveConnections {
|
|
return
|
|
}
|
|
|
|
log.Debugf("Have got %d outgoing connections out of target %d, adding %d more",
|
|
liveConnections, c.targetOutgoing, c.targetOutgoing-liveConnections)
|
|
|
|
connectionsNeededCount := c.targetOutgoing - len(c.activeOutgoing)
|
|
connectionAttempts := connectionsNeededCount * 2
|
|
for i := 0; i < connectionAttempts; i++ {
|
|
// Return in case we've already reached or surpassed our target
|
|
if len(c.activeOutgoing) >= c.targetOutgoing {
|
|
return
|
|
}
|
|
|
|
address := c.addressManager.GetAddress()
|
|
if address == nil {
|
|
log.Warnf("No more addresses available")
|
|
return
|
|
}
|
|
|
|
netAddress := address.NetAddress()
|
|
tcpAddress := netAddress.TCPAddress()
|
|
addressString := tcpAddress.String()
|
|
isBanned, err := c.addressManager.IsBanned(netAddress)
|
|
if err != nil {
|
|
log.Infof("Couldn't resolve whether %s is banned: %s", addressString, err)
|
|
continue
|
|
}
|
|
if isBanned {
|
|
continue
|
|
}
|
|
|
|
c.addressManager.Attempt(netAddress)
|
|
err = c.initiateConnection(addressString)
|
|
if err != nil {
|
|
log.Infof("Couldn't connect to %s: %s", addressString, err)
|
|
continue
|
|
}
|
|
|
|
c.addressManager.Connected(netAddress)
|
|
c.activeOutgoing[addressString] = struct{}{}
|
|
}
|
|
}
|