Fine-tuning PeerConnector
This commit is contained in:
parent
ce971ab738
commit
8f908c961d
1 changed files with 28 additions and 11 deletions
|
@ -66,6 +66,7 @@ class PeerConnector(object):
|
||||||
self.nr_peers = 0 # set by processReqs()
|
self.nr_peers = 0 # set by processReqs()
|
||||||
self.nr_connected_peers = 0 # set by processReqs2()
|
self.nr_connected_peers = 0 # set by processReqs2()
|
||||||
|
|
||||||
|
# Connector Controller state
|
||||||
self.peers = list()
|
self.peers = list()
|
||||||
|
|
||||||
def addReq(self, req):
|
def addReq(self, req):
|
||||||
|
@ -139,6 +140,9 @@ class PeerConnector(object):
|
||||||
if peer not in self.peers:
|
if peer not in self.peers:
|
||||||
self.peers.append(peer)
|
self.peers.append(peer)
|
||||||
|
|
||||||
|
def sleep(self, t):
|
||||||
|
self.site.connection_server.sleep(t)
|
||||||
|
|
||||||
def keepGoing(self):
|
def keepGoing(self):
|
||||||
return self.site.isServing() and self.site.connection_server.allowsCreatingConnections()
|
return self.site.isServing() and self.site.connection_server.allowsCreatingConnections()
|
||||||
|
|
||||||
|
@ -153,10 +157,14 @@ class PeerConnector(object):
|
||||||
addendum = 20
|
addendum = 20
|
||||||
while self.keepGoing():
|
while self.keepGoing():
|
||||||
|
|
||||||
if len(self.site.peers) < 1:
|
no_peers_loop = 0
|
||||||
# No peers and no way to manage this from this method.
|
while len(self.site.peers) < 1:
|
||||||
# Just give up.
|
# No peers at all.
|
||||||
break
|
# Waiting for the announcer to discover some peers.
|
||||||
|
self.sleep(10 + no_peers_loop)
|
||||||
|
no_peers_loop += 1
|
||||||
|
if not self.keepGoing() or no_peers_loop > 60:
|
||||||
|
break
|
||||||
|
|
||||||
self.processReqs2()
|
self.processReqs2()
|
||||||
|
|
||||||
|
@ -165,15 +173,19 @@ class PeerConnector(object):
|
||||||
# Done.
|
# Done.
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if len(self.site.peers) < 1:
|
||||||
|
break
|
||||||
|
|
||||||
if len(self.peers) < 1:
|
if len(self.peers) < 1:
|
||||||
# refill the peer list
|
# refill the peer list
|
||||||
self.peers = self.site.getRecentPeers(self.need_nr_connected_peers * 2 + addendum)
|
self.peers = self.site.getRecentPeers(self.need_nr_connected_peers * 2 + self.nr_connected_peers + addendum)
|
||||||
addendum = addendum * 2 + 50
|
addendum = min(addendum * 2 + 50, 10000)
|
||||||
if len(self.peers) <= self.nr_connected_peers:
|
if len(self.peers) <= self.nr_connected_peers:
|
||||||
# looks like all known peers are connected
|
# Looks like all known peers are connected.
|
||||||
# start announcePex() in background and give up
|
# Waiting for the announcer to discover some peers.
|
||||||
self.site.announcer.announcePex()
|
self.site.announcer.announcePex()
|
||||||
break
|
self.sleep(10)
|
||||||
|
continue
|
||||||
|
|
||||||
# try connecting to peers
|
# try connecting to peers
|
||||||
while self.keepGoing() and len(self.peer_connector_workers) < self.peer_connector_worker_limit:
|
while self.keepGoing() and len(self.peer_connector_workers) < self.peer_connector_worker_limit:
|
||||||
|
@ -195,7 +207,10 @@ class PeerConnector(object):
|
||||||
|
|
||||||
# wait for more room in self.peer_connector_workers
|
# wait for more room in self.peer_connector_workers
|
||||||
while self.keepGoing() and len(self.peer_connector_workers) >= self.peer_connector_worker_limit:
|
while self.keepGoing() and len(self.peer_connector_workers) >= self.peer_connector_worker_limit:
|
||||||
gevent.sleep(2)
|
self.sleep(2)
|
||||||
|
|
||||||
|
if not self.site.connection_server.isInternetOnline():
|
||||||
|
self.sleep(20)
|
||||||
|
|
||||||
self.peers = list()
|
self.peers = list()
|
||||||
self.peer_connector_controller = None
|
self.peer_connector_controller = None
|
||||||
|
@ -208,7 +223,9 @@ class PeerConnector(object):
|
||||||
self.processReqs2()
|
self.processReqs2()
|
||||||
if self.need_nr_peers <= self.nr_peers:
|
if self.need_nr_peers <= self.nr_peers:
|
||||||
break
|
break
|
||||||
gevent.sleep(10)
|
self.sleep(10)
|
||||||
|
if not self.site.connection_server.isInternetOnline():
|
||||||
|
self.sleep(20)
|
||||||
self.peer_connector_announcer = None
|
self.peer_connector_announcer = None
|
||||||
|
|
||||||
def spawnPeerConnectorController(self):
|
def spawnPeerConnectorController(self):
|
||||||
|
|
Loading…
Reference in a new issue