add better error reporting to NotEnoughPeersError

This commit is contained in:
Brian Warner 2007-01-16 18:47:52 -07:00
parent 8d4d2c82c4
commit fed539a16d
3 changed files with 24 additions and 11 deletions

View File

@ -77,6 +77,9 @@ class FileUploader:
max_peers = None
self.permuted = self._peer.permute_peerids(self._verifierid, max_peers)
self.peers_who_said_yes = []
self.peers_who_said_no = []
self.peers_who_had_errors = []
self._total_peers = len(self.permuted)
for p in self.permuted:
@ -103,12 +106,20 @@ class FileUploader:
self._total_peers))
if len(self.permuted) == 0:
# there are no more to check
raise NotEnoughPeersError("%s goodness, want %s, have %d "
"landlords, %d total peers" %
(self.goodness_points,
self.target_goodness,
len(self.landlords),
self._total_peers))
yes = ",".join([peerid_to_short_string(p)
for p in self.peers_who_said_yes])
no = ",".join([peerid_to_short_string(p)
for p in self.peers_who_said_no])
err = ",".join([peerid_to_short_string(p)
for p in self.peers_who_had_errors])
msg = ("%s goodness, want %s, have %d "
"landlords, %d total peers, "
"peers:yes=%s;no=%s;err=%s" %
(self.goodness_points, self.target_goodness,
len(self.landlords), self._total_peers,
yes, no, err))
log.msg("NotEnoughPeersError: %s" % msg)
raise NotEnoughPeersError(msg)
if self.peer_index >= len(self.permuted):
self.peer_index = 0
@ -127,6 +138,7 @@ class FileUploader:
def _allocate_response(bucket):
if self.debug:
print " peerid %s will grant us a lease" % idlib.b2a(peerid)
self.peers_who_said_yes.append(peerid)
self.landlords.append( (peerid, bucket_num, bucket) )
self.goodness_points += 1
if (self.goodness_points >= self.target_goodness and
@ -146,10 +158,13 @@ class FileUploader:
return
if res.check(TooFullError):
if self.debug: print " too full"
self.peers_who_said_no.append(peerid)
elif res.check(IndexError):
if self.debug: print " no connection"
self.peers_who_had_errors.append(peerid)
else:
if self.debug: print " other error:", res
self.peers_who_had_errors.append(peerid)
self.permuted.remove(peerid) # this peer was unusable
else:
if self.debug: print " they gave us a lease"

View File

@ -12,3 +12,6 @@ def a2b(i):
print "b32decode failed on a %s byte string '%s'" % (len(i), i)
raise
def peerid_to_short_string(peerid):
return b2a(peerid)[:4]

View File

@ -324,8 +324,3 @@ class WebishServer(service.MultiService):
#print "REMEMBERING", self.site, dl, IDownloader
#self.site.remember(dl, IDownloader)
# TODO: figleaf gets confused when the last line of a file is a comment. I
# suspect an off-by-one error in the code that decides which lines are code
# and which are not.
pass