(self)
| 258 | self.log.debug("Checksites done in %.3fs" % (time.time() - s)) |
| 259 | |
| 260 | def cleanupSites(self): |
| 261 | import gc |
| 262 | startup = True |
| 263 | time.sleep(5 * 60) # Sites already cleaned up on startup |
| 264 | peers_protected = set([]) |
| 265 | while 1: |
| 266 | # Sites health care every 20 min |
| 267 | self.log.debug( |
| 268 | "Running site cleanup, connections: %s, internet: %s, protected peers: %s" % |
| 269 | (len(self.connections), self.has_internet, len(peers_protected)) |
| 270 | ) |
| 271 | |
| 272 | for address, site in list(self.sites.items()): |
| 273 | if not site.isServing(): |
| 274 | continue |
| 275 | |
| 276 | if not startup: |
| 277 | site.cleanupPeers(peers_protected) |
| 278 | |
| 279 | time.sleep(1) # Prevent too quick request |
| 280 | |
| 281 | peers_protected = set([]) |
| 282 | for address, site in list(self.sites.items()): |
| 283 | if not site.isServing(): |
| 284 | continue |
| 285 | |
| 286 | if site.peers: |
| 287 | with gevent.Timeout(10, exception=False): |
| 288 | site.announcer.announcePex() |
| 289 | |
| 290 | # Retry failed files |
| 291 | if site.bad_files: |
| 292 | site.retryBadFiles() |
| 293 | |
| 294 | if time.time() - site.settings.get("modified", 0) < 60 * 60 * 24 * 7: |
| 295 | # Keep active connections if site has been modified witin 7 days |
| 296 | connected_num = site.needConnections(check_site_on_reconnect=True) |
| 297 | |
| 298 | if connected_num < config.connected_limit: # This site has small amount of peers, protect them from closing |
| 299 | peers_protected.update([peer.key for peer in site.getConnectedPeers()]) |
| 300 | |
| 301 | time.sleep(1) # Prevent too quick request |
| 302 | |
| 303 | site = None |
| 304 | gc.collect() # Implicit garbage collection |
| 305 | startup = False |
| 306 | time.sleep(60 * 20) |
| 307 | |
| 308 | def announceSite(self, site): |
| 309 | site.announce(mode="update", pex=False) |
nothing calls this directly
no test coverage detected