Skip to content

android: show route limit failures in a health warning - #894

Open
barnstar wants to merge 1 commit into
mainfrom
jonathan/route-limit-error
Open

barnstar wants to merge 1 commit into
mainfrom
jonathan/route-limit-error

Conversation

@barnstar

@barnstar barnstar commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Updates tailscale/corp#49819

Use a health warning to guide users to modify their tailnet
ACLs to exclude this device from app connectors when the number
of routes exceeds our internal cap.

Keep this warning visible while disconnected and during startup, clearing
it only after a VPN tunnel is successfully configured. Add regression
coverage for disconnected warnings, retries, and startup suppression.

@barnstar
barnstar requested review from hiimtmac and kari-ts October 9, 2026 16:05
Report the route count and limit, and guide users to modify their tailnet
ACLs to exclude this device from app connectors.

Keep this warning visible while disconnected and during startup, clearing
it only after a VPN tunnel is successfully configured. Add regression
coverage for disconnected warnings, retries, and startup suppression.

Updates tailscale/corp#49819

Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
@barnstar
barnstar force-pushed the jonathan/route-limit-error branch from 23a4ccc to 0b99589 Compare October 9, 2026 19:09
@barnstar barnstar changed the title android: show route limit failures in a modal dialog android: show route limit failures in a health warning Oct 9, 2026
private val TAG = "health"
// These warnings can prevent connection. Show them while disconnected or warming up,
// until the backend clears them after the problem is resolved.
private val persistentWarnableCodes: Set<String> = setOf(ROUTE_LIMIT_CODE)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of special casing particular warnings, what if we track why tailscale stopped? eg

sealed interface DisconnectReason {
    data object UserRequested : DisconnectReason
    data class BackendFailure(val error: String) : DisconnectReason
}

and

val shouldShowHealthWarnings =
    ipnState == Ipn.State.Running ||
    (ipnState == Ipn.State.Stopped &&
        disconnectReason is DisconnectReason.BackendFailure)

if the user intentionally disconnects they shouldn't see the route limit error imo.
also, in general I think it'd be good to surface warnings showing why connection failed (eg https://github.com/tailscale/tailscale-android/blob/main/libtailscale/backend.go#L198) and this might be a good way to take care of them?

private fun routeLimitWarning() =
UnhealthyState(
WarnableCode = HealthNotifier.ROUTE_LIMIT_CODE,
Severity = Health.Severity.medium,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be a higher severity?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants