Working toward getting the data syncing to happen robustly, so a bunch of improvements.

  • Got unmount events to be noticed, so unplugging and replugging a removable drive will resume the syncing to it. There's really no good unmount event available on dbus in kde, so it uses a heuristic there.
  • Avoid requeuing a download from a remote that no longer has a key.
  • Run a full scan on startup, for multiple reasons, including dealing with crashes.

Ran into a strange issue: Occasionally the assistant will run git-annex copy and it will not transfer the requested file. It seems that when the copy command runs git ls-files, it does not see the file it's supposed to act on in its output.

Eventually I figured out what's going on: When updating the git-annex branch, it sets GIT_INDEX_FILE, and of course environment settings are not thread-safe! So there's a race between threads that access the git-annex branch, and the Transferrer thread, or any other thread that might expect to look at the normal git index.

Unfortunatly, I don't have a fix for this yet.. Git's only interface for using a different index file is GIT_INDEX_FILE. It seems I have a lot of code to tear apart, to push back the setenv until after forking every git command. :(

Before I figured out the root problem, I developed a workaround for the symptom I was seeing. I added a git-annex transferkey, which is optimised to be run by the assistant, and avoids running git ls-files, so avoids the problem. While I plan to fix this environment variable problem properly, transferkey turns out to be so much faster than how it was using copy that I'm going to keep it.

Comments on this page are closed.