Persistent Storage: Race condition when activate/deactivate operation is canceled by the user and then started again
In wb:e33b99b782f9bc03a38a8d5097a4d194, it happened that the activation of the BrowserBookmarks feature was canceled and then quickly started again, which caused two operations to be run in parallel. One of those failed because the target directory was already created by the other resulting in a "Error activating feature BrowserBookmarks" message to be shown.
Relevant logs:
May 18 21:09:38 amnesia tps[7816]: INFO:feature.py:105: [2] Activating feature BrowserBookmarks
May 18 21:09:38 amnesia tps[7816]: INFO:feature.py:383: [2] Waiting for the user to terminate processes {'Tor Browser': [15656]}
May 18 21:09:42 amnesia tps[7816]: INFO:feature.py:399: [2] Conflicting process 15656 was terminated
May 18 21:09:42 amnesia tps[7816]: INFO:feature.py:405: [2] All conflicting processes were terminated, continuing
May 18 21:09:42 amnesia tps[7816]: INFO:mount.py:196: [2] Activating mount /run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks...
May 18 21:09:45 amnesia tps-frontend-wrapper[14572]: ERROR:feature.py:250: Error activating feature BrowserBookmarks: Operation was cancelled
May 18 21:09:45 amnesia tps[7816]: INFO:job.py:114: [3] Cancelling job 2
May 18 21:09:46 amnesia tps[7816]: INFO:job.py:114: [4] Cancelling job 2
May 18 21:09:46 amnesia tps[7816]: INFO:feature.py:105: [4] Activating feature BrowserBookmarks
May 18 21:09:46 amnesia tps[7816]: INFO:mount.py:196: [4] Activating mount /run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks...
May 18 21:09:47 amnesia tps[7816]: cp: cannot create directory '/run/nosymfollow/live/persistence/TailsData_unlocked/bookmarks': File exists
May 18 21:09:47 amnesia tps[7816]: ERROR:object.py:193: [4] Command '['cp', '-a', '/run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks', '/run/nosymfollow/live/persistence/TailsData_unlocked/bookmarks']' returned non-zero exit status 1.
May 18 21:09:47 amnesia tps[7816]: Traceback (most recent call last):
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/dbus/object.py", line 178, in handle_method_call_inner
May 18 21:09:47 amnesia tps[7816]: result = func(*parameters)
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/configuration/feature.py", line 100, in Activate
May 18 21:09:47 amnesia tps[7816]: self.do_activate(job)
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/configuration/feature.py", line 123, in do_activate
May 18 21:09:47 amnesia tps[7816]: mount.activate()
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/configuration/mount.py", line 247, in activate
May 18 21:09:47 amnesia tps[7816]: self._activate_using_bind_mount()
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/configuration/mount.py", line 306, in _activate_using_bind_mount
May 18 21:09:47 amnesia tps[7816]: executil.check_call(["cp", "-a", self.dest, self.src])
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/executil.py", line 49, in check_call
May 18 21:09:47 amnesia tps[7816]: return _run(cmd, *args, **kwargs, check=True)
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3/dist-packages/tps/executil.py", line 33, in _run
May 18 21:09:47 amnesia tps[7816]: p = subprocess.run(cmd, *args, **kwargs)
May 18 21:09:47 amnesia tps[7816]: File "/usr/lib/python3.9/subprocess.py", line 528, in run
May 18 21:09:47 amnesia tps[7816]: raise CalledProcessError(retcode, process.args,
May 18 21:09:47 amnesia tps[7816]: subprocess.CalledProcessError: Command '['cp', '-a', '/run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks', '/run/nosymfollow/live/persistence/TailsData_unlocked/bookmarks']' returned non-zero exit status 1.
May 18 21:09:47 amnesia tps-frontend-wrapper[14572]: ERROR:feature.py:250: Error activating feature BrowserBookmarks: GDBus.Error:subprocess.CalledProcessError: Command '['cp', '-a', '/run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks', '/run/nosymfollow/live/persistence/TailsData_unlocked/bookmarks']' returned non-zero exit status 1. Command output:
May 18 21:09:47 amnesia tps-frontend-wrapper[14572]: <tt>cp: cannot create directory '/run/nosymfollow/live/persistence/TailsData_unlocked/bookmarks': File exists</tt>
May 18 21:09:47 amnesia tps[7816]: INFO:mount.py:249: [2] Done activating mount /run/nosymfollow/home/amnesia/.mozilla/firefox/bookmarks
Edited by segfault