pubsub: allow clearing of dead letter policies in subscriptions
Fixes #1822
Change-Id: Icd6346ea1e8cf9fb9dd4ffb03750a7b68811a584
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/53170
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Mahesh Gattani <maheshgattani@google.com>
Reviewed-by: Cody Oss <codyoss@google.com>
diff --git a/pubsub/integration_test.go b/pubsub/integration_test.go
index 2962dfd..68c67b7 100644
--- a/pubsub/integration_test.go
+++ b/pubsub/integration_test.go
@@ -1219,3 +1219,55 @@
t.Fatalf("Streaming pull error: %v\n", err)
}
}
+
+func TestIntegration_DeadLetterPolicy_ClearDeadLetter(t *testing.T) {
+ t.Parallel()
+ ctx := context.Background()
+ client := integrationTestClient(ctx, t)
+ defer client.Close()
+
+ topic, err := client.CreateTopic(ctx, topicIDs.New())
+ if err != nil {
+ t.Fatalf("CreateTopic error: %v", err)
+ }
+ defer topic.Delete(ctx)
+ defer topic.Stop()
+
+ deadLetterTopic, err := client.CreateTopic(ctx, topicIDs.New())
+ if err != nil {
+ t.Fatalf("CreateTopic error: %v", err)
+ }
+ defer deadLetterTopic.Delete(ctx)
+ defer deadLetterTopic.Stop()
+
+ cfg := SubscriptionConfig{
+ Topic: topic,
+ DeadLetterPolicy: &DeadLetterPolicy{
+ DeadLetterTopic: deadLetterTopic.String(),
+ },
+ }
+ var sub *Subscription
+ if sub, err = client.CreateSubscription(ctx, subIDs.New(), cfg); err != nil {
+ t.Fatalf("CreateSub error: %v", err)
+ }
+ defer sub.Delete(ctx)
+
+ sub.Update(ctx, SubscriptionConfigToUpdate{
+ DeadLetterPolicy: &DeadLetterPolicy{},
+ })
+
+ got, err := sub.Config(ctx)
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := SubscriptionConfig{
+ Topic: topic,
+ AckDeadline: 10 * time.Second,
+ RetainAckedMessages: false,
+ RetentionDuration: defaultRetentionDuration,
+ ExpirationPolicy: defaultExpirationPolicy,
+ }
+ if diff := testutil.Diff(got, want); diff != "" {
+ t.Fatalf("SubsciptionConfig; got: - want: +\n%s", diff)
+ }
+}
diff --git a/pubsub/subscription.go b/pubsub/subscription.go
index 2d36577..045ddef 100644
--- a/pubsub/subscription.go
+++ b/pubsub/subscription.go
@@ -320,7 +320,7 @@
}
func (dlp *DeadLetterPolicy) toProto() *pb.DeadLetterPolicy {
- if dlp == nil {
+ if dlp == nil || dlp.DeadLetterTopic == "" {
return nil
}
return &pb.DeadLetterPolicy{
@@ -472,7 +472,8 @@
// If non-zero, Expiration is changed.
ExpirationPolicy optional.Duration
- // If non-nil, DeadLetterPolicy is changed.
+ // If non-nil, DeadLetterPolicy is changed. To remove dead lettering from
+ // a subscription, use the zero value for this struct.
//
// It is EXPERIMENTAL and a part of a closed alpha that may not be
// accessible to all users.