From 1790835eeaed8d0f0bb0459f7a24f3ded2218359 Mon Sep 17 00:00:00 2001 From: Pierangelo Di Pilato Date: Mon, 15 Nov 2021 11:13:34 +0100 Subject: [PATCH 1/2] Set DLS namespace to object namespace Signed-off-by: Pierangelo Di Pilato --- pkg/reconciler/broker/trigger/trigger.go | 21 ++-- pkg/reconciler/broker/trigger/trigger_test.go | 101 +++++++++++++++--- 2 files changed, 99 insertions(+), 23 deletions(-) diff --git a/pkg/reconciler/broker/trigger/trigger.go b/pkg/reconciler/broker/trigger/trigger.go index 27cb110e246..af45062d1db 100644 --- a/pkg/reconciler/broker/trigger/trigger.go +++ b/pkg/reconciler/broker/trigger/trigger.go @@ -29,6 +29,15 @@ import ( "k8s.io/client-go/dynamic" corev1listers "k8s.io/client-go/listers/core/v1" + "knative.dev/pkg/apis" + duckv1 "knative.dev/pkg/apis/duck/v1" + "knative.dev/pkg/controller" + "knative.dev/pkg/logging" + "knative.dev/pkg/network" + pkgreconciler "knative.dev/pkg/reconciler" + "knative.dev/pkg/resolver" + "knative.dev/pkg/system" + eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" "knative.dev/eventing/pkg/apis/eventing" eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1" @@ -39,14 +48,6 @@ import ( "knative.dev/eventing/pkg/duck" "knative.dev/eventing/pkg/reconciler/broker/resources" "knative.dev/eventing/pkg/reconciler/sugar/trigger/path" - "knative.dev/pkg/apis" - duckv1 "knative.dev/pkg/apis/duck/v1" - "knative.dev/pkg/controller" - "knative.dev/pkg/logging" - "knative.dev/pkg/network" - pkgreconciler "knative.dev/pkg/reconciler" - "knative.dev/pkg/resolver" - "knative.dev/pkg/system" ) var brokerGVK = eventingv1.SchemeGroupVersion.WithKind("Broker") @@ -155,6 +156,10 @@ func (r *Reconciler) resolveDeadLetterSink(ctx context.Context, b *eventingv1.Br // resolve the trigger's dlq first, fall back to the broker's for _, delivery := range []*eventingduckv1.DeliverySpec{t.Spec.Delivery, b.Spec.Delivery} { if delivery != nil && delivery.DeadLetterSink != nil { + if delivery.DeadLetterSink.Ref != nil && delivery.DeadLetterSink.Ref.Namespace == "" { + delivery = delivery.DeepCopy() // Do not mutate informer copy. + delivery.DeadLetterSink.Ref.Namespace = t.GetNamespace() + } dlqURI, err := r.uriResolver.URIFromDestinationV1(ctx, *delivery.DeadLetterSink, b) if err != nil { logging.FromContext(ctx).Errorw("Unable to get the dead letter sink's URI", zap.Error(err)) diff --git a/pkg/reconciler/broker/trigger/trigger_test.go b/pkg/reconciler/broker/trigger/trigger_test.go index 5d3cbbc15bd..4f6bc1c9a2d 100644 --- a/pkg/reconciler/broker/trigger/trigger_test.go +++ b/pkg/reconciler/broker/trigger/trigger_test.go @@ -28,17 +28,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" clientgotesting "k8s.io/client-go/testing" - eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" - v1 "knative.dev/eventing/pkg/apis/duck/v1" - "knative.dev/eventing/pkg/apis/eventing" - eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1" - messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1" - "knative.dev/eventing/pkg/apis/sources/v1beta2" - fakeeventingclient "knative.dev/eventing/pkg/client/injection/client/fake" - "knative.dev/eventing/pkg/client/injection/ducks/duck/v1/channelable" - "knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/trigger" - "knative.dev/eventing/pkg/duck" - "knative.dev/eventing/pkg/reconciler/broker/resources" "knative.dev/pkg/apis" duckv1 "knative.dev/pkg/apis/duck/v1" v1addr "knative.dev/pkg/client/injection/ducks/duck/v1/addressable" @@ -53,11 +42,24 @@ import ( "knative.dev/pkg/ptr" "knative.dev/pkg/resolver" + eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" + v1 "knative.dev/eventing/pkg/apis/duck/v1" + "knative.dev/eventing/pkg/apis/eventing" + eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1" + messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1" + "knative.dev/eventing/pkg/apis/sources/v1beta2" + fakeeventingclient "knative.dev/eventing/pkg/client/injection/client/fake" + "knative.dev/eventing/pkg/client/injection/ducks/duck/v1/channelable" + "knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/trigger" + "knative.dev/eventing/pkg/duck" + "knative.dev/eventing/pkg/reconciler/broker/resources" + + _ "knative.dev/pkg/client/injection/ducks/duck/v1/addressable/fake" + . "knative.dev/pkg/reconciler/testing" + _ "knative.dev/eventing/pkg/client/injection/informers/eventing/v1/trigger/fake" . "knative.dev/eventing/pkg/reconciler/testing/v1" rtv1beta2 "knative.dev/eventing/pkg/reconciler/testing/v1beta2" - _ "knative.dev/pkg/client/injection/ducks/duck/v1/addressable/fake" - . "knative.dev/pkg/reconciler/testing" ) const ( @@ -306,6 +308,71 @@ func TestReconcile(t *testing.T) { WithTriggerStatusDeadLetterSinkURI("http://example.com"), WithTriggerDeadLetterSinkResolvedSucceeded()), }}, + }, { + Name: "Trigger with Broker DLQ", + Key: testKey, + Objects: []runtime.Object{ + NewBroker(brokerName, testNS, + WithBrokerClass(eventing.MTChannelBrokerClassValue), + WithBrokerConfig(config()), + WithInitBrokerConditions, + WithBrokerReady, + WithBrokerResourceVersion(""), + WithBrokerAddressURI(brokerAddress), + WithChannelAddressAnnotation(triggerChannelURL), + WithChannelAPIVersionAnnotation(triggerChannelAPIVersion), + WithChannelKindAnnotation(triggerChannelKind), + WithChannelNameAnnotation(triggerChannelName), + WithDeadLeaderSink(&duckv1.KReference{ + Kind: "Broker", + Name: brokerName, + APIVersion: "eventing.knative.dev/v1", + }, ""), + ), + createChannel(testNS, true), + imcConfigMap(), + NewEndpoints(filterServiceName, systemNS, + WithEndpointsLabels(FilterLabels()), + WithEndpointsAddresses(corev1.EndpointAddress{IP: "127.0.0.1"})), + NewEndpoints(ingressServiceName, systemNS, + WithEndpointsLabels(IngressLabels()), + WithEndpointsAddresses(corev1.EndpointAddress{IP: "127.0.0.1"})), + makeSubscriberAddressableAsUnstructured(testNS), + NewTrigger(triggerName, testNS, brokerName, + WithTriggerUID(triggerUID), + WithTriggerSubscriberRefAndURIReference(subscriberGVK, subscriberName, testNS, subscriberURIReference), + WithInitTriggerConditions, + ), + }, + WantErr: false, + WantStatusUpdates: []clientgotesting.UpdateActionImpl{{ + Object: NewTrigger(triggerName, testNS, brokerName, + WithTriggerUID(triggerUID), + WithTriggerSubscriberRefAndURIReference(subscriberGVK, subscriberName, testNS, subscriberURIReference), + // The first reconciliation will initialize the status conditions. + WithInitTriggerConditions, + WithTriggerBrokerReady(), + WithTriggerSubscriptionNotConfigured(), + WithTriggerStatusSubscriberURI(subscriberResolvedTargetURI), + WithTriggerSubscriberResolvedSucceeded(), + WithTriggerDependencyReady(), + WithTriggerStatusDeadLetterSinkURI("http://broker-ingress.knative-testing.svc.cluster.local/test-namespace/test-broker"), + WithTriggerDeadLetterSinkResolvedSucceeded(), + ), + }}, + WantCreates: []runtime.Object{ + makeFilterSubscription(testNS, func(subscription *messagingv1.Subscription) { + subscription.Spec.Delivery = &eventingduckv1.DeliverySpec{ + DeadLetterSink: &duckv1.Destination{ + Ref: &duckv1.KReference{ + Kind: "Broker", + Name: brokerName, + APIVersion: "eventing.knative.dev/v1", + }, + }, + } + }), + }, }, { Name: "Subscription Create fails", Key: testKey, @@ -1054,8 +1121,12 @@ func makeServiceURI() *apis.URL { Path: fmt.Sprintf("/triggers/%s/%s/%s", testNS, triggerName, triggerUID), } } -func makeFilterSubscription(subscriberNamespace string) *messagingv1.Subscription { - return resources.NewSubscription(makeTrigger(subscriberNamespace), createTriggerChannelRef(), makeBrokerRef(), makeServiceURI(), makeEmptyDelivery()) +func makeFilterSubscription(subscriberNamespace string, opts ...func(subscription *messagingv1.Subscription)) *messagingv1.Subscription { + s := resources.NewSubscription(makeTrigger(subscriberNamespace), createTriggerChannelRef(), makeBrokerRef(), makeServiceURI(), makeEmptyDelivery()) + for _, opt := range opts { + opt(s) + } + return s } func makeTrigger(subscriberNamespace string) *eventingv1.Trigger { From bef1ca3af45ca6face03de838a0a87e4cc53dacd Mon Sep 17 00:00:00 2001 From: Pierangelo Di Pilato Date: Mon, 15 Nov 2021 11:38:26 +0100 Subject: [PATCH 2/2] Run hack/update-codegen.sh Signed-off-by: Pierangelo Di Pilato --- pkg/apis/config/zz_generated.deepcopy.go | 1 + pkg/apis/duck/v1/zz_generated.deepcopy.go | 1 + pkg/apis/duck/v1beta1/zz_generated.deepcopy.go | 1 + pkg/apis/eventing/v1/zz_generated.deepcopy.go | 1 + pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go | 1 + pkg/apis/flows/v1/zz_generated.deepcopy.go | 1 + pkg/apis/messaging/config/zz_generated.deepcopy.go | 1 + pkg/apis/messaging/v1/zz_generated.deepcopy.go | 1 + pkg/apis/sources/v1/zz_generated.deepcopy.go | 1 + pkg/apis/sources/v1beta2/zz_generated.deepcopy.go | 1 + 10 files changed, 10 insertions(+) diff --git a/pkg/apis/config/zz_generated.deepcopy.go b/pkg/apis/config/zz_generated.deepcopy.go index 4fd7c636f75..cc31958e733 100644 --- a/pkg/apis/config/zz_generated.deepcopy.go +++ b/pkg/apis/config/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/duck/v1/zz_generated.deepcopy.go b/pkg/apis/duck/v1/zz_generated.deepcopy.go index 0501d0e6045..c96550411a8 100644 --- a/pkg/apis/duck/v1/zz_generated.deepcopy.go +++ b/pkg/apis/duck/v1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/duck/v1beta1/zz_generated.deepcopy.go b/pkg/apis/duck/v1beta1/zz_generated.deepcopy.go index 175fbad9895..7a0e6e05ea7 100644 --- a/pkg/apis/duck/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/duck/v1beta1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/eventing/v1/zz_generated.deepcopy.go b/pkg/apis/eventing/v1/zz_generated.deepcopy.go index 7be79a4ee5c..3fe406e0625 100644 --- a/pkg/apis/eventing/v1/zz_generated.deepcopy.go +++ b/pkg/apis/eventing/v1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go b/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go index f50a3b144f0..e24968fcba3 100644 --- a/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/flows/v1/zz_generated.deepcopy.go b/pkg/apis/flows/v1/zz_generated.deepcopy.go index 2e550d0612f..ecc46585927 100644 --- a/pkg/apis/flows/v1/zz_generated.deepcopy.go +++ b/pkg/apis/flows/v1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/messaging/config/zz_generated.deepcopy.go b/pkg/apis/messaging/config/zz_generated.deepcopy.go index 50ae7673f56..4f9f9c0992f 100644 --- a/pkg/apis/messaging/config/zz_generated.deepcopy.go +++ b/pkg/apis/messaging/config/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/messaging/v1/zz_generated.deepcopy.go b/pkg/apis/messaging/v1/zz_generated.deepcopy.go index 752f11d6e10..bc0dc043c99 100644 --- a/pkg/apis/messaging/v1/zz_generated.deepcopy.go +++ b/pkg/apis/messaging/v1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/sources/v1/zz_generated.deepcopy.go b/pkg/apis/sources/v1/zz_generated.deepcopy.go index 62c83377820..3d8878ca514 100644 --- a/pkg/apis/sources/v1/zz_generated.deepcopy.go +++ b/pkg/apis/sources/v1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/apis/sources/v1beta2/zz_generated.deepcopy.go b/pkg/apis/sources/v1beta2/zz_generated.deepcopy.go index 5326d83b373..86b4e093aa2 100644 --- a/pkg/apis/sources/v1beta2/zz_generated.deepcopy.go +++ b/pkg/apis/sources/v1beta2/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /*