r338 - in /debtorrent/trunk/DebTorrent: BT1/FileSelector.py BT1/PiecePicker.py download_bt1.py

camrdale-guest at users.alioth.debian.org camrdale-guest at users.alioth.debian.org
Sun Jan 20 02:38:05 UTC 2008


Author: camrdale-guest
Date: Sun Jan 20 02:38:05 2008
New Revision: 338

URL: http://svn.debian.org/wsvn/debtorrent/?sc=1&rev=338
Log:
Fix the broken unpickling of files due to the unique branch merge.

Modified:
    debtorrent/trunk/DebTorrent/BT1/FileSelector.py
    debtorrent/trunk/DebTorrent/BT1/PiecePicker.py
    debtorrent/trunk/DebTorrent/download_bt1.py

Modified: debtorrent/trunk/DebTorrent/BT1/FileSelector.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/BT1/FileSelector.py?rev=338&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/BT1/FileSelector.py (original)
+++ debtorrent/trunk/DebTorrent/BT1/FileSelector.py Sun Jan 20 02:38:05 2008
@@ -511,6 +511,7 @@
                 continue
             files.extend([self.files[i][0], self.priority[i]])
 
+        logger.info('Found %d files that need priority pickling' % len(files))
         d = {'priority': files}
         try:
             s = self.storage.pickle()
@@ -520,5 +521,5 @@
             for k in sw.keys():
                 d[k] = sw[k]
         except (IOError, OSError):
-            pass
+            logger.exception('An error occurred in pickling the data')
         return d

Modified: debtorrent/trunk/DebTorrent/BT1/PiecePicker.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/BT1/PiecePicker.py?rev=338&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/BT1/PiecePicker.py (original)
+++ debtorrent/trunk/DebTorrent/BT1/PiecePicker.py Sun Jan 20 02:38:05 2008
@@ -284,7 +284,6 @@
         
         l = self.interests[self.level_in_interests[piece]]
         p = self.pos_in_interests[piece]
-        logger.info('removing from position ' + str(p) + ' of interests level ' + str(self.level_in_interests[piece]) + ' of length ' + str(len(l)) + ' piece ' + str(piece))
         assert l[p] == piece
         q = l[-1]
         l[p] = q

Modified: debtorrent/trunk/DebTorrent/download_bt1.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/download_bt1.py?rev=338&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/download_bt1.py (original)
+++ debtorrent/trunk/DebTorrent/download_bt1.py Sun Jan 20 02:38:05 2008
@@ -842,26 +842,38 @@
     def find_files(self):
         """Search through the save directory to find files which already exist.
         
-        @rtype: C{list} of C{boolean}
-        @return: a list of which entries in the list L{files} already exist
-        
-        """
-        
+        @rtype: C{list} of C{boolean}, C{list} of alternating C{string}, C{int}
+        @return: a list of which entries in the list L{files} already exist,
+            and a list of the file names and priorities for them (see
+            L{FileSelector.unpickle})
+        
+        """
+        
+        logger.info('Searching %s for already downloaded files' % self.filename)
         found_files = {}
         for root, dirs, files in walk(self.filename):
             for file in files:
                 found_files[path.join(root, file)] = 1
         
         if not found_files:
-            return None
-        
+            logger.info('No downloaded files were found')
+            return None, []
+        
+        logger.info('Found %d downloaded files' % len(found_files.keys()))
+        found = 0
         enabled_files = []
+        priority = []
         for file, length in self.files:
             if file in found_files:
+                found += 1
+                priority.append(file)
+                priority.append(1)
                 enabled_files.append(True)
             else:
                 enabled_files.append(False)
-        return enabled_files
+
+        logging.info('%d of the found files were also present in the %d files of the torrent' % (found, len(self.files)))
+        return enabled_files, priority
         
     def initFiles(self, old_style = False):
         """Initialize the files for the download.
@@ -882,22 +894,31 @@
 
         enabled_files = None
         data = self.appdataobj.getTorrentData(self.infohash)
-        try:
-            d = data['resume data']['priority']
-            assert len(d) == len(self.files)
-            enabled_files = [x != -1 for x in d]
-        except:
-            if data:
-                logger.exception('pickled data is corrupt, manually finding and hash checking old files')
-            enabled_files = self.find_files()
-            if enabled_files:
-                priority = []
-                for found in enabled_files:
-                    if found:
-                        priority.append(1)
-                    else:
-                        priority.append(-1)
-                data = {'resume data': {'priority': priority}}
+        d = None
+        if data:
+            try:
+                d = data['resume data']['priority']
+            except:
+                logger.exception('pickled data is corrupt')
+        if not data or d is None:
+            logger.info('no cached data, manually finding and hash checking old files')
+            data = None
+            try:
+                enabled_files, priority = self.find_files()
+                if priority:
+                    data = {'resume data': {'priority': priority}}
+            except:
+                logger.exception('Error occurred when manually finding the old files')
+        else:
+            enabled_files = []
+            found = 0
+            for file, length in self.files:
+                if file in d:
+                    found += 1
+                    enabled_files.append(True)
+                else:
+                    enabled_files.append(False)
+            logger.info('Of %d previous files, %d are still valid for this torrent' % (len(d)/2, found))
 
         try:
             try:
@@ -1077,7 +1098,6 @@
 
         for i in xrange(self.len_pieces):
             if self.storagewrapper.do_I_have(i):
-                logger.info('informing picker I have piece: ' + str(i))
                 self.picker.complete(i)
         self.upmeasure = Measure(self.config['max_rate_period'],
                             self.config['upload_rate_fudge'])




More information about the Debtorrent-commits mailing list