Make more efforts of looking for peers when publishing a site

This commit is contained in:
Vadim Ushakov 2021-03-31 11:27:19 +07:00
parent c772592c4a
commit be65ff2c40

View file

@ -865,28 +865,45 @@ class Site(object):
background_publisher.finalize()
del self.background_publishers[inner_path]
def waitForPeers(self, num_peers, num_connected_peers, time_limit):
start_time = time.time()
for _ in range(time_limit):
if len(self.peers) >= num_peers and len(self.getConnectedPeers()) >= num_connected_peers:
return True
self.announce(mode="more", force=True)
for wait in range(10):
self.needConnections(num=num_connected_peers)
time.sleep(2)
if len(self.peers) >= num_peers and len(self.getConnectedPeers()) >= num_connected_peers:
return True
if time.time() - start_time > time_limit:
return True
return False
# Update content.json on peers
@util.Noparallel()
def publish(self, limit="default", inner_path="content.json", diffs={}, cb_progress=None):
published = [] # Successfully published (Peer)
publishers = [] # Publisher threads
if not self.peers:
self.announce(mode="more")
if limit == "default":
limit = 5
threads = limit
self.waitForPeers(limit, limit / 2, 10)
self.waitForPeers(1, 1, 60)
peers = self.getConnectedPeers()
num_connected_peers = len(peers)
random.shuffle(peers)
peers = sorted(peers, key=lambda peer: peer.connection.handshake.get("rev", 0) < config.rev - 100) # Prefer newer clients
# Prefer newer clients
peers = sorted(peers, key=lambda peer: peer.connection.handshake.get("rev", 0) < config.rev - 100)
if len(peers) < limit * 2 and len(self.peers) > len(peers): # Add more, non-connected peers if necessary
# Add more, non-connected peers if necessary
if len(peers) < limit * 2 and len(self.peers) > len(peers):
peers += self.getRecentPeers(limit * 2)
peers = set(peers)
self.log.info("Publishing %s to %s/%s peers (connected: %s) diffs: %s (%.2fk)..." % (