Protect peers for low traffic sites from closing
This commit is contained in:
parent
728e497057
commit
438bdbc141
2 changed files with 11 additions and 5 deletions
|
@ -205,19 +205,21 @@ class FileServer(ConnectionServer):
|
||||||
import gc
|
import gc
|
||||||
startup = True
|
startup = True
|
||||||
time.sleep(5 * 60) # Sites already cleaned up on startup
|
time.sleep(5 * 60) # Sites already cleaned up on startup
|
||||||
|
peers_protected = set([])
|
||||||
while 1:
|
while 1:
|
||||||
# Sites health care every 20 min
|
# Sites health care every 20 min
|
||||||
self.log.debug("Running site cleanup, connections: %s, internet: %s" % (len(self.connections), self.has_internet))
|
self.log.debug("Running site cleanup, connections: %s, internet: %s, protected peers: %s" % (len(self.connections), self.has_internet, peers_protected))
|
||||||
|
|
||||||
for address, site in self.sites.items():
|
for address, site in self.sites.items():
|
||||||
if not site.settings["serving"]:
|
if not site.settings["serving"]:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not startup:
|
if not startup:
|
||||||
site.cleanupPeers()
|
site.cleanupPeers(peers_protected)
|
||||||
|
|
||||||
time.sleep(1) # Prevent too quick request
|
time.sleep(1) # Prevent too quick request
|
||||||
|
|
||||||
|
peers_protected = set([])
|
||||||
for address, site in self.sites.items():
|
for address, site in self.sites.items():
|
||||||
if not site.settings["serving"]:
|
if not site.settings["serving"]:
|
||||||
continue
|
continue
|
||||||
|
@ -231,7 +233,9 @@ class FileServer(ConnectionServer):
|
||||||
site.retryBadFiles()
|
site.retryBadFiles()
|
||||||
|
|
||||||
if not startup: # Don't do it at start up because checkSite already has needConnections at start up.
|
if not startup: # Don't do it at start up because checkSite already has needConnections at start up.
|
||||||
site.needConnections(check_site_on_reconnect=True) # Keep active peer connection to get the updates
|
connected_num = site.needConnections(check_site_on_reconnect=True) # Keep active peer connection to get the updates
|
||||||
|
if connected_num < config.connected_limit: # This site has small amount of peers, protect them from closing
|
||||||
|
peers_protected.update([peer.key for peer in site.getConnectedPeers()])
|
||||||
|
|
||||||
time.sleep(1) # Prevent too quick request
|
time.sleep(1) # Prevent too quick request
|
||||||
|
|
||||||
|
|
|
@ -900,9 +900,9 @@ class Site(object):
|
||||||
connected += 1 # Successfully connected
|
connected += 1 # Successfully connected
|
||||||
if connected >= need:
|
if connected >= need:
|
||||||
break
|
break
|
||||||
|
self.log.debug("Connected before: %s, after: %s. Check site: %s." % (connected_before, connected, check_site_on_reconnect))
|
||||||
|
|
||||||
if check_site_on_reconnect and connected_before == 0 and connected > 0 and self.connection_server.has_internet:
|
if check_site_on_reconnect and connected_before == 0 and connected > 0 and self.connection_server.has_internet:
|
||||||
self.log.debug("Connected before: %s, after: %s. We need to check the site." % (connected_before, connected))
|
|
||||||
gevent.spawn(self.update, check_files=False)
|
gevent.spawn(self.update, check_files=False)
|
||||||
|
|
||||||
return connected
|
return connected
|
||||||
|
@ -949,7 +949,7 @@ class Site(object):
|
||||||
return back
|
return back
|
||||||
|
|
||||||
# Cleanup probably dead peers and close connection if too much
|
# Cleanup probably dead peers and close connection if too much
|
||||||
def cleanupPeers(self):
|
def cleanupPeers(self, peers_protected=[]):
|
||||||
peers = self.peers.values()
|
peers = self.peers.values()
|
||||||
if len(peers) > 20:
|
if len(peers) > 20:
|
||||||
# Cleanup old peers
|
# Cleanup old peers
|
||||||
|
@ -982,6 +982,8 @@ class Site(object):
|
||||||
for peer in sorted(connected_peers, key=lambda peer: min(peer.connection.sites, 5)): # Try to keep connections with more sites
|
for peer in sorted(connected_peers, key=lambda peer: min(peer.connection.sites, 5)): # Try to keep connections with more sites
|
||||||
if not peer.connection:
|
if not peer.connection:
|
||||||
continue
|
continue
|
||||||
|
if peer.key in peers_protected:
|
||||||
|
continue
|
||||||
if peer.connection.sites > 5:
|
if peer.connection.sites > 5:
|
||||||
break
|
break
|
||||||
peer.connection.close("Cleanup peers")
|
peer.connection.close("Cleanup peers")
|
||||||
|
|
Loading…
Reference in a new issue