ipn: add no-disconnect in-process bus subscribers
Add NotifyInProcessNoDisconnect for in-process IPN bus subscribers that must apply every bus update. When such a subscriber falls behind, block Notify production instead of sending the terminal fell-behind message and closing the watch. This is intentionally not available over LocalAPI, where a slow or stuck out-of-process client should still be disconnected rather than allowed to stall tailscaled. In-process callers that use the bit must keep their callbacks fast and must not call back into LocalBackend from the callback. Updates #20062 Change-Id: I730ad61a07475243bb226fba2262c1a3ded211ae Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
913df7e6ea
commit
1deb6a8449
@@ -156,6 +156,21 @@ const (
|
||||
// promotes any patch into a full-Node entry in [Notify.PeersChanged]
|
||||
// for this session, at the cost of bandwidth.
|
||||
NotifyPeerPatches NotifyWatchOpt = 1 << 15
|
||||
|
||||
// NotifyInProcessNoDisconnect, if set, marks this watcher as an
|
||||
// in-process subscriber that must not be disconnected for falling behind
|
||||
// on its notification queue. Instead, if its queue fills, Notify
|
||||
// production blocks until the watcher catches up.
|
||||
//
|
||||
// Callers using this bit must receive and process notifications promptly.
|
||||
// Their callbacks must not call back into LocalBackend or wait on work that
|
||||
// might call back into LocalBackend, because the producer might be holding
|
||||
// LocalBackend's mutex while waiting for the watcher to catch up.
|
||||
//
|
||||
// This bit is only valid for in-process callers of
|
||||
// LocalBackend.WatchNotificationsAs. LocalAPI WatchIPNBus clients must
|
||||
// not request it.
|
||||
NotifyInProcessNoDisconnect NotifyWatchOpt = 1 << 16
|
||||
)
|
||||
|
||||
// NotifyRateLimitIncompatibleBits is the set of new-style IPN bus
|
||||
|
||||
Reference in New Issue
Block a user