Skip to content
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

feat: bump gwapi to v0.6.0 #853

Closed
wants to merge 2 commits into from

Conversation

Xunzhuo
Copy link
Member

@Xunzhuo Xunzhuo commented Jan 4, 2023

Fixes: #839
Fixes: #716

Closes: #828

Signed-off-by: bitliu bitliu@tencent.com

@Xunzhuo Xunzhuo requested a review from a team as a code owner January 4, 2023 07:11
@codecov-commenter
Copy link

codecov-commenter commented Jan 4, 2023

Codecov Report

Merging #853 (f6a179e) into main (309566d) will decrease coverage by 0.05%.
The diff coverage is 28.57%.

@@            Coverage Diff             @@
##             main     #853      +/-   ##
==========================================
- Coverage   64.06%   64.00%   -0.06%     
==========================================
  Files          50       51       +1     
  Lines        6486     6873     +387     
==========================================
+ Hits         4155     4399     +244     
- Misses       2075     2200     +125     
- Partials      256      274      +18     
Impacted Files Coverage Δ
internal/gatewayapi/contexts.go 77.41% <0.00%> (-0.84%) ⬇️
internal/status/status.go 0.00% <0.00%> (ø)
internal/provider/kubernetes/controller.go 46.98% <33.33%> (-0.84%) ⬇️
internal/status/conditions.go 96.00% <100.00%> (ø)
internal/xds/translator/translator.go 74.59% <0.00%> (-7.53%) ⬇️
internal/provider/kubernetes/routes.go 26.63% <0.00%> (-3.07%) ⬇️
internal/gatewayapi/runner/runner.go 29.88% <0.00%> (-1.45%) ⬇️
internal/gatewayapi/validate.go 90.86% <0.00%> (-1.30%) ⬇️
... and 13 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@Xunzhuo Xunzhuo self-assigned this Jan 4, 2023
@Xunzhuo Xunzhuo added area/api API-related issues area/conformance Gateway API Conformance Related Issues labels Jan 4, 2023
@Xunzhuo Xunzhuo added this to the 0.3.0-rc.1 milestone Jan 4, 2023
@arkodg
Copy link
Contributor

arkodg commented Jan 4, 2023

looks like the core issue is interpretation of mapping of Observed Generation to Status Conditions
The new GAPI tests assert that the new Observed Generation value be asserted on all Status Conditions (kubernetes-sigs/gateway-api#1586) but Envoy Gateway does not update the status conditions for all older conditions if the core fields (such as Status, Reason and Message) have not changed

func conditionChanged(a, b metav1.Condition) bool {
and
// return early if the condition is unchanged
. Imho the latter approach seems more logical. Is there any spec governing this mapping @youngnick @skriss

@sunjayBhatia
Copy link
Member

sunjayBhatia commented Jan 4, 2023

looks like the core issue is interpretation of mapping of Observed Generation to Status Conditions The new GAPI tests assert that the new Observed Generation value be asserted on all Status Conditions (kubernetes-sigs/gateway-api#1586) but Envoy Gateway does not update the status conditions for all older conditions if the core fields (such as Status, Reason and Message) have not changed

func conditionChanged(a, b metav1.Condition) bool {

and

// return early if the condition is unchanged

. Imho the latter approach seems more logical. Is there any spec governing this mapping @youngnick @skriss

from the Condition spec: https://github.com/kubernetes/apimachinery/blob/6c409361e35e40e38c4056ba0b86647d4244c047/pkg/apis/meta/v1/types.go#L1480-L1485

even if the type/reason/status haven't changed, the observed generation should be updated to make clear the status condition applies to the latest version of the resource

@arkodg
Copy link
Contributor

arkodg commented Jan 4, 2023

thanks for sharing that @sunjayBhatia ! , the spec makes it clear that the condition is considered out of date if the observed generation is older
hey @Xunzhuo if you can enhance these snippets (

func conditionChanged(a, b metav1.Condition) bool {
and
// return early if the condition is unchanged
) with an extra check to consider a condition unchanged or changed if the observed generation is also unchanged or changed respectively, should fix the issue, thanks !

Signed-off-by: bitliu <bitliu@tencent.com>
@Xunzhuo
Copy link
Member Author

Xunzhuo commented Jan 6, 2023

thanks for sharing that @sunjayBhatia ! , the spec makes it clear that the condition is considered out of date if the observed generation is older hey @Xunzhuo if you can enhance these snippets (

func conditionChanged(a, b metav1.Condition) bool {

and

// return early if the condition is unchanged

) with an extra check to consider a condition unchanged or changed if the observed generation is also unchanged or changed respectively, should fix the issue, thanks !

Done.

@@ -495,6 +495,14 @@ func (r *gatewayAPIReconciler) statusUpdateForGateway(gtw *gwapiv1b1.Gateway, sv
}
gCopy := g.DeepCopy()
gCopy.Status.Conditions = status.MergeConditions(gCopy.Status.Conditions, gtw.Status.Conditions...)
for index := range gCopy.Status.Conditions {
gCopy.Status.Conditions[index].ObservedGeneration = gtw.Generation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this loop needs to be removed, this should happen automatically

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After removing them, CI fails : (

@@ -894,6 +902,15 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context) {
}
gCopy := g.DeepCopy()
gCopy.Status.Listeners = val.Status.Listeners

for index := range gCopy.Status.Conditions {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this loop needs to be removed as well

@@ -922,6 +939,12 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context) {
}
hCopy := h.DeepCopy()
hCopy.Status.Parents = val.Status.Parents

for parentIndex, parent := range hCopy.Status.Parents {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as above

@arkodg
Copy link
Contributor

arkodg commented Jan 6, 2023

@Xunzhuo you will also need to edit this code to

func conditionChanged(a, b metav1.Condition) bool {
	return a.Status != b.Status || a.Reason != b.Reason || a.Message != b.Message || a.ObservedGeneration != b.ObservedGeneration
}

@arkodg
Copy link
Contributor

arkodg commented Jan 6, 2023

@Xunzhuo you will also need to rm ObservedGeneration from here

opts := cmpopts.IgnoreFields(metav1.Condition{}, "LastTransitionTime", "ObservedGeneration")
since it is now a comparable field

Signed-off-by: bitliu <bitliu@tencent.com>
@arkodg
Copy link
Contributor

arkodg commented Jan 9, 2023

hey @Xunzhuo looks like there was an issue where the gateway API status updater code path would try and update Status.Listeners without updating the ObservedGeneraton with Status.Conditions causing the test to fail. Ive updated the logic here #874

@Xunzhuo Xunzhuo closed this Jan 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/api API-related issues area/conformance Gateway API Conformance Related Issues
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bump Kube Provider Test Data Manifests to v0.6.0 Update to the v0.6.0 Gateway API release
4 participants