The file and function I examined are those mentioned in the traceback
reported by David for Ubuntu 16.04, deja-dup 34.2-0ubuntu1.1, duplicity
0.7.06-2ubuntu2:

  File "/usr/lib/python2.7/dist-packages/duplicity/collections.py",
  line 105, in add_filename
    (self.volume_name_dict, filename)
  AssertionError: ({1: 'duplicity-full.20161129T015237Z.vol1.difftar'},
    'duplicity-full.20161129T015237Z.vol1.difftar.gz')

For Ubuntu 14.04, deja-dup 30.0-0ubuntu4.1, duplicity 0.6.23-1ubuntu4.1:

  File "/usr/lib/python2.7/dist-packages/duplicity/collections.py",
  line 100, in add_filename
    (self.volume_name_dict, filename)
  AssertionError: ({1: 'duplicity-full.20170115T235149Z.vol1.difftar'},
    'duplicity-full.20170115T235149Z.vol1.difftar.gz')

Function add_filename(self, filename) parses the examined filename (in
this case "duplicity-full.$timestring.vol1.difftar.gz") and decides if
it should be added to the examined backup set (self, an instance of the
BackupSet class, consisting for now of just one backup volume,
"duplicity-full.$timestring.vol1.difftar").

The function returns True if it adds the examined filename to the
current backup set, False if it rejects it, for instance it rejects
files whose parse results don't include "full" or "inc", and files whose
parse results indicate a different timestring than the timestring of the
current backup set.

The assertion that fails is "not
self.volume_name_dict.has_key(pr.volume_number)", meaning that the
volume number found in the parse results (in our case 1) is already in
the backup set (stored as a volumenumber/filename dictionnary: {1:
duplicity-full.$timestring.vol1.difftar}).

A quick way to avoid that bug would be to turn the assertion into an "if
volume-number already in backup-set, reject filename" (i.e. return
False), which means that when encountering two or more of:

  duplicity-$type.$timestring.vol$n.difftar
  duplicity-$type.$timestring.vol$n.difftar.gz
  duplicity-$type.$timestring.vol$n.difftar.gpg

duplicity would accept into the backup set the first filename it
processes, and reject the others.

A probably better way would be to also compare compression flags when
grouping the files into sets, in addition to backup type (full/inc) and
times. That way an uncompressed file couldn't be added to a backup set
made up of compressed files, and vice versa. In the simplest case, this
would require:

  adding the attribute self.compressed to the class BackupSet

  adding self.compressed = bool(pr.compressed) to the method
  BackupSet.set_info, that initializes the attributes of the
  class instances

  adding something like
    if bool(pr.compressed) != bool(self.compressed):
        return False
  to BackupSet.add_filename after it tests for backup type
  and backup times

But then it gets complicated by the fact that a backup set can be
partially encrypted, if I understand correctly the rest of the
add_filename function ("if bool(pr.encrypted) !=
bool(self.encrypted)..."). So perhaps the function should also
accommodate backup sets which are partially compressed? Also, assuming
the add_filename is changed to group files into sets of homogeneous
compression/encryption status, then how would the function that groups
sets into chains have to be modified?

I don't know duplicity's source code well enough, and won't any time
soon, to take a decision regarding this issue and fix it by myself,
sorry.

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to deja-dup in Ubuntu.
https://bugs.launchpad.net/bugs/1652410

Title:
  Undescriptive duplicity/collection-status error when the backup
  directory contains two volumes with different file names and same
  volume number in the same backup set

Status in Déjà Dup:
  Confirmed
Status in deja-dup package in Ubuntu:
  Confirmed

Bug description:
  Deja-dup has never worked for me (last 5 years) always errors.
  No after a new system reinstall 16.04 I was determined to get it up and 
running and learn about it's use,and perhaps recover some old data.
   Still fails with  see attached text

  ProblemType: Bug
  DistroRelease: Ubuntu 16.04
  Package: deja-dup 34.2-0ubuntu1.1
  ProcVersionSignature: Ubuntu 4.4.0-57.78-generic 4.4.35
  Uname: Linux 4.4.0-57-generic x86_64
  ApportVersion: 2.20.1-0ubuntu2.4
  Architecture: amd64
  CurrentDesktop: Unity
  Date: Fri Dec 23 16:56:43 2016
  ExecutablePath: /usr/bin/deja-dup
  InstallationDate: Installed on 2016-12-02 (21 days ago)
  InstallationMedia: Ubuntu 16.04.1 LTS "Xenial Xerus" - Release amd64 
(20160719)
  ProcEnviron:
   PATH=(custom, user)
   SHELL=/usr/bin/fish
   LANG=en_CA.UTF-8
   LANGUAGE=en_CA:en
   XDG_RUNTIME_DIR=<set>
  SourcePackage: deja-dup
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/deja-dup/+bug/1652410/+subscriptions

-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to