Use only file offsets and timestamps at the first and last call
of PyCurlFileObject._retrieve().  Should help 851178.
---
 scripts/urlgrabber-ext-down |   11 +++++++----
 urlgrabber/grabber.py       |   14 ++++++++++++--
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/scripts/urlgrabber-ext-down b/scripts/urlgrabber-ext-down
index 3da55a4..3dafb12 100755
--- a/scripts/urlgrabber-ext-down
+++ b/scripts/urlgrabber-ext-down
@@ -55,18 +55,21 @@ def main():
             if opts.progress_obj:
                 opts.progress_obj = ProxyProgress()
                 opts.progress_obj._id = cnt
-            tm = time.time()
+
+            dlsz = dltm = 0
             try:
                 fo = PyCurlFileObject(opts.url, opts.filename, opts)
                 fo._do_grab()
                 fo.fo.close()
                 size = fo._amount_read
-                dlsz = size - fo._reget_length
+                if fo._tm_last:
+                    dlsz = fo._tm_last[0] - fo._tm_first[0]
+                    dltm = fo._tm_last[1] - fo._tm_first[1]
                 ug_err = 'OK'
             except URLGrabError, e:
-                size = dlsz = 0
+                size = 0
                 ug_err = '%d %s' % e.args
-            write('%d %d %d %.3f %s\n', opts._id, size, dlsz, time.time() - 
tm, ug_err)
+            write('%d %d %d %.3f %s\n', opts._id, size, dlsz, dltm, ug_err)
 
 if __name__ == '__main__':
     main()
diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index 0d67b1f..5df0436 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -1126,11 +1126,13 @@ class URLGrabber(object):
             return filename
 
         def retryfunc(opts, url, filename):
-            tm = time.time()
             fo = PyCurlFileObject(url, filename, opts)
             try:
                 fo._do_grab()
-                _TH.update(url, fo._amount_read - fo._reget_length, 
time.time() - tm, None)
+                if fo._tm_last:
+                    dlsz = fo._tm_last[0] - fo._tm_first[0]
+                    dltm = fo._tm_last[1] - fo._tm_first[1]
+                    _TH.update(url, dlsz, dltm, None)
                 if not opts.checkfunc is None:
                     obj = CallbackObject(filename=filename, url=url)
                     _run_callback(opts.checkfunc, obj)
@@ -1223,6 +1225,8 @@ class PyCurlFileObject(object):
         self._error = (None, None)
         self.size = 0
         self._hdr_ended = False
+        self._tm_first = None
+        self._tm_last = None
         self._do_open()
         
 
@@ -1237,6 +1241,12 @@ class PyCurlFileObject(object):
 
     def _retrieve(self, buf):
         try:
+            tm = self._amount_read + len(buf), time.time()
+            if self._tm_first is None:
+                self._tm_first = tm
+            else:
+                self._tm_last = tm
+
             if not self._prog_running:
                 if self.opts.progress_obj:
                     size  = self.size + self._reget_length
-- 
1.7.4.4

_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to