-
Notifications
You must be signed in to change notification settings - Fork 472
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Indicate a new Route "Readiness" condition #1156
Comments
Conditions are quad-state, generally simplified to tri-state (imma gonna make Tim cry here):
I'd suggest that the "Unsupported" reason should explicitly map to |
Adding related discussions here for convenience: |
I think there's some nuance here. I think there will be a set of features that implementations are aware of but can't or don't support. In those cases, I think |
As far as naming, there's been some earlier discussion that a "Ready" condition may be too precise for an eventually consistent world. It may be more realistic to use a term like "Programmed" to indicate that the dataplane has been programmed but that it may take some period of time for those changes to propagate. |
I think As a programmatic user of the Gateway API, I'm hoping that the Conditions provide a summary of logic that's either complicated to extract from the |
That makes sense. I'd actually been assuming something else - a Gateway would not accept a Route that included configuration that was recognized but unsupported. As I'm thinking about that more, it seems like this specific reason may actually make more sense if tied to a different condition such as "Accepted".
💯 completely agree |
I explored a specific case of this a bit in #1146, and was leaning towards RouteConditionType I'd agree with @evankanderson's suggestion that an implementation unable to provide RouteConditionType
I'd think the latter suggestion of re-validating only when the route config (and possibly related config like any Gateway listener to which the route is attached) changes could make sense for initial implementation, with specific interval/timeout being an internal implementation detail rather than user-facing (maybe consider exposing this later if sufficient end-user need is demonstrated). 👍 to RouteConditionReason
It's a bit under-specified how multiple errors for a single condition should be handled currently (is there any convention in other projects for setting the same condition type multiple times with different reasons? this might deserve a separate issue). I think though that I'd lean more towards a self-contained reason, something like Thanks for starting to scope this out @carlisia, definitely feels on the right track! |
I think the most likely case for an implementation setting "Ready" to "Unknown" is that it's sent off the config, but can't guarantee that the Ready criteria are met. Then it can set "Ready" to "Unknown" to signal that things watching the Route should perform their own checking of exactly when it's Ready (if that matters to them like it does to Knative).
I feel like there should definitely be a check when the spec changes, but Ready is a Condition that's kind of expected to fluctuate without those changes (since it can be affected by having no endpoints etc).
In the past, I've kind of assumed that either the error behavior should short-circuit and only have one error, or they would be concatenated somehow. I think that if this becomes common, that's a sign that we should break those Conditions apart into more specific ones. |
We had a similar discussion about a potential "Reconciled" condition previously, adding a reference here in case any of that context is helpful in this discussion: #642 |
Doing this as part of #1364. /assign |
I think that we can count this work done under #1454, closing this one out. /close |
@youngnick: Closing this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
Goals
indicate if all configuration needed to perform Route related operations has been fully propagated through the entire data plane.
otherwise, indicate if the configuration had a point of failure, or if it is still converging towards being "ready"
indicate the semantics for what a correct implementation of what it means for Routes to be "ready" for configuration updates as well
Constraint
Some implementations will never be able to provide this status. For this reason, this should be considered as "extended support".
Description
For implementations that are able to provide this status, doing so according to a uniform spec would greatly unburden Gateway API consumers from:
having to figure out how to implement their own readiness check
implementing readiness checks that don't conform uniformly to what it means to be "ready"
not having means to easily decide when it should continue to retry connecting or halt trying for not having a way to identify if failures and time-outs originate from an application level or from the Gateway controller being not yet "ready"
Suggestions
Name:
RouteConditionType = "Ready"
Possible
RouteConditionReason
options:True
False
"Unsupported" (indicates it is not implemented intentionally)
"InProgress" or "Pending" (still attempting to converge into a "readiness" state
"Failed" (some step in the "readiness" check failed)
"TBD" (see below; if it wasn't the readiness check that failed, but another condition that was a pre-requisite for a "Ready:True"
Considerations
Once a Route is in a "Ready:False", Reason: Failed state, what should trigger a retry? Arbitrarily looping over the readiness check logic, maybe at user configurable intervals? Or should that only be triggered once there is a new change in the configuration?
In face of other condition types for Routes, existing as well as others yet to be added, ex "Accepted", "Programmed", etc, how should the condition reason for the "Ready:False" be indicated? Examples:
one of the Route conditions becomes "False" => The
RouteConditionReason
could be the same as the condition for thatRouteConditionType
multiple
RouteConditionType
become "False" => TheRouteConditionReason
could be the same as the condition for theRouteConditionType
that is closer to the "Ready" type IF there is a natural order/sequence of operations. Otherwise, if multiple reasons existAlternative consideration
The text was updated successfully, but these errors were encountered: