Comment 10 for bug 997909

Revision history for this message
Jonathan (jjcf89) wrote : Re: apt-btrfs-snapshot creates snapshots that cannot be deleted

Creation of @ snapshot:

 $ sudo apt-btrfs-snapshot snapshot; sudo apt-btrfs-snapshot snapshot
Create a snapshot of '/tmp/apt-btrfs-snapshot-mp-r4lbis5q/@' in '/tmp/apt-btrfs-snapshot-mp-r4lbis5q/@apt-snapshot-2016-01-04_09:55:08'
Create a snapshot of '/tmp/apt-btrfs-snapshot-mp-vszwto5y/@' in '/tmp/apt-btrfs-snapshot-mp-vszwto5y/@apt-snapshot-2016-01-04_09:55:08/@'

Possible fix, not sure about name root_snapshot_dir though:

 $ diff /usr/lib/python3/dist-packages/apt_btrfs_snapshot.py.orig /usr/lib/python3/dist-packages/apt_btrfs_snapshot.py -u3
--- /usr/lib/python3/dist-packages/apt_btrfs_snapshot.py.orig 2016-01-04 09:48:53.632890479 -0500
+++ /usr/lib/python3/dist-packages/apt_btrfs_snapshot.py 2016-01-04 09:53:30.168895671 -0500
@@ -260,7 +260,15 @@

     def delete_snapshot(self, snapshot_name):
         mp = self.mount_btrfs_root_volume()
+ snapshot_dir = os.path.join(mp, snapshot_name)
+ # Check for @ snapshot inside snapshot. Need to delete this
+ # snapshot first if exists
+ root_snapshot_dir = os.path.join(snapshot_dir, "@")
+ if os.path.isdir(root_snapshot_dir):
+ res = self.commands.btrfs_delete_snapshot(
+ root_snapshot_dir)
+
         res = self.commands.btrfs_delete_snapshot(
- os.path.join(mp, snapshot_name))
+ snapshot_dir)
         self.umount_btrfs_root_volume()
         return res

 $ sudo apt-btrfs-snapshot delete @apt-snapshot-2016-01-04_09:55:08
Delete subvolume '/tmp/apt-btrfs-snapshot-mp-4g4167i8/@apt-snapshot-2016-01-04_09:55:08/@'
Delete subvolume '/tmp/apt-btrfs-snapshot-mp-4g4167i8/@apt-snapshot-2016-01-04_09:55:08'

Also create_btrfs_root_snapshot() could check for an existing snapshot and not create another one or add milliseconds to snapshot name.