Skip to content

bug: ApisixUpstream Sync Error Due to Race Condition with ApisixRoute Dependency #2678

@hebbaa

Description

@hebbaa

Current Behavior

Issue Summary
The APISIX Ingress Controller logs a persistent, misleading error (ResourceSyncAborted) for an ApisixUpstream resource, stating the Upstream "doesn't exist" because it is waiting for a referencing ApisixRoute. This occurs even when the dependent ApisixRoute is present and valid.

2025-12-12T03:15:44Z    error   apisix/apisix_upstream.go:865   update status   {"status": {"conditions":[{"type":"ResourcesAvailable","status":"False","observedGeneration":1,"lastTransitionTime":"2025-12-12T03:15:44Z","reason":"ResourceSyncAborted","message":"upstream doesn't exist. It will be created after ApisixRoute is created referencing it."}]}}
W1212 03:15:44.697671       1 warnings.go:70] unknown field "status.conditions[0].lastTransitionTime"
2025-12-12T03:15:44Z    warn    apisix/apisix_upstream.go:509   sync ApisixUpstream failed, will retry  {"object": {"Type":1,"Object":{"Key":"test/crl-url-migration-service-upstream","OldObject":null,"GroupVersion":"apisix.apache.org/v2"},"OldObject":null,"Tombstone":null}, "error": "upstream doesn't exist. It will be created after ApisixRoute is created referencing it."}

Upstream:

apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
name: crl-url-migration-service-upstream
namespace: test # Example Namespace
spec:
externalNodes:
- type: Domain
name: foo.com

Route Referring the Above upstream

apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: xxx-routes
namespace: test # Example Namespace
spec:
http:
- name: xxx-yyy
priority: 5
match:
hosts:
# Insert a representative hostname here
paths:
- /*
exprs:
- subject:
scope: Path
name: dfg
op: RegexMatch
value: '/a/b/.*.csl$'
upstreams:
- name: crl-url-migration-service-upstream

Expected Behavior

Error should not be logged

Error Logs

2025-12-12T03:15:44Z    error   apisix/apisix_upstream.go:865   update status   {"status": {"conditions":[{"type":"ResourcesAvailable","status":"False","observedGeneration":1,"lastTransitionTime":"2025-12-12T03:15:44Z","reason":"ResourceSyncAborted","message":"upstream doesn't exist. It will be created after ApisixRoute is created referencing it."}]}}
W1212 03:15:44.697671       1 warnings.go:70] unknown field "status.conditions[0].lastTransitionTime"
2025-12-12T03:15:44Z    warn    apisix/apisix_upstream.go:509   sync ApisixUpstream failed, will retry  {"object": {"Type":1,"Object":{"Key":"test/crl-url-migration-service-upstream","OldObject":null,"GroupVersion":"apisix.apache.org/v2"},"OldObject":null,"Tombstone":null}, "error": "upstream doesn't exist. It will be created after ApisixRoute is created referencing it."}

Steps to Reproduce

Deploy above routes and upstream in apisix and watch the ingress controller logs for error

Environment

  • APISIX version (run apisix version): [3.14.1]
  • APISIX Ingress Controller version : 1.8.0
  • Operating system (run uname -a): Linux ingress-controller-568b769746-j6tkn 6.10.14-linuxkit change: added doc of how to load plugin. apisix#1 SMP Thu Mar 20 16:32:56 UTC 2025 x86_64 GNU/Linux
  • OpenResty / Nginx version (run openresty -V or nginx -V):
  • etcd version, if relevant (run curl http://127.0.0.1:9090/v1/server_info):
  • APISIX Dashboard version, if relevant:
  • Plugin runner version, for issues related to plugin runners:
  • LuaRocks version, for installation issues (run luarocks --version):

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status

    📋 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions