Merge branch '23_retry_peers' of https://github.com/bboreham/weave into 23_retry_peers

This commit is contained in:
Bryan Boreham committed 2014-09-09 13:08:50 +01:00
commit 2863d672f9
3 files changed
+27 -24

No files matched your search

+6 -11
View File
@@ -5,7 +5,6 @@ import (
"fmt"
"log"
"math/rand"
"net"
"time"
)
@@ -43,10 +42,7 @@ func (cm *ConnectionMaker) InitiateConnection(address string) {
}
func (cm *ConnectionMaker) EnsureConnection(address string) {
// If we've been given a port number, take it off
if addrHost, _, err := net.SplitHostPort(address); err == nil {
address = addrHost
}
address = StripPortFromAddr(address)
cm.queryChan <- &ConnectionMakerInteraction{
Interaction: Interaction{code: CMEnsure},
acceptAnyPeer: false,
@@ -54,10 +50,7 @@ func (cm *ConnectionMaker) EnsureConnection(address string) {
}
func (cm *ConnectionMaker) ConnectionEstablished(address string) {
// If we've been given a port number, take it off
if addrHost, _, err := net.SplitHostPort(address); err == nil {
address = addrHost
}
address = StripPortFromAddr(address)
cm.queryChan <- &ConnectionMakerInteraction{
Interaction: Interaction{code: CMEstablished},
address: address}
@@ -92,6 +85,7 @@ func (cm *ConnectionMaker) queryLoop(queryChan <-chan *ConnectionMakerInteractio
}
switch {
case query.code == CMEnsure:
log.Println("Connection ensure", query.address)
cm.addToTargets(query.acceptAnyPeer, query.address)
cm.resetTarget(query.address)
tickNow()
@@ -100,6 +94,7 @@ func (cm *ConnectionMaker) queryLoop(queryChan <-chan *ConnectionMakerInteractio
case query.code == CMEstablished:
target := cm.targets[query.address]
if target != nil {
log.Println("Connection established to", query.address, target)
target.state = CSEstablished
} else {
log.Fatal("Connection established to unknown address", query.address)
@@ -115,9 +110,9 @@ func (cm *ConnectionMaker) queryLoop(queryChan <-chan *ConnectionMakerInteractio
case now := <-tick:
for address, target := range cm.targets {
if target.state == CSUnconnected && now.After(target.tryAfter) {
if _, found := cm.router.Ourself.ConnectionOn(address); found {
/*if _, found := cm.router.Ourself.ConnectionOn(address); found {
target.state = CSEstablished
} else {
} else*/ {
target.attemptCount += 1
target.state = CSAttempting
go cm.attemptConnection(address, target.acceptAnyPeer)
+2 -13
View File
@@ -57,19 +57,8 @@ func (peer *Peer) ConnectionTo(name PeerName) (Connection, bool) {
return conn, found // yes, you really can't inline that. FFS.
}
// given an address like '1.2.3.4:567', return the address if it has a port,
// otherwise return the address with weave's standard port number
func normalisePeerAddr(peerAddr string) string {
_, _, err := net.SplitHostPort(peerAddr)
if err == nil {
return peerAddr
} else {
return fmt.Sprintf("%s:%d", peerAddr, Port)
}
}
func (peer *Peer) ConnectionOn(peerAddr string) (Connection, bool) {
peerAddr = normalisePeerAddr(peerAddr)
peerAddr = NormalisePeerAddr(peerAddr)
peer.RLock()
defer peer.RUnlock()
for _, conn := range peer.connections {
@@ -220,7 +209,7 @@ func (peer *Peer) CreateConnection(peerAddr string, acceptNewPeer bool) error {
return err
}
// We're dialing the remote so that means connections will come from random ports
addrStr := normalisePeerAddr(peerAddr)
addrStr := NormalisePeerAddr(peerAddr)
tcpAddr, tcpErr := net.ResolveTCPAddr("tcp4", addrStr)
udpAddr, udpErr := net.ResolveUDPAddr("udp4", addrStr)
if tcpErr != nil || udpErr != nil {
+19
View File
@@ -97,3 +97,22 @@ func (lop ListOfPeers) Swap(i, j int) {
func (lop ListOfPeers) Less(i, j int) bool {
return lop[i].Name < lop[i].Name
}
func StripPortFromAddr(address string) string {
// If we've been given a port number, take it off
if addrHost, _, err := net.SplitHostPort(address); err == nil {
return addrHost
}
return address
}
// given an address like '1.2.3.4:567', return the address if it has a port,
// otherwise return the address with weave's standard port number
func NormalisePeerAddr(peerAddr string) string {
_, _, err := net.SplitHostPort(peerAddr)
if err == nil {
return peerAddr
} else {
return fmt.Sprintf("%s:%d", peerAddr, Port)
}
}