Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

HTTPRoute/GRPCRoute status is written before Provider.Update, so translation and sync failures are invisible

Abierto
#453 2 comentarios 1 reacción 0 asignados Ver en GitHub

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
56/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
go, kubernetes
Área
api, backend

Línea de trabajo

Comienza en internal/controller/httproute_controller.go y internal/controller/grpcroute_controller.go, siguiendo las escrituras de estado y las llamadas a Provider.Update en Reconcile. Compara su orden y manejo de errores con apisixglobalrule_controller.go e ingress_controller.go. Se considera terminado cuando los errores de traducción o sincronización de Provider.Update se reflejen en el estado de la ruta en lugar de solo provocar un requeue.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
Problem

HTTPRouteReconciler.Reconcile writes the route status before it programs the data plane:

  1. SetRouteConditionAccepted / SetRouteConditionResolvedRefs populate hr.Status.Parents
  2. r.Updater.Update(...) and UpdateStatus(...) persist that status
  3. then r.Provider.Update(ctx, tctx, routeToUpdate) runs, which is where translation happens
  4. an error from Provider.Update is only returned for requeue

So any failure that originates in translation (or anywhere else inside Provider.Update) never reaches the status. The route reports Accepted=True / ResolvedRefs=True while nothing has been programmed, and the user has no signal that their configuration is not in effect. Retries keep failing silently.

GRPCRouteReconciler.Reconcile has the same ordering.

There is no admission gate to compensate on these paths: httproute_webhook.go only implements collectWarnings (no adcValidator, unlike apisixroute_webhook.go / apisixconsumer_webhook.go), and v1alpha1 PluginConfig has no webhook at all.

For contrast, apisixglobalrule_controller.go and ingress_controller.go both call Provider.Update first and reflect its error in the status condition, which is the behavior we want here.

Expected behavior

Either move the status write after Provider.Update, or fold the Provider.Update error into the conditions before persisting, so a translation or sync failure is visible on the object.

Affected
  • internal/controller/httproute_controller.go
  • internal/controller/grpcroute_controller.go
Context

Surfaced during review on #441. It is pre-existing and independent of that PR, but it is what makes any fail-closed behavior on the Gateway API route paths invisible, so it blocks #452 from being user-observable.

Upstream: apache/apisix-ingress-controller#2840

Lenguaje dominante
Go
Estrellas
5
Forks
5
Merge medio
5 d 16 h
PR fusionados (30 d)
10

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de api7/api7-ingress-controller

Todos los issues de api7/api7-ingress-controller

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.