Pasture: Smithereen 1.0.3, and failed server descriptions retried
Smithereen joins the pasture (tools/pasture/peers/smithereen.sh): its image on the shared MySQL, with imgproxy and a file server behind Caddy, a JDK trust store with the pasture's CA, accounts from its signup form, and a password grant for a local application. scenarios/smithereen.sh drives its VKontakte-like API: friends as mutual follows, wall posts, comments, likes, reposts (quotes there), polls, edits, deletions, private messages, the unfollow and statistics, 30 checks. A post on someone else's wall never reaches PrivaPub, since Smithereen sends it only to servers whose actors publish a wall: G-0009, waiting for the owner. PrivaPub: a server description that failed (Smithereen serves no NodeInfo until it has a description) frees its week, so the server's next arrival asks again instead of a week later. The shared Postgres takes 400 connections: at 100 the village seed ran it dry (Sharkey's API answered 500, Misskey dropped deliveries). The seeder records a follow that stands from an earlier seed when the step itself fails, so the checker no longer expects that follower to see nothing. 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
7b0377c85f
commit
5f150b7a59
12 files changed
+367
-5
No files matched your search
@@ -203,7 +203,20 @@ class Seeder:
|
||||
# -- the graph
|
||||
def v_follow(self, s):
|
||||
platform = s["actor"].split("/")[0]
|
||||
outcome = driver(platform).follow(self.session(s["actor"]), self.acct(s["args"]["target"]))
|
||||
d, sess, acct = driver(platform), self.session(s["actor"]), self.acct(s["args"]["target"])
|
||||
try:
|
||||
outcome = d.follow(sess, acct)
|
||||
except Exception:
|
||||
# the accounts outlive a run: a follow that failed here may stand from an earlier seed, and the checker must
|
||||
# know it, or it expects the follower to see nothing of the target's followers-only posts
|
||||
try:
|
||||
rel = d.relationship(sess, acct)
|
||||
except Exception:
|
||||
rel = {}
|
||||
if rel.get("following") or rel.get("requested"):
|
||||
self.ledger.add(type="relation", n=s["n"], verb="follow", actor=s["actor"], target=s["args"]["target"],
|
||||
state="accepted" if rel.get("following") else "requested", observed=True)
|
||||
raise
|
||||
self.ledger.add(type="relation", n=s["n"], verb="follow", actor=s["actor"], target=s["args"]["target"], state=outcome)
|
||||
|
||||
def _wait_pending(self, s):
|
||||
|
||||
Reference in new issue
Block a user