Files
SocialPub/tools/pasture/Caddyfile
T
thepraandClaude Opus 5.5 eeb873b816 Load: a flood of fake servers; unique-key lookups no longer scan
tools/pasture/flood/flood.cs answers as twenty fake servers (flood1..20.test)
and sends signed Creates, Likes and Follows at a set rate; load.sh measures
the answers, the queue's wait and processing times, its drain and a persona's
home timeline meanwhile (docs/LOAD.md has the method and the runs).

What the runs found:
- Every unique index was partial on $type: "string", which MongoDB never uses
  for an equality lookup, so every post by ObjectURI, actor by ActorURI,
  deleted object, domain block, remote instance and the rest was a
  collection scan (280 ms a post lookup at 30 000 posts). They are partial on
  $gt: "" now, which an equality on a string implies; MongoDB.Entities
  rebuilds them in place at the next start.
- Two inbox workers capped intake near 110 activities a second:
  Federation:InboxConcurrency and DeliveryConcurrency (default 8) set them.
- The indexes the plan listed as missing: a post's boosts and replies, a
  persona's boosts, who follows an actor, timeline rows by author, a post's
  likes and pins.

At 300 activities a second (200 let through, the rest 429 by the per-origin
limit) the queue wait went from 29 s to 6 ms at p50; with the limits lifted
PrivaPub processes about 900 a second, each in under 10 ms, and the home
timeline stays under 20 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
2026-10-05 19:16:30 +02:00

120 lines
1.8 KiB
Caddyfile

{
local_certs
skip_install_trust
}
privapub.test {
tls internal
reverse_proxy pasture-privapub:80
}
gts.test {
tls internal
reverse_proxy pasture-gts:80
}
mastodon.test {
tls internal
reverse_proxy pasture-mastodon:3000
}
misskey.test {
tls internal
reverse_proxy pasture-misskey:3000
}
sharkey.test {
tls internal
reverse_proxy pasture-sharkey:3000
}
lemmy.test {
tls internal
reverse_proxy pasture-lemmy:8536
}
akkoma.test {
tls internal
reverse_proxy pasture-akkoma:4000
}
decepub.test {
tls internal
reverse_proxy pasture-decepub:80
}
hollo.test {
tls internal
reverse_proxy pasture-hollo:3000
}
iceshrimp.test {
tls internal
reverse_proxy pasture-iceshrimp:3000
}
pleroma.test {
tls internal
reverse_proxy pasture-pleroma:4000
}
peertube.test {
tls internal
reverse_proxy pasture-peertube:9000
}
pixelfed.test {
tls internal
reverse_proxy pasture-pixelfed:8080
}
wordpress.test {
tls internal
reverse_proxy pasture-wordpress:80
}
friendica.test {
tls internal
reverse_proxy pasture-friendica:80
}
mobilizon.test {
tls internal
reverse_proxy pasture-mobilizon:4000
}
gancio.test {
tls internal
reverse_proxy pasture-gancio:13120
}
funkwhale.test {
tls internal
reverse_proxy pasture-funkwhale:80
}
piefed.test {
tls internal
reverse_proxy pasture-piefed:5000
}
mbin.test {
tls internal
reverse_proxy pasture-mbin:80
}
nodebb.test {
tls internal
reverse_proxy pasture-nodebb:4567
}
lemmy19.test {
tls internal
reverse_proxy pasture-lemmy19:8536
}
flood1.test, flood2.test, flood3.test, flood4.test, flood5.test, flood6.test, flood7.test, flood8.test, flood9.test, flood10.test, flood11.test, flood12.test, flood13.test, flood14.test, flood15.test, flood16.test, flood17.test, flood18.test, flood19.test, flood20.test {
tls internal
reverse_proxy pasture-flood:8080
}