[apt-proxy-devel] r677 - trunk/apt_proxy

Chris Halls halls at alioth.debian.org
Fri Aug 17 11:05:58 UTC 2007


Author: halls
Date: Fri Aug 17 11:05:58 2007
New Revision: 677

Log:
Improve individual fetchers disconnect handling


Modified:
   trunk/apt_proxy/cache.py
   trunk/apt_proxy/fetchers.py

Modified: trunk/apt_proxy/cache.py
==============================================================================
--- trunk/apt_proxy/cache.py	(original)
+++ trunk/apt_proxy/cache.py	Fri Aug 17 11:05:58 2007
@@ -150,7 +150,7 @@
             log.err('Unknown error adding request %s - %s' % (request, e), 'CacheEntry')
             self.requests.remove(request)
             f = failure.Failure(*sys.exc_info())
-            for l in f.getTraceback().split('\n'):
+            for l in str(f).split('\n'):
                 log.err('  '+l, 'CacheEntry')
             request.finishCode(http.INTERNAL_SERVER_ERROR, 'Unknown exception, see log file')
 			
@@ -582,6 +582,7 @@
         if self.name == new_name:
             return
         log.debug("renaming file: %s->%s " % (self.name, new_name), 'CacheEntry')
+        #os.system("find " + os.path.dirname(self.name))
         os.rename(self.name, new_name)
         self.name = new_name
 

Modified: trunk/apt_proxy/fetchers.py
==============================================================================
--- trunk/apt_proxy/fetchers.py	(original)
+++ trunk/apt_proxy/fetchers.py	Fri Aug 17 11:05:58 2007
@@ -50,6 +50,8 @@
         self.backend = cacheEntry.backend
         self.len_received = 0
         self.deferred = defer.Deferred()
+        #import traceback
+        #self.deferred.addCallback(lambda x:traceback.print_stack())
         self.start_download()
         return self.deferred
 
@@ -353,6 +355,8 @@
 
     def handleResponse(self, buffer):
         #log.debug('handleResponse, %s bytes' % (len(buffer)), 'HttpFetcher')
+        if self.finished: 
+            return
         log.debug('handleResponse status=%s' % (self.http_status), 'HttpFetcher')
         if self.http_status == http.NOT_MODIFIED:
             log.debug("Backend server reported file is not modified: " + self.uri,'HttpFetcher')
@@ -446,9 +450,11 @@
         http.HTTPClient.sendHeader(self, name, value)
         
     def disconnect(self):
-        log.debug("DISCONNECT:",'HttpFetcher')
-        import traceback
-        traceback.print_stack()
+        log.debug("DISCONNECT:",'FetcherHttpClient')
+        self.transport.loseConnection()
+        self.finished = True
+        #import traceback
+        #traceback.print_stack()
 
 
 class HttpFetcher(protocol.ClientFactory):
@@ -518,10 +524,12 @@
             fetcher.fetcher_internal_error("http_client self.connection == None")
 
     def disconnect(self):
+        log.debug("disconnect connector:%s" % self.connector, 'HttpFetcher')
         if self.connector:
             self.connector.disconnect()
         else:
-            self.connection.transport.loseConnection()
+            #self.connection.transport.loseConnection()
+            self.connection.disconnect()
         self.isConnected = False
 
 class FtpFetcher(protocol.Protocol):
@@ -545,11 +553,13 @@
         self.isConnected = False
         self.instance = None
         self.ftpclient = None
+        self.aborted = False
 
     def connect(self):
         """
         Establish connection to ftp server specified by backendServer
         """
+        self.aborted = False
         self.connectCallback = defer.Deferred()
         if not self.backendServer.username:
             creator = protocol.ClientCreator(reactor, ftp.FTPClient, passive=0)
@@ -563,6 +573,10 @@
         return self.connectCallback
 
     def controlConnectionMade(self, ftpclient):
+        if self.aborted:
+            log.debug('Aborting control connection')
+            ftpclient.transport.loseConnection()
+            return
         self.ftpclient = ftpclient
 
         if(self.backendServer.backend.config.passive_ftp):
@@ -693,12 +707,14 @@
         self.parent.data_received(data)
 
     def disconnect(self):
+        self.aborted = True
         if self.ftpclient is not None:
             log.debug('disconnecting', 'ftp_client')
             self.ftpclient.quit()
             self.ftpclient.transport.loseConnection()
             self.ftpclient = None
-            
+        else:
+            log.debug('disconnect: no ftpclient', 'ftp_client')
     def connectionLost(self, reason=None):
         """
         Maybe we should do some recovery here, I don't know, but the Deferred



More information about the apt-proxy-devel mailing list