Make use of waitForPeers() when running FileServer-driven update()

This commit is contained in:
Vadim Ushakov 2021-10-23 21:44:41 +07:00
parent e612f93631
commit b4f94e5022

View file

@ -812,6 +812,9 @@ class Site(object):
def update2(self, check_files=False, verify_files=False): def update2(self, check_files=False, verify_files=False):
if len(self.peers) < 50: if len(self.peers) < 50:
self.announce(mode="update") self.announce(mode="update")
self.waitForPeers(5, 5, 30);
self.waitForPeers(2, 2, 30);
self.waitForPeers(1, 1, 60);
self.update(check_files=check_files, verify_files=verify_files) self.update(check_files=check_files, verify_files=verify_files)
@ -891,21 +894,36 @@ class Site(object):
background_publisher.finalize() background_publisher.finalize()
del self.background_publishers[inner_path] del self.background_publishers[inner_path]
def waitForPeers(self, num_peers, num_connected_peers, time_limit): def waitForPeers_realJob(self, need_nr_peers, need_nr_connected_peers, time_limit):
start_time = time.time() start_time = time.time()
for _ in range(time_limit): for _ in range(time_limit):
if len(self.peers) >= num_peers and len(self.getConnectedPeers()) >= num_connected_peers: nr_connected_peers = len(self.getConnectedPeers())
return True nr_peers = len(self.peers)
if nr_peers >= need_nr_peers and nr_connected_peers >= need_nr_connected_peers:
return nr_connected_peers
self.updateWebsocket(connecting_to_peers=nr_connected_peers)
self.announce(mode="more", force=True) self.announce(mode="more", force=True)
if not self.isServing():
return nr_connected_peers
for wait in range(10): for wait in range(10):
self.needConnections(num=num_connected_peers) self.needConnections(num=need_nr_connected_peers)
time.sleep(2) time.sleep(2)
if len(self.peers) >= num_peers and len(self.getConnectedPeers()) >= num_connected_peers: nr_connected_peers = len(self.getConnectedPeers())
return True nr_peers = len(self.peers)
self.updateWebsocket(connecting_to_peers=nr_connected_peers)
if not self.isServing():
return nr_connected_peers
if nr_peers >= need_nr_peers and nr_connected_peers >= need_nr_connected_peers:
return nr_connected_peers
if time.time() - start_time > time_limit: if time.time() - start_time > time_limit:
return True return nr_connected_peers
return False return nr_connected_peers
def waitForPeers(self, need_nr_peers, need_nr_connected_peers, time_limit):
nr_connected_peers = self.waitForPeers_realJob(need_nr_peers, need_nr_connected_peers, time_limit)
self.updateWebsocket(connected_to_peers=nr_connected_peers)
return nr_connected_peers
def getPeersForForegroundPublishing(self, limit): def getPeersForForegroundPublishing(self, limit):
# Wait for some peers to appear # Wait for some peers to appear