[apt-proxy-devel] r661 - trunk/apt_proxy
Chris Halls
halls at alioth.debian.org
Wed Jul 4 10:33:41 UTC 2007
Author: halls
Date: Wed Jul 4 10:33:41 2007
New Revision: 661
Log:
* Add STATE_CONNECTING. It was previously defined but not used.
* Return an error to client if an unknown exception occurs while setting up the request
Modified:
trunk/apt_proxy/cache.py
Modified: trunk/apt_proxy/cache.py
==============================================================================
--- trunk/apt_proxy/cache.py (original)
+++ trunk/apt_proxy/cache.py Wed Jul 4 10:33:41 2007
@@ -25,6 +25,7 @@
from twisted.internet import protocol, defer, reactor
from twisted.web import http
from twisted.protocols import basic
+from twisted.python import failure
import os, re, stat, time, sys
from misc import log
@@ -58,7 +59,6 @@
STATE_SENDFILE = 4 # File is being sent from cache
STATE_SENT = 5 # Post download processing / waiting for clients to complete
STATE_FAILED = 6 # Download failed
-
bytesDownloaded = 0
@@ -130,16 +130,25 @@
if hasattr(request, 'is_real_client'):
log.msg("this is a real request:" + self.file_path, "CacheEntry")
self.requested_by_client = True
- if(len(self.requests)==1):
- # First request
- self.get()
- else:
- # Subsequent request - client must be brought up to date
- if self.state in (self.STATE_DOWNLOAD, self.STATE_SENT):
- self.send_cached_file(request=request)
- elif self.state == self.STATE_SENDFILE:
- self.transfer_file(request=request)
-
+ try:
+ if(len(self.requests)==1):
+ # First request
+ self.get()
+ else:
+ # Subsequent request - client must be brought up to date
+ if self.state in (self.STATE_DOWNLOAD, self.STATE_SENT):
+ self.send_cached_file(request=request)
+ elif self.state == self.STATE_SENDFILE:
+ self.transfer_file(request=request)
+ except Exception, e:
+ import traceback
+ 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'):
+ log.err(' '+l, 'CacheEntry')
+ request.finishCode(http.INTERNAL_SERVER_ERROR, 'Unknown exception, see log file')
+
def remove_request(self,request):
"""
Remove request, either because streaming is complete or
@@ -147,14 +156,22 @@
If parameter request is None, downloading has been aborted early
"""
+
if request is not None and request in self.requests:
self.requests.remove(request)
if len(self.requests) != 0:
return
- log.debug("Last request removed for %s" % (self.file_path),'CacheEntry')
- self.requests_done()
+ log.debug("Last request removed for %s [%s]" % (self.file_path, self.stateToString()),'CacheEntry')
+ if self.state == self.STATE_CONNECTING:
+ self.backend.stop_download(self, request)
+ elif (self.state == self.STATE_DOWNLOAD and
+ not self.factory.config.complete_clientless_downloads ):
+ self.backend.stop_download(self, request)
+ if self.state == self.STATE_SENT:
+ self.requests_done()
+
# TODO - fixme
#if (self.factory.config.complete_clientless_downloads == False
#and self.state == self.STATE_DOWNLOAD
@@ -340,7 +357,7 @@
Start file transfer from backend server
"""
log.msg("start download:" + self.path, "CacheEntry")
-
+ self.state = self.STATE_CONNECTING
self.backend.start_download(self)
def get_request_mtime(self):
More information about the apt-proxy-devel
mailing list