func handleError()

in v2/managedsettling.go [148:175]


func handleError(ctx context.Context,
	options *ManagedSettlingOptions,
	settler MessageSettler,
	message *azservicebus.ReceivedMessage,
	handleErr error) {
	if handleErr == nil {
		handleErr = fmt.Errorf("nil error: %w", handleErr)
	}
	logger := getLogger(ctx)
	if !options.RetryDecision.CanRetry(handleErr, message) {
		logger.Error(fmt.Sprintf("moving message to dead letter queue because processing failed to an error: %s", handleErr))
		deadLetterSettlement.settle(ctx, settler, message, &azservicebus.DeadLetterOptions{
			Reason:             to.Ptr("ManagedSettlingHandlerDeadLettering"),
			ErrorDescription:   to.Ptr(handleErr.Error()),
			PropertiesToModify: nil,
		})
		// this could be a special hook to have more control on deadlettering, but keeping it simple for now
		options.OnDeadLettered(ctx, message, handleErr)
		return
	}
	// the delay is implemented as an in-memory sleep before calling abandon.
	// this will continue renewing the lock on the message while we wait for this delay to pass.
	delay := options.RetryDelayStrategy.GetDelay(message.DeliveryCount)
	logger.Error(fmt.Sprintf("delay strategy return delay of %s", delay))
	time.Sleep(delay)
	abandonSettlement.settle(ctx, settler, message, nil)
	options.OnAbandoned(ctx, message, handleErr)
}