* Remove unused code.
* Use raw strings to avoid escaping.
* Remove unneeded type conversions.
* Preallocate slices where possible.
* Use semantic equality in psbinding reconciler.
* Do not set to unknown status when all dependents passed unhappy check
`accessor.GetConditions()` in `findUnhappyDependent()` gets status
filed from runtime. So, if an object has following status:
```
status:
address:
url: http://hello-example.default.svc.cluster.local
conditions:
- lastTransitionTime: "2020-04-02T09:49:03Z"
status: "True"
type: AllTrafficAssigned
- lastTransitionTime: "2020-04-02T09:49:03Z"
message: autoTLS is not enabled
reason: AutoTLSNotEnabled
severity: Info
status: "True"
type: CertificateProvisioned
- lastTransitionTime: "2020-04-02T09:49:05Z"
status: "True"
type: IngressReady
- lastTransitionTime: "2020-04-02T09:49:05Z"
status: "True"
type: Ready
```
`accessor.GetConditions()` returns AllTrafficAssigned,
CertificateProvisioned, IngressReady (and Ready).
Then, current code (`len(r.dependents) != len(conditions)`) sets to
Unknown if all conditions are not unhappy. However, it does not work
if we added a new dependent and downgraded the cluster because
the number of dependents is less than current status conditions.
If all dependents are verified, it should not set to unknown
status. So, this patch changed it.
* Add unit test
* Add MarkTrueWithReason function to ConditionManager
When using `MarkTrue()` function, it does not allow us to add the reason and message.
Also, if we use `SetCondition()` instead, it does not update the happy condtion.
So, this PR adds new `MarkTrueWithReason(reason, message)` function.
* Make test better
* Add unit test for MarkTrueWithReason
* Rename markHappy with recomputeHappiness
* Realized a corner case on ordering and False > Unknown states.
* add test with unknown fall through.
* I guess some integartions allow nil happy
* add unit tests for GetMessage and GetReason
* all conditons can be nil.
* Search for unhappy dependents.
* update codegen
* Remove KResource from v1alpha1 ducks.
* Implement RemoveCondition for ConditionManager
This implements RemoveCondition to remove a condition that matches
the condition type. Happy condition is changed appropriately if it
is a terminal and satifies one of the following conditions
1. RemovedCondition is false and happy is false
Happy can change from false to unknown or true
2. RemovedCondition is unknown and happy is unknown
Happy can change from unknown to true
* comment edit
* Addresses review comments
* Support only non terminal conditions
* Fix check
The backbone of our Condition system is our "happy" condition and
the semantics governing how other subconditions influence that condition.
When looking towards Conversion, it is possible for the set of conditions
to vary between `v1alpha1` and `v1beta1`, but the "happy" condition should
remain consistent across versions.
The main changes:
1. Provide a `ConvertTo` helper for "converting" between `duckv1beta1.Status`
types in this "lowest common denominator" sense, where we just copy the
happy condition.
2. When `InitializeConditions()` (plural) is called, seed the initial state
of sub-conditions from the initial state of the "happy" condition, if True.
This change enables us to completely change the condition space across
versions, while maintaining the consistency of the happy condition.
A couple peripheral changes:
1. Add `context.Context` to the `apis.Convertible` interface.
2. Drop `InitializeCondition()` (singular) from the `ConditionsManager` interface (I don't see any usage outside of this file).
This moves the common Condition stuff to apis, and creates a v1beta1 form of Status that uses the Condition it defines (changing this in v1alpha1 is too breaking).
There aren't really any meaningful changes in this PR, mostly reorganization. Enumerating what I did:
1. Copied `condition_set*.go` to `apis/`,
1. Copied the `Condition` portions of `conditions_types.go` to `apis/`,
1. Copied the balance of `conditions_types.go` to `apis/duck/v1beta1/status_types.go`,
1. Changed the parts of the above to reference things in the appropriate new places,
1. Removed the reflection-based `ConditionsAccessor` stuff, implementing it instead on `duckv1beta1.Status`.
1. Incorporate: https://github.com/knative/pkg/pull/358