hrefna,
@hrefna@hachyderm.io avatar

Part of my frustration with and one of the things I find baffling giving everything else in it: the lack of tools for backpressure.

Backpressure is fundamental in building reliable distributed systems (c.f., Notes on Distributed Systems for Young Bloods). From a C2S perspective I get why it wouldn't need to be specified, but from a S2S federated protocol perspective its absence is frustrating.

All that it says is to take care not to overwhelm others and a bit on rate limits

jenniferplusplus,
@jenniferplusplus@hachyderm.io avatar

@hrefna yes.

But I also want state convergence. No matter what, different hosts are going to wind up with different views of the state of the graph. Why are there no mechanisms to detect that and enable convergence?

hrefna,
@hrefna@hachyderm.io avatar

@jenniferplusplus Yes. Yes. A million times yes.

There's no sync capability despite that we're basically building a distributed database where we are trying to have a sync'd state.

So if you fall off for a few hours what is expected to happen?

Everyone's favorite thing from C++: Unspecified.

julian,
@julian@community.nodebb.org avatar

@hrefna @jenniferplusplus well, that's because we're all building apps around a protocol whose largest implementor doesn't specify context, ever.

So you end up receiving disjoint objects whose only relation to other objects is inReplyTo, and you have to hope you can find a match.

That automatically precludes the ability to develop sync/backfill.

hrefna,
@hrefna@hachyderm.io avatar

@julian But that could be specified at the protocol level. It isn't, but it is kind of weird

There are entire sections on it for Dynamo (first image), Tiara discusses it extensively in the posted snippet (second image) and in multiple other sections, and it is covered as something to address in Requirements for Signaling Protocols (RFC 3726).

These all have multiple sections addressing different parts of this problem and solve it with different levels of flexibility, but they all address it.

Crash resistance. Observe that Tiara can be separated into disconnected components by the crash of even a single process. Tiara can be fortified against separation due to crashes in the following manner. At the bottom, each process maintains a crash-redundancy link to its right neighbor’s neighbor. That is, the bottom level list becomes doubly connected. Thus, it can tolerate a single crash. The crash tolerance can be further improved by adding similar links to more distant processes. Since these links only span a fixed number of processes, their construction does not affect the asymptotic complexity of stabilization of Tiara. Note that in an asynchronous model there is no reliable way to distinguish a crashed process from a slow one [15]. Thus, to accomplish this, the processes need to be equipped with failure detectors [9, 10]. A failure detector alerts the process if its neighbor crashes. Then, Tiara stabilizes to a legitimate state corresponding to the system without the crashed process
5.10.3. Graceful Handling of NSIS Entity Problems NSIS entities SHOULD be able to detect a malfunctioning peer. It may notify the NSIS Initiator or another NSIS entity involved in the signaling process. The NSIS peer may handle the problem itself e.g., switching to a backup NSIS entity. In the latter case note that synchronization of state between the primary and the backup entity is needed.

SoniEx2,
@SoniEx2@chaos.social avatar

@hrefna @jenniferplusplus the more y'all talk about AP the more we want to stay away from it heh.

if it's worth anything: thanks for that.

jenniferplusplus,
@jenniferplusplus@hachyderm.io avatar

@SoniEx2 @hrefna These things are all fixable problems, it "just" takes coordination between a few dozen part time volunteer implementers 😭

I tell myself I'm going to just do it unilaterally and then help everyone else catch up. I'm not sure if I'm lying to myself or not.

hrefna,
@hrefna@hachyderm.io avatar

@jenniferplusplus

That's a mood.

@SoniEx2

julian,
@julian@community.nodebb.org avatar

@jenniferplusplus:

I want a mechanism to determine if two party's view of a collection are equivalent. I want to be able to query if an object is contained in a collection without enumerating the whole collection. I want a mechanism to request re-delivery or maybe failed delivery notifications.

For what it's worth, these are all goals that would align well with the interests of a broad set of implementors. I make a little noise now and again about the SWICG forum task force, but directly addressing some of these concerns would definitely be on our radar.

Current focus is on aligning on a common object type for higher level collections (the context), but I'm thinking that Collection (ordered, ideally) would be the best fit and also allow for future use cases like you mentioned earlier.

You have the ideas, we might be able to supply the coordination...

cc @hrefna @SoniEx2

mikedev,

Yeah I've had a number of times where I wanted to query a collection - but hopefully something a bit more lightweight than a full blown query language.

And in the Nomad protocol, we've got delivery notifications. It's critical to finding out what happened to something in a decentralised communication system. It's 2024. Vanishing into space without any trace is not an option.

julian,
@julian@community.nodebb.org avatar

@mikedev do you know any other implementors who expose a collection (even if not defined by ?

mikedev,

Most everybody uses followers, following and outbox in some form. We also use them for Access Lists (aka circles/aspects) and photo albums and search results. I'll probably use them for event calendars soon. And of course as mentioned we use them for conversations so that everybody sees the same view of the discussion. It's a very under-utilised organisational mechanism and that seems odd. They're quite useful.

Everybody has lists of all kinds of things on their server, but turning them into collections means you can share them.

julian,
@julian@community.nodebb.org avatar

@mikedev said in Part of my frustration with and one of the things I find baffling giving everything else in it: the lack of tools for backpressure.:

And of course as mentioned we use them for conversations so that everybody sees the same view of the discussion. It's a very under-utilised organisational mechanism and that seems odd. They're quite useful.

Ah yes, that was what I was referring to, a collection for a conversation. It certainly does seem under-utilised but I wasn't entirely sure whether that was true or not.

Are you aware of any other implementors that expose a collection for a collection of a topic's content?

jenniferplusplus,
@jenniferplusplus@hachyderm.io avatar

@julian @mikedev
Fedbox does, and they use the Replies collection for it.

https://metalhead.club/@mariusor/111716353263015161

Letterbook will. I'm flexible as to how, but my current plan is to duplicate the OP's replies collection into the context.

cc @mariusor

mariusor,
@mariusor@metalhead.club avatar

I'm not sure if this is what @julian asks about, but this would be an example of what I meant in the post mentioned by @jenniferplusplus:

https://federated.id/objects/2e6cf5a8-ffa8-4fca-b4cd-8e0c9a584a75/replies

You can see the list of replies fully (the public ones at least), and some of them have inReplyTo attributes that reference multiple objects. This is done to have a way to reconstitute the reply tree structure.

@mikedev

mikedev,

That's fine for what you're doing, but we don't have a reply 'tree'. We have a conversation which is an object owned by its creator. They add and remove activities from it. If it wasn't added to the conversation collection, it's not part of the official conversation and supporting applications will ignore it. In this way we co-exist with microblogs, but we can do lots of things that they can't. Like hold a coherent conversation with a defined audience, and support circles/aspects and private groups, and have comment controls. And we can relay things without third party permission artifacts. And we aren't wasting time talking to people that never see us and don't even know we're in the conversation. it's actually a pretty clever construct.

mariusor,
@mariusor@metalhead.club avatar

@mikedev I wasn't following the larger discussion thread, I don't really know what you guys are talking about. I only meant my reply as a clarification to the quote Jennifer++ posted.

julian,
@julian@community.nodebb.org avatar

@mariusor Thanks for sharing this use-case, it's very helpful and quite novel, I might add!

An inReplyTo array addresses the problem of backfill/ghost-replies with a bottom-up approach, vs a context collection which would be a top-down approach... though depending on what direction your tree grows, perhaps it's the other way around 🤔

A context collection would also provides the entire tree, which depending on size may or may not be preferred. Tradeoffs...

I think perhaps there is space for both, although I will admit that if my code encountered an Array in inReplyTo it might just terminate because it expects a single uri.


re: the original ask, specifically I was asking whether any other implementors specify context in an as:Note, resolvable to a Collection.

cc @jenniferplusplus

mariusor,
@mariusor@metalhead.club avatar

> ...if my code encountered an Array in inReplyTo it might just terminate because it expects a single uri

@julian sadly that's the case for most fediverse software at the moment. :(

@jenniferplusplus

hrefna,
@hrefna@hachyderm.io avatar

What could it say instead?

It could give handling considerations with 429s.

It could specify needing to have an abandonment time after which point you assume an actor is "dead."

RFC 6120 (XMPP), when talking about clients, has the following requirement

julian,
@julian@community.nodebb.org avatar

@hrefna What needs to be specified at the protocol level?

If I received a 429 I'd naturally assume that I should put the request back in the queue for retry, but I can see how other implementations might not support that.

hrefna,
@hrefna@hachyderm.io avatar

@julian It Depends™, but even just saying something like:

"A receiving server MAY return a 429 on a request. If this happens or if the server cannot be reached the sending server SHOULD retry with exponential backoff. They SHOULD have a period of time after which they will stop trying and SHOULD have a period of time after which they will consider the actor 'dead' and stop sending them messages."

Instead you get things like these:

For federated servers performing delivery to a third party server, delivery SHOULD be performed asynchronously, and SHOULD additionally retry delivery to recipients if it fails due to network error.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • fediverse
  • DreamBathrooms
  • mdbf
  • ngwrru68w68
  • magazineikmin
  • thenastyranch
  • rosin
  • khanakhh
  • osvaldo12
  • Youngstown
  • slotface
  • Durango
  • kavyap
  • InstantRegret
  • tacticalgear
  • anitta
  • ethstaker
  • provamag3
  • cisconetworking
  • tester
  • GTA5RPClips
  • cubers
  • everett
  • modclub
  • megavids
  • normalnudes
  • Leos
  • JUstTest
  • lostlight
  • All magazines