In looking at the mailbox server today, I noticed a nameplate in the "crowded" state (three or more sides have attempted to claim it) that has been lingering for over 25 minutes, despite the fact that nobody is currently conencted to it. It looks like the sender disconnected immediately, the first receiver connected later (and submitted a message) but disconnected shortly thereafter, a few minutes later a second receiver connected (getting error=CROWDED) and disconnected, and then more receivers arrived, 3-10 minutes apart, each one getting error=CROWDED.
I'm thinking that an attempt to claim a nameplate which fails should not update the timestamp on the nameplate that keeps it alive. A stream of error=CROWDED should not be able to keep the nameplate alive indefinitely. This ties into #19 where we need CROWDED to be a bit more aggressive in erroring or disconnecting clients.
I'm not sure how to implement this, though. We don't exactly have a "this nameplate is crowded" flag: we represent that by having three or more nameplate_sides rows. And the keepalive/timeout is calculated by looking at the highest timestamp of all those rows. So if we refrain from adding a row (to avoid extending the lifetime) then we're also discarding the information how just how crowded it is.
In looking at the mailbox server today, I noticed a nameplate in the "crowded" state (three or more sides have attempted to claim it) that has been lingering for over 25 minutes, despite the fact that nobody is currently conencted to it. It looks like the sender disconnected immediately, the first receiver connected later (and submitted a message) but disconnected shortly thereafter, a few minutes later a second receiver connected (getting error=CROWDED) and disconnected, and then more receivers arrived, 3-10 minutes apart, each one getting error=CROWDED.
I'm thinking that an attempt to claim a nameplate which fails should not update the timestamp on the nameplate that keeps it alive. A stream of error=CROWDED should not be able to keep the nameplate alive indefinitely. This ties into #19 where we need CROWDED to be a bit more aggressive in erroring or disconnecting clients.
I'm not sure how to implement this, though. We don't exactly have a "this nameplate is crowded" flag: we represent that by having three or more
nameplate_sidesrows. And the keepalive/timeout is calculated by looking at the highest timestamp of all those rows. So if we refrain from adding a row (to avoid extending the lifetime) then we're also discarding the information how just how crowded it is.