Make more efforts of looking for peers when publishing a site
This commit is contained in:
parent
c772592c4a
commit
be65ff2c40
1 changed files with 24 additions and 7 deletions
|
@ -865,29 +865,46 @@ 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):
|
||||||
|
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
|
# Update content.json on peers
|
||||||
@util.Noparallel()
|
@util.Noparallel()
|
||||||
def publish(self, limit="default", inner_path="content.json", diffs={}, cb_progress=None):
|
def publish(self, limit="default", inner_path="content.json", diffs={}, cb_progress=None):
|
||||||
published = [] # Successfully published (Peer)
|
published = [] # Successfully published (Peer)
|
||||||
publishers = [] # Publisher threads
|
publishers = [] # Publisher threads
|
||||||
|
|
||||||
if not self.peers:
|
|
||||||
self.announce(mode="more")
|
|
||||||
|
|
||||||
if limit == "default":
|
if limit == "default":
|
||||||
limit = 5
|
limit = 5
|
||||||
threads = limit
|
threads = limit
|
||||||
|
|
||||||
|
self.waitForPeers(limit, limit / 2, 10)
|
||||||
|
self.waitForPeers(1, 1, 60)
|
||||||
|
|
||||||
peers = self.getConnectedPeers()
|
peers = self.getConnectedPeers()
|
||||||
num_connected_peers = len(peers)
|
num_connected_peers = len(peers)
|
||||||
|
|
||||||
random.shuffle(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 += self.getRecentPeers(limit * 2)
|
||||||
|
peers = set(peers)
|
||||||
peers = set(peers)
|
|
||||||
|
|
||||||
self.log.info("Publishing %s to %s/%s peers (connected: %s) diffs: %s (%.2fk)..." % (
|
self.log.info("Publishing %s to %s/%s peers (connected: %s) diffs: %s (%.2fk)..." % (
|
||||||
inner_path, limit, len(self.peers), num_connected_peers, list(diffs.keys()), float(len(str(diffs))) / 1024
|
inner_path, limit, len(self.peers), num_connected_peers, list(diffs.keys()), float(len(str(diffs))) / 1024
|
||||||
|
|
Loading…
Reference in a new issue