Skip to content

Retire the /passthrough/* 410 migration tombstone in the first release after 0.10.0 #1010

Closed

Description

@jarvis9443

0.10.0 removed the implicit /passthrough/:provider/*rest tunnel and left a fixed 410 Gone with error.code: endpoint_removed on unclaimed /passthrough/* paths, so un-migrated callers get a migration pointer instead of a bare 404.

That was scoped to one release. The code says so (crates/aisix-proxy/src/passthrough_route.rs: "the migration pointer beats a bare 404 for one release") and the public docs say so ("answer 410 Gone ... for one release, then become plain 404s").

Due: the first release after 0.10.0 — whatever its number turns out to be. Do not read this as "0.11.0"; the next version may well be 1.0.0. The condition is "one release has shipped since 0.10.0", not a particular number.

What to do

  • Remove the special-cased 410 branch and let /passthrough/* take the router's normal miss path.
  • Drop the accompanying WARN and the unresolved-provider metric labels that existed to size un-migrated callers.
  • Update the docs sentence that promises the 410 for one release.
  • Check first whether operators still need the pointer — the WARN was added precisely so we could measure that. If un-migrated traffic is still visible in the field, defer deliberately rather than by default.

Filed because this only existed in a code comment and a docs sentence, which is how the previous one of these (#1009) nearly got carried silently.

Activity

  1. added
    release-debtDeferred compatibility work due at a specific future release — swept in aisix-release Phase 0
    on Aug 20, 2026
  2. changed the title [-]Retire the /passthrough/* 410 migration tombstone at 0.11.0[/-] [+]Retire the /passthrough/* 410 migration tombstone in the first release after 0.10.0[/+] on Aug 20, 2026
  3. coderabbitai commented on Aug 20, 2026

    @coderabbitai
    🔗 Related PRs

    #853 - feat(config): request_body_limit_bytes defaults to 0 = no cap; uniform 413 surface [merged]
    #982 - feat(passthrough): explicit PassthroughRoute resources replace the implicit provider tunnel [merged]
    #984 - fix(passthrough): forward-proxy routes may claim reserved prefixes and mirror the whole path [merged]
    #986 - feat(passthrough): per-request envelope detection, drop protocol/streaming config [merged]
    #983 - fix(passthrough): OTLP route/identity attribution, route on rejected events, header_key 401 names its header [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  4. jarvis9443 commented on Aug 20, 2026

    @jarvis9443
    ContributorAuthor

    This deadline is now enforced instead of remembered — #1011 put a marker on LEGACY_TUNNEL_GONE:

    COMPAT-SINCE: 0.10.0 #1010 — 0.10.0 removed the implicit `/passthrough/:provider/*rest`
    tunnel, and a migration pointer beats a bare 404 while un-migrated callers are still out
    there; the public docs promise the 410 for one release, then plain 404s.
    

    crates/aisix-core/tests/compat_debt.rs runs in the required rust unit + coverage job and fails every PR once a stable tag with a higher MAJOR.MINOR than 0.10.0 exists — 0.11.0 or 1.0.0, whichever it turns out to be. Release candidates don't count as shipped.

    What the gate does not decide is the judgement call in this issue: it forces the question at the deadline, it doesn't answer it. The WARN was added so we could size un-migrated traffic first, and the paired docs sentence still has to be updated by hand — neither is visible to the gate. It also fires only once the next release has already shipped; the aisix-release Phase 0 sweep is what catches this in the release it's due in.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    release-debtDeferred compatibility work due at a specific future release — swept in aisix-release Phase 0

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions