diff --git a/pkg/kncloudevents/event_dispatcher.go b/pkg/kncloudevents/event_dispatcher.go index 9bd8ef332db..877a2067575 100644 --- a/pkg/kncloudevents/event_dispatcher.go +++ b/pkg/kncloudevents/event_dispatcher.go @@ -26,9 +26,10 @@ import ( "net/http" "time" + "github.com/cloudevents/sdk-go/v2/binding/buffering" + cloudevents "github.com/cloudevents/sdk-go/v2" "github.com/cloudevents/sdk-go/v2/binding" - "github.com/cloudevents/sdk-go/v2/binding/buffering" "github.com/cloudevents/sdk-go/v2/event" cehttp "github.com/cloudevents/sdk-go/v2/protocol/http" "github.com/hashicorp/go-retryablehttp" @@ -249,7 +250,11 @@ func (d *Dispatcher) send(ctx context.Context, message binding.Message, destinat messagesToFinish = append(messagesToFinish, responseMessage) if config.eventTypeAutoHandler != nil { - d.handleAutocreate(ctx, responseMessage, config) + // messages can only be read once, so we need to make a copy of it + responseMessage, err = buffering.CopyMessage(ctx, responseMessage) + if err == nil { + d.handleAutocreate(ctx, responseMessage, config) + } } if config.reply == nil { @@ -356,15 +361,8 @@ func (d *Dispatcher) executeRequest(ctx context.Context, target duckv1.Addressab return ctx, responseMessage, &dispatchInfo, nil } -func (d *Dispatcher) handleAutocreate(ctx context.Context, responseMessage binding.Message, config *senderConfig) { - // messages can only be read once, so we need to make a copy of it - messageCopy, err := buffering.CopyMessage(ctx, responseMessage) - if err != nil { - return - } - defer responseMessage.Finish(nil) - - responseEvent, err := binding.ToEvent(ctx, messageCopy) +func (d *Dispatcher) handleAutocreate(ctx context.Context, msg binding.Message, config *senderConfig) { + responseEvent, err := binding.ToEvent(ctx, msg) if err != nil { return }