Recent comments posted to this site:

comment 2
d'oh -- right! installed 10.20261026+git114-ge7b75e58eb-1~ndall+1 form con/datalad builds and it works now. Thanks!
Comment by yarikoptic —
comment 1

Another approach would be to keep a bounded pool of PerRepoServerStates. When a PerRepoServerState needs to be added to the pool and the pool is full, first find one for a different repository that is not in use, and remove it from the pool, stopping its helper processes.

This seems easier to implement than coordinating a process pool between Annex objects.

And it could also avoid problems with too many open files, since it could also close open file handles in the Annex object such as the keys db handle. I do think that running out of file descriptors would be the next problem after too many processes when scaling p2phttp up to serving a large number of repositories, so this might as well solve that too.

There would still be worker pools for processes like git hash-object that are shared amoung all threads serving the same repository, scaling up to one per cpu. So long as the pool is capped at some reasonable number (say 100), that is ok, it means something like 100 * (cpus + 1) processes, probably well under the maximum number of processes. Make the maximum concurrent repositories served a tunable value.

Comment by joey —
comment 1

This error message is displayed when S3 getObject fails with a 412 "Precondition Failed".

I suspect you may be running into S3 eventual consistency issues.

The key is of course the one pointed to by the file that it's acting on when this error is displayed. So I don't see any reason for git-annex to display the key.

As for displaying the versionid or etag, I think that would already be done by --debug when it shows the http request headers.

I did develop this patch to display that as part of the error message, but I'd only be inclined to apply it if --debug doesn't have the information.

diff --git a/Remote/S3.hs b/Remote/S3.hs
index bf77e56419..74569a0a3a 100644
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -762,9 +762,10 @@ retrieveExportWithContentIdentifierS3 hv r rs info loc (cid:_) dest gk p =
   where
    go iv = withS3Handle hv $ \case
        Right h -> do
-           rewritePreconditionException $ retrieveHelper' (gitconfig r) info h dest p iv $
-               limitGetToContentIdentifier cid $
-                   S3.getObject (bucket info) o
+           rewritePreconditionException cid o $
+               retrieveHelper' (gitconfig r) info h dest p iv $
+                   limitGetToContentIdentifier cid $
+                       S3.getObject (bucket info) o
            k <- either return id gk
            case extractContentIdentifier cid o of
                Right vid -> do
@@ -779,12 +780,16 @@ retrieveExportWithContentIdentifierS3 _ _ _ _ _ [] _ _ _ = giveup "missing conte

 {- Catch exception getObject returns when a precondition is not met,
  - and replace with a more understandable message for the user. -}
-rewritePreconditionException :: Annex a -> Annex a
-rewritePreconditionException a = catchJust (Url.matchStatusCodeException want) a $ 
-   const $ giveup "requested version of object is not available in S3 bucket"
+rewritePreconditionException :: ContentIdentifier -> S3.Object -> Annex a -> Annex a
+rewritePreconditionException cid o a = catchJust (Url.matchStatusCodeException want) a $ 
+   const $ giveup $ "requested version of object (" ++ ciddesc ++ ") ++ is not available in S3 bucket"
   where
    want st = statusCode st == 412 && 
        statusMessage st == "Precondition Failed"
+   ciddesc = case extractContentIdentifier cid o of
+       Left etag -> "etag " ++ T.unpack etag
+       Right (Just (S3VersionID _ vid)) -> T.unpack vid
+       Right Nothing -> mempty

 -- Does not check if content on S3 is safe to overwrite, because there
 -- is no atomic way to do so. When the bucket is versioned, this is
Comment by joey —
macOS builds

Thanks for the pointer to the CHANGELOG. I'd missed that file once I'd cloned the repo. FWIW the CHANGELOG (a) doesn't seem to be linked anywhere obvious for web viewing, (b) the gitweb view is pretty hidden (only linked on the download page, which is possibly only linked from the install/fromsource page), and (c) the gitweb is quite slow. So at present cloning the git repo is probably the easiest way to to read the CHANGELOG (versus doc/news which is on the web site, but only a recent subset).

Possibly there's some way to make the CHANGELOG file available as a plain text view on the web more directly than "find the gitweb, navigate to the tree"? And maybe link it from a doc/news article that sorts just after the "recent changes", as a "for older release notes, see...".

For the record, from some digging my guess is that the macOS 10.15 to macOS 14/15 minimum version change happened when the builds moved to GitHub Actions (and thus GitHub Runners), which as best I can tell was around May 2026. So builds up to April 2026 might also work on macOS 10.15. But I didn't see anything particularly relevant to my use case between January 2026 and April 2026, so I've not tried any builds newer than December 2025 on the macOS 10.15 system.

I'd tend to agree with just having a single macOS build at this point. The next likely incompatible change is to stop building Intel/macOS "fat" binaries, which I suspect some combination of Apple and/or GitHub will force on you sometime in the next 12 months. But that's a very obvious failure case -- you get "Bad CPU type in executable" when trying to run anything if running an ARM-only build on an Intel system.

So it'd be worth documenting the expected minimum supported macOS for the standalone build (here macOS 15, or maybe macOS 14), but it doesn't need to be in the directory name. And it'd be worth noting when the builds go ARM/M1-only (which I'd guess will be when GitHub remove the macOS Intel runners, likely in 2027, or when macOS 15 goes unsupported).

If you haven't already, I think you can mark this issue as "done" at your convenience, as I have setup that seems to work now, and the directory name is no longer misleading.

Ewen

Comment by ewen —
comment 4

The CHANGELOG file is what you want I think.

I've updated the website re MacPorts.

I suspect it may even need macOS 15. That's the OS that the build is happening on. I don't think it makes sense to include the supported OS version in the directory name really; it's unlikely there would be 2 incompatible versions that both would have builds happening.

Comment by joey —
show git-annex release notes for 2026

Also in case it helps someone else later, as best I can tell the release notes are in the git repository as doc/news/version_10.20xxxxxx.mdwn, but it seems like the older release notes get deleted when newer ones are added (at a guess, to keep ~4 release notes showing up on the news page).

This makes reviewing the release notes since an older release somewhat more difficult than it might be, as it seems like the only record of the older release notes is as deleted files, in the git history.

I ended up coming up with:

git clone git://git-annex.branchable.com/ git-annex
cd git-annex/doc/news
git log --stat f1985eabce137adb8851cbbaea1fa8474406f7b5..HEAD . | egrep '^commit|10.2026.*\+\+\+\+\+\+' | grep -B 1 doc/news | grep -v '^--' | sed 'N;s/\n/ /; s/^commit/git show/; s/  doc/:doc/; s/mdwn.*$/mdwn/' | tac | sh -x

to see the release notes for 2026, in chronologically increasing order (ie oldest to newest). Where the magic git commit hash was found by searching with "git log" for the last 2025 / first 2026 commit to doc/news, since the version I found that ran for me (on macOS 10.15) was the last 2025 standalone build, and thus I wanted to know what had changed since then.

(Possibly older news articles could be git mv-ed to an archive directory rather than git rm-ed to make this easier in future, without cluttering up the news page?)

Anyway skim reading the least year's worth of release notes (from the above command, and some slight tidying up), I don't see much that an internal-only git annex remote-only would particularly need before the various October 2026 fixes (which I can't easily have due to build dependencies not supporting macOS 10.15). The only thing that stood out as potentially desirable is the hash performance improvements in git-annex 10.20260624, but for this mostly-archivable, infrequently updated use case I can probably live without those too.

Ewen

Comment by ewen —