Recent comments posted to this site:

comment 2

I'm not familiar with beegfs, but its documentation such as this https://doc.beegfs.io/latest/architecture/overview.html makes me wonder if it manages to behave consistently as we would expect a filesystem to behave.

In particular, we have a file being moved from one directory to another directory. Beegfs's docs says it will pick a random metadata node for each directory. So there can be two metadata nodes that have to be updated for a move. If one node somehow lags seeing the update, could that result in the file not appearing as present in the destination directory after the move?

I'm only speculating about how beegfs might work, but it seems unlikely that git-annex has a bug that causes it to lose an annexed file when all it's done is move it to the objects directory, that only manifests on this one filesystem.

A good next step might be to try manually adding an annexed file and see if there is some lag between git-annex add and being able to read the content of the symlink. Eg, compare:

echo foo > foo
git-annex add foo; cat foo
echo bar > bar
git-annex add bar; sleep 1m; cat bar
Comment by joey
comment 1

The failures are mostly of two varieties.

type A:

  add:                            FAIL (2.20s)
    ./Test/Framework.hs:395:
    checkcontent foo
    expected: "annexed file content"
     but got: "could not read file"

type B:

  init:              OK (1.98s)
  add:               FAIL (5.90s)
    ./Test/Framework.hs:92:
    unlock failed with unexpected exit code (transcript follows)
unlock sha1foo cp: cannot open '.git/annex/objects/3j/xV/SHA1-s25--ee80d2cec57a3810db83b80e1b320df3a3721ffa/SHA1-s25--ee80d2cec57a3810db83b80e1b320df3a3721ffa' for reading: No such file or directory

In both cases, a git-annex add is succeeding, but the annex objects directory is somehow not getting populated. Or at least, a subsequent read of a file in it has the filesystem not knowing the file that the add put there is there.

It seems quite likely a lot of other tests would also fail, but they are being skipped because the add tests fail.

In one case, the add tests are succeeding (on an adjusted unlocked branch), but then a subsequent test fails:

git-remote-annex exporttree:      FAIL (8.45s)
  ./Test/Framework.hs:92:
  export failed with unexpected exit code (transcript follows)
  mv: cannot move '.git/annex/othertmp/89ddefa4-a04c-11.0/89ddefa4-a04c-11' to '.git/annex/export.ex/89ddefa4-a04c-11ef-818d8a-1-c6223d6': Device or resource busy
  mv: cannot move '.git/annex/othertmp/89ddefa4-a04c-11.0/89ddefa4-a04c-11' to '.git/annex/export.ex/89ddefa4-a04c-11ef-818d8a-2-c718026': Device or resource busy
  git-annex: renamePath:rename '.git/annex/othertmp/89ddefa4-a04c-11.0/89ddefa4-a04c-11' to '.git/annex/export.ex/89ddefa4-a04c-11ef-87b5-e880882a4f98': resource busy (Device or resource busy)
Comment by joey
comment 3
FWIW: might be not git-annex specific since I also observe now some stalls with git push as well, gets stuck on Writing objects: 96% (1855/1932). Using newer git (2.45.1) from within a singularity env on client didn't help, so must be connection or target git (running git receive-pack) related... heh - the costs of upgrades! ;-)
Comment by yarikoptic
comment 2

similarly, if I try to get into server from the originally the client -- similar stall at

[2025-08-25 12:54:34.537964095] (Utility.Process) process [875925] done ExitSuccess
[2025-08-25 12:54:34.538354083] (Utility.Process) process [875929] read: git ["--git-dir=/home/yoh/proj/dandi/zarr-manifests/.git","--work-tree=/home/yoh/proj/dandi/zarr-manifests","--literal-pathspecs","-c","annex.debug=true","show-ref","--hash","refs/annex/last-index"]
[2025-08-25 12:54:34.541389023] (Utility.Process) process [875929] done ExitSuccess
[2025-08-25 12:54:34.542713902] (P2P.IO) [ThreadId 4] P2P > DATA 24576
[2025-08-25 12:54:34.512358033] (P2P.IO) [git-annex-shell connection Just 551102] [ThreadId 4] P2P < DATA 24576
Comment by yarikoptic
comment 1

similarly, if I try to get into server from the originally the client -- similar stall at

[2025-08-25 12:54:34.537964095] (Utility.Process) process [875925] done ExitSuccess
[2025-08-25 12:54:34.538354083] (Utility.Process) process [875929] read: git ["--git-dir=/home/yoh/proj/dandi/zarr-manifests/.git","--work-tree=/home/yoh/proj/dandi/zarr-manifests","--literal-pathspecs","-c","annex.debug=true","show-ref","--hash","refs/annex/last-index"]
[2025-08-25 12:54:34.541389023] (Utility.Process) process [875929] done ExitSuccess
[2025-08-25 12:54:34.542713902] (P2P.IO) [ThreadId 4] P2P > DATA 24576
[2025-08-25 12:54:34.512358033] (P2P.IO) [git-annex-shell connection Just 551102] [ThreadId 4] P2P < DATA 24576
Comment by yarikoptic
Feedback on encryptonlycreds=yes

Hi Joey,

thank you very mich for the quick implementation of this feature! I have tested it already successfully :)

There seems to be an minor issue when I am trying to set encryptonlycreds=yes via SETCONFIG, followed by a subsequent SETCREDS:

(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> VERSION 2
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] <-- EXTENSIONS INFO GETGITREMOTENAME UNAVAILABLERESPONSE ASYNC
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> EXTENSIONS INFO
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] <-- LISTCONFIGS
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> CONFIGEND
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] <-- INITREMOTE
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> GETCONFIG encryption
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] <-- VALUE hybrid
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> GETCONFIG onlyencryptcreds
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] <-- VALUE 
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> SETCONFIG onlyencryptcreds yes
(Annex.ExternalAddonProcess) git-annex-remote-tape[1] --> SETCREDS key aes256 70482ccb1e0a0b8f8bf6f2603174d2d6f40d940033285d3ae94e7258595dca26
git-annex: getRemoteConfigValue onlyencryptcreds found value of unexpected type PassedThrough. This is a bug in git-annex!
CallStack (from HasCallStack):
  error, called at ./Annex/SpecialRemote/Config.hs:209:28 in main:Annex.SpecialRemote.Config
  getRemoteConfigValue, called at ./Remote/Helper/Encryptable.hs:297:27 in main:Remote.Helper.Encryptable
failed
initremote: 1 failed

I am not sure if this is even supposed to be supported? Let me know if I am using it in the wrong way :)

Comment by stv0g
Download with the git-annex-install script fail
Downloading git-annex...
--2025-08-24 12:49:08--  https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-arm64-ancient.tar.gz
Resolving downloads.kitenet.net (downloads.kitenet.net)... 66.228.36.95, 2600:3c03::f03c:91ff:fe73:b0d2
Connecting to downloads.kitenet.net (downloads.kitenet.net)|66.228.36.95|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2025-08-24 12:49:09 ERROR 403: Forbidden.

The Download with the git-annex-install script fail, I guess because the build is failed. see: https://downloads.kitenet.net/git-annex/autobuild/arm64-ancient/

enableremote encryption changes: FAIL (0.73s)
./Test/Framework.hs:92:
initremote failed with unexpected exit code (transcript follows)
initremote baz
git-annex: There is no security benefit to using onlyencryptcreds=yes with encryption=shared
failed
initremote: 1 failed

It would be grate if you could fix that. Thanks in advance.

Comment by waldi1985
comment 9

3x more allocations now than before. This is probably due to the switch to OsPath, which means extra copying from ByteString.

    Thu Aug 21 20:18 2025 Time and Allocation Profiling Report  (Final)

       git-annex +RTS -p -RTS find

    total time  =        0.99 secs   (989 ticks @ 1000 us, 1 processor)
    total alloc = 1,514,545,208 bytes  (excludes profiling overheads)

COST CENTRE                        MODULE                         SRC                                                 %time %alloc

keyFile                            Annex.Locations                Annex/Locations.hs:(790,1)-(806,44)                   7.1   12.9
>>=.\                              Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:(148,9)-(149,44)    6.9    2.4
>>=.\.succ'                        Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:148:13-76           5.6    0.7
keyFile.esc                        Annex.Locations                Annex/Locations.hs:(796,9)-(801,32)                   5.3   10.7
ifM                                Utility.Monad                  Utility/Monad.hs:(62,1)-(64,44)                       5.1    8.7
ifM.\                              Utility.Monad                  Utility/Monad.hs:64:9-44                              3.5    8.6
hashUpdates.processBlocks          Crypto.Hash                    Crypto/Hash.hs:(103,5)-(112,76)                       3.1    0.3
inAnnex'.\                         Annex.Content.Presence         Annex/Content/Presence.hs:(53,61)-(68,31)             3.1    8.5
keyFile.anyneedesc                 Annex.Locations                Annex/Locations.hs:806:9-44                           3.1    1.0
seekFilteredKeys.exists            CmdLine.Seek                   CmdLine/Seek.hs:465:9-92                              2.8    0.4
fileKey                            Annex.Locations                Annex/Locations.hs:(814,1)-(824,41)                   2.1    1.0
keyPath                            Annex.Locations                Annex/Locations.hs:(834,1)-(836,23)                   1.8    5.9
Comment by joey