update
This commit is contained in:
parent
61fbea992d
commit
6dfb94b2d7
1 changed files with 34 additions and 0 deletions
|
@ -15,3 +15,37 @@ Probably should KISS. Just add a lock file that is taken before changes to
|
||||||
the git-annex branch, and if it's locked, wait. Changes to the git-annex
|
the git-annex branch, and if it's locked, wait. Changes to the git-annex
|
||||||
branch tend to happen quickly (unless it's committing an enormous set of
|
branch tend to happen quickly (unless it's committing an enormous set of
|
||||||
changes, and even that is relatively fast), so waiting seems ok. --[[Joey]]
|
changes, and even that is relatively fast), so waiting seems ok. --[[Joey]]
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Commit 7981eb4cb512fbe3c49a3dd165c31be14ae4bc49 is more pessimistic,
|
||||||
|
describes some other potential issues.
|
||||||
|
|
||||||
|
* The journal needs to be emptied (done) and kept locked (not done) during
|
||||||
|
a merge, since a merge operates at a level below the journal, and any
|
||||||
|
changes that are journaled during a merge can overwrite changes merged
|
||||||
|
in from another branch.
|
||||||
|
|
||||||
|
* Two git-annex processes can be doing conflicting things and inconsistent
|
||||||
|
information be written to the journal.
|
||||||
|
|
||||||
|
- One example would be concurrent get and drop of the same key.
|
||||||
|
But could this really race? If the key was already present, the get
|
||||||
|
would do nothing, so record no changes. If the key was not yet present,
|
||||||
|
the drop would do nothing, and record no changes.
|
||||||
|
|
||||||
|
- Instead, consider two copys of a key to different locations. If the
|
||||||
|
slower copy starts first and ends last, it could cache the location
|
||||||
|
info, add the new location, and lose the other location it was copied to.
|
||||||
|
Tested it and the location is not cached during the whole copy (logChange
|
||||||
|
reads the current log immediatly before writing), so this
|
||||||
|
race's window is very small -- but does exist.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
## Updated plan
|
||||||
|
|
||||||
|
Make Branch.change transactional, so it takes a lock, reads a file,
|
||||||
|
applies a function to it, and writes the changed file.
|
||||||
|
|
||||||
|
Make Branch.update hold the same lock.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue