aboutsummaryrefslogtreecommitdiff
path: root/doc/devblog/day_284__development.mdwn
blob: 7ecf6843016f6c2a49c5cdd4c4806bffd529cfd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Implemented `git annex drop --all`. This also added for free drop with
`--unused` and `--key`, which overlap with `git annexdropunused` and
`git annex dropkey`.

The `concurrentprogress` branch had gone too long without being merged, and
had a lot of merge conflicts. I resolved those, and went ahead and merged
it into master. However, since the ascii-progress library is not ready yet,
I made it a build flag, and it will build without it by default. So, `git
annex get -J5` can be used now, but no progress bars will display yet.

When doing concurrent downloads, either with the new -J or by hand by
running multiple processes, there was a bug in the diskreserve
checking code. It didn't consider the disk space that was in the process of
being used by other concurrent downloads, so would let more downloads
start up than there was space for.

I was able to fix this pretty easily, thanks to the transfer log files.
Those were originally added just to let the webapp display transfers, but
proved very helpful here!

Finally, made .git/annex/transfer/failed/ files stop accumulating when the
assistant is not being used. Looked into also cleaning up stale
.git/annex/transfer/{upload,download}/ files (from interrupted transfers).
But, since those are used as lock files, it's difficult to remove them
in a concurrency safe way.

Update: Unfortunately, I turned out to have stumbled over an apparent bug
in haskell's implementation of file locking.
<https://github.com/haskell/unix/issues/44> Had to work around that.

Happily, the workaround also let me implement cleanup of stale transfer
info files, left behind when a git-annex process was interrupted. So,
.git/annex/transfer/ will entirely stop accumulating cruft!