Our @context stays JSON-LD 1.0, and a 500 no longer takes a host out
The proof term added with integrity proofs had a @graph container, which only JSON-LD 1.1 knows: Smithereen's reader refused every document carrying our context with a 500. Those 500s, retried, then put Smithereen's host in quarantine for an hour, and every delivery to it waited. Proofs are canonicalised as JSON (JCS), so the term loses nothing as a plain id; a test keeps every term within 1.0. Only an unreachable host, a timeout or a gateway's 502, 503 or 504 now counts against a host: a 500 is the server failing on that one activity, retried on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
b66f0acf4e
commit
b478049303
5 files changed
+63
-4
No files matched your search
@@ -666,6 +666,27 @@ namespace PrivaPub.Tests.Federation
|
||||
Assert.StartsWith("500", broken.Error);
|
||||
}
|
||||
|
||||
// a server that fails on one activity is up: its 500s are that delivery's to retry, and only a gateway's 502, 503 or
|
||||
// 504 counts towards taking the host out (Smithereen's 500s on documents it could not read once held every delivery
|
||||
// to it back for an hour)
|
||||
[Fact]
|
||||
public async Task Only_a_gateways_failures_take_the_host_out()
|
||||
{
|
||||
var (_, alice) = await _harness.Persona("alice");
|
||||
_harness.Peer.Answer("/broken/inbox", 500);
|
||||
_harness.Peer.Answer("/gateway/inbox", 502);
|
||||
|
||||
for (var i = 0; i < HostCircuitBreaker.Threshold; i++)
|
||||
await Attempt(alice, _harness.Peer.A + "/broken/inbox");
|
||||
var stillTried = await Attempt(alice, _harness.Peer.A + "/broken/inbox");
|
||||
for (var i = 0; i < HostCircuitBreaker.Threshold; i++)
|
||||
await Attempt(alice, _harness.Peer.A + "/gateway/inbox");
|
||||
var heldBack = await Attempt(alice, _harness.Peer.A + "/broken/inbox");
|
||||
|
||||
Assert.Equal((JobResult.Retry, "500"), (stillTried.Result, stillTried.Error[..3]));
|
||||
Assert.Equal((JobResult.Defer, "the host is unavailable"), (heldBack.Result, heldBack.Error));
|
||||
}
|
||||
|
||||
// Mastodon's 422 for two first contacts racing to create one account, and its 409 for a held lock, are retried a
|
||||
// few times; the third refusal is final like any other
|
||||
[Fact]
|
||||
|
||||
Reference in new issue
Block a user