update; split out hard todo
This commit is contained in:
parent
eb9063c0d1
commit
3247415c56
3 changed files with 42 additions and 16 deletions
|
@ -18,6 +18,17 @@ available!
|
||||||
I may need to fork off multiple watcher processes to handle this.
|
I may need to fork off multiple watcher processes to handle this.
|
||||||
See [[bugs/Issue_on_OSX_with_some_system_limits]].
|
See [[bugs/Issue_on_OSX_with_some_system_limits]].
|
||||||
|
|
||||||
|
## todo
|
||||||
|
|
||||||
|
* Run niced and ioniced? Seems to make sense, this is a background job.
|
||||||
|
* configurable option to only annex files meeting certian size or
|
||||||
|
filename criteria
|
||||||
|
* option to check files not meeting annex criteria into git directly,
|
||||||
|
automatically
|
||||||
|
* honor .gitignore, not adding files it excludes (difficult, probably
|
||||||
|
needs my own .gitignore parser to avoid excessive running of git commands
|
||||||
|
to check for ignored files)
|
||||||
|
|
||||||
## beyond Linux
|
## beyond Linux
|
||||||
|
|
||||||
I'd also like to support OSX and if possible the BSDs.
|
I'd also like to support OSX and if possible the BSDs.
|
||||||
|
@ -65,17 +76,6 @@ I'd also like to support OSX and if possible the BSDs.
|
||||||
|
|
||||||
* Windows has a Win32 ReadDirectoryChangesW, and perhaps other things.
|
* Windows has a Win32 ReadDirectoryChangesW, and perhaps other things.
|
||||||
|
|
||||||
## todo
|
|
||||||
|
|
||||||
- Run niced and ioniced? Seems to make sense, this is a background job.
|
|
||||||
- configurable option to only annex files meeting certian size or
|
|
||||||
filename criteria
|
|
||||||
- option to check files not meeting annex criteria into git directly,
|
|
||||||
automatically
|
|
||||||
- honor .gitignore, not adding files it excludes (difficult, probably
|
|
||||||
needs my own .gitignore parser to avoid excessive running of git commands
|
|
||||||
to check for ignored files)
|
|
||||||
|
|
||||||
## the races
|
## the races
|
||||||
|
|
||||||
Many races need to be dealt with by this code. Here are some of them.
|
Many races need to be dealt with by this code. Here are some of them.
|
||||||
|
|
|
@ -10,7 +10,8 @@ all the other git clones, at both the git level and the key/value level.
|
||||||
them. Also, enqueue Downloads for any files we're missing.
|
them. Also, enqueue Downloads for any files we're missing.
|
||||||
* The TransferWatcher does not notice ongoing transfers, because inotify is
|
* The TransferWatcher does not notice ongoing transfers, because inotify is
|
||||||
waiting for the info file to be closed, but that never happens, it's left
|
waiting for the info file to be closed, but that never happens, it's left
|
||||||
open to keep it locked.
|
open to keep it locked. May need to separate the transfer info files
|
||||||
|
into an info file, and a lock file.
|
||||||
|
|
||||||
## longer-term TODO
|
## longer-term TODO
|
||||||
|
|
||||||
|
@ -32,10 +33,6 @@ all the other git clones, at both the git level and the key/value level.
|
||||||
only uploading new files but not downloading, and only downloading
|
only uploading new files but not downloading, and only downloading
|
||||||
files in some directories and not others. See for use cases:
|
files in some directories and not others. See for use cases:
|
||||||
[[forum/Wishlist:_options_for_syncing_meta-data_and_data]]
|
[[forum/Wishlist:_options_for_syncing_meta-data_and_data]]
|
||||||
* Running external commands from one thread blocks all of them until
|
|
||||||
it completes. Try to switch to haskell's threaded runtime, which I
|
|
||||||
think fixes this. Failing that, make sure all network accessing
|
|
||||||
commands are run by separate processes or something.
|
|
||||||
|
|
||||||
## data syncing
|
## data syncing
|
||||||
|
|
||||||
|
|
29
doc/todo/threaded_runtime.mdwn
Normal file
29
doc/todo/threaded_runtime.mdwn
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
The [[design/assistant]] would be better if git-annex used ghc's threaded
|
||||||
|
runtime (`ghc -threaded`).
|
||||||
|
|
||||||
|
Currently, whenever the assistant code runs some external command, all
|
||||||
|
threads are blocked waiting for it to finish.
|
||||||
|
|
||||||
|
For transfers, the assistant works around this problem by forking separate
|
||||||
|
upload processes, and not waiting on them until it sees an indication that
|
||||||
|
they have finished the transfer. While this works, it's messy.. threaded
|
||||||
|
would be better.
|
||||||
|
|
||||||
|
When pulling, pushing, and merging, the assistant runs external git
|
||||||
|
commands, and this does block all other threads. The threaded runtime would
|
||||||
|
really help here.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Currently, git-annex seems unstable when built with the threaded runtime.
|
||||||
|
The test suite tends to hang when testing add. `git-annex` occasionally
|
||||||
|
hangs, apparently in a futex lock. This is not the assistant hanging, and
|
||||||
|
git-annex does not otherwise use threads, so this is surprising. --[[Joey]]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
It would be possible to not use the threaded runtime. Instead, we could
|
||||||
|
have a child process pool, with associated continuations to run after a
|
||||||
|
child process finishes. Then periodically do a nonblocking waitpid on each
|
||||||
|
process in the pool in turn (waiting for any child could break anything not
|
||||||
|
using the pool!). This is probably a last resort...
|
Loading…
Add table
Add a link
Reference in a new issue