shreemaan-abhishek opened a new issue, #2842:
URL: https://github.com/apache/apisix-ingress-controller/issues/2842

   ### Problem
   
   #2814 makes the apiv2 plugin-config paths fail closed: a `config` that does 
not unmarshal into an object now fails translation instead of publishing the 
plugin with an empty config. Several equivalent sites still log the error and 
`continue`, so the plugin silently vanishes and the resource reconciles green.
   
   Still on the log-and-skip path:
   
   | Site | What is dropped |
   |---|---|
   | `internal/adc/translator/consumer.go` | v1alpha1 `Consumer` credential 
config, and `Consumer` plugins |
   | `internal/adc/translator/gateway.go` | `GatewayProxy` `plugins` and 
`pluginMetadata` (gateway-wide blast radius) |
   | `internal/adc/translator/policies.go` | `L4RoutePolicy` plugins 
(`mergeL4PolicyPlugins`) |
   
   The failure mode differs from the one #2814 fixes — these `continue`, so the 
plugin disappears rather than becoming `{}` — but the user-visible outcome is 
the same class: the plugin does not run and nothing reports a problem. Left as 
is, the tree carries two deliberate and opposite conventions for the same 
situation.
   
   ### Expected behavior
   
   Settle on one convention per path. The right treatment is not uniform, 
because it depends on whether the failure is observable:
   
   - **v1alpha1 `Consumer`** — `internal/webhook/v1/adc_validation.go` already 
has a `case *v1alpha1.Consumer`, so the admission webhook runs the real 
translator and a returned error is rejected at apply time. Fail closed here, 
matching apiv2 `ApisixConsumer`.
   - **`GatewayProxy`** — needs a check of whether `gatewayproxy_webhook.go` 
validates through the translator. If not, failing closed would be silent, and 
the failure needs a status condition first.
   - **`L4RoutePolicy`** — no webhook. Same caveat: decide how the failure 
surfaces before changing the behavior.
   
   Whichever way each one lands, the PR should say why, so the convention is 
documented rather than implicit.
   
   ### Notes
   
   `mergeL4PolicyPlugins` also carries an explicit `cfg == nil` normalization 
for a literal `config: null`. That branch is unreachable: for a field typed 
`apiextensionsv1.JSON` with `x-kubernetes-preserve-unknown-fields` and no 
`nullable: true`, the API server prunes the explicit null, so `Config.Raw` 
arrives empty and the `len(Raw) > 0` guard skips the unmarshal entirely. 
Verified with envtest against the generated CRDs, on both `ApisixRoute` and 
`ApisixPluginConfig`. Worth removing while the file is being touched.
   
   ### Context
   
   Raised in review on #2814.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to