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