summaryrefslogtreecommitdiff
path: root/doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn
blob: 122224a8f3bf2fb54781d55e17bfa15ca331d39c (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
foo is a local repo, bar is a bare remote.

I upgraded foo's git-annex to 0.20110325 and upgraded a local repo backend
to version 2. I then ran `git annex copy . --to bar` and checked the
remote. This created WORM:SHA512--123123 files in annex/objects.
Understandable but unwanted. So I upgraded git-annex on bar's machine, as
well.

    % git annex copy . --to bar
    copy quux (checking bar) git-annex-shell: Repository version 1 is not supported. Upgrade this repository: git-annex upgrade (to bar)
    git-annex-shell: Repository version 1 is not supported. Upgrade this repository: git-annex upgrade
    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
    
      rsync failed -- run git annex again to resume file transfer
    failed

Running `git annex upgrade` on bar's machine I get:

    % git annex upgrade
    upgrade  (v1 to v2) (moving content...) git-annex: Prelude.read: no parse

Again, bar is a bare repo.
Running the copy job again, I am still getting the same error as above (as expected). Partial contents of annex/objects on bar:

    [...]
    SHA512:123
    WORM:SHA512--234
    [...]


-- RichiH

> Upgrading bare repos to v2 generally works fine, so I actually need
> to see the full content of annex/, not a fragment, in order to debug this.
> (Filename contents I don't need to see.) Feel free to email me the details at
> joey@kitenet.net if you don't want to post them here. --[[Joey]]

>> Sent. -- RichiH

>>> Ok, I'm going to go work on my reading comprehension. I see now
>>> that you
>>> explained the problem pretty well. The problem is caused by these
>>> few weird v1 mixed with v2 keys in the annex.
>>> Ones like "annex/objects/WORM:SHA512--$sha512".
>>>
>>> That's a v1 key, but a corrupt form of the key; it's missing the 
>>> size and mtime fields that all WORM keys have in v1. And 
>>> the filename is itself a key, a v2 SHA512 key. These were
>>> created when you did the `git annex copy to the v1 bare repo.
>>> In v2, git-annex-shell takes a full key object, while in v1,
>>> it takes a key name and a backend name. This incompatability
>>> leads to the weird behavior seen.
>>>
>>> I had suggested you delete data.. don't. On second thought,
>>> you shouldn't delete anything. I'll simply make the v2 upgrade
>>> detect and work around this bug.
>>> --[[Joey]]

>>>> This should be fixed in current git. The scambled keys will be 
>>>> fixed up on upgrade. Thanks for your patience! [[done]] --[[Joey]]

>>>>> I should stop reading your answers via git; by the time I got to
>>>>> "second thoughts", I had already deleted the files & directories
>>>>> in question, upgraded the bare repo and was busy uploading from my
>>>>> local repo. I agree that taking care of this in the upgrade code
>>>>> is the cleanest approach, by the way.
>>>>> No need to thank me for my patience; thank you for your quickness!
>>>>> RichiH
>>>>> 
>>>>> PS: If I get a handle on the mtime issue in the SHA backend, git
>>>>> annex will be pretty much perfect :)