1) Why is the FTP service configured to allow a single connection per IP address? This at least seems overly restrictive.
2) In the code path in question, we have:
except ftplib.error_temp, e:
if retries > _number_of_retries:
raise errors.TransportError(msg="FTP temporary error during GET %s. Aborting." % self.abspath(relpath), orig_error=e)
else: warning("FTP temporary error: %s. Retrying.", str(e)) self._reconnect()
return self.get(relpath, decode, retries+1)
There should be a message in .bzr.log which indicates what error we are getting.It might be that the server is giving us a "error_temp" error when really it should be giving a "permanent" error. (Like perhaps a file doesn't exist, but for some reason it is considering that a temporary error and not a permanent one.)
I don't think I've seen you declare what FTP server is being used.
I also haven't seen any comment about whether aftp:// has any effect (use active ftp rather than passive ftp.)
I'm not entirely sure why we reconnect for a temporary error. It might also be possible that we need to more actively *disconnect* as part of the 'reconnect()' code.
1) Why is the FTP service configured to allow a single connection per IP address? This at least seems overly restrictive.
2) In the code path in question, we have: TransportError( msg="FTP temporary error during GET %s. Aborting."
% self.abspath( relpath) ,
orig_error= e)
warning( "FTP temporary error: %s. Retrying.", str(e))
self._ reconnect( )
except ftplib.error_temp, e:
if retries > _number_of_retries:
raise errors.
else:
return self.get(relpath, decode, retries+1)
There should be a message in .bzr.log which indicates what error we are getting.It might be that the server is giving us a "error_temp" error when really it should be giving a "permanent" error. (Like perhaps a file doesn't exist, but for some reason it is considering that a temporary error and not a permanent one.)
I don't think I've seen you declare what FTP server is being used.
I also haven't seen any comment about whether aftp:// has any effect (use active ftp rather than passive ftp.)
I'm not entirely sure why we reconnect for a temporary error. It might also be possible that we need to more actively *disconnect* as part of the 'reconnect()' code.