Description
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
- "Ready"
-
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 exist
-
Alternative consideration
- Readiness could be expressed as a non-condition status field.