Skip to content

Task always retry when canceled #987

@thedmdim

Description

@thedmdim

Hi everyone!

I need to cancel my task without retry. I call CancelProcessing for this.
CancelProcessing calls task's cancel function. At my handler I do this:

select {
		case <-ctx.Done():
			return asynq.SkipRetry
		case:
				...
}

But this does no effect as far as at processor.go at

select {
			case <-p.abort:
				// time is up, push the message back to queue and quit this worker goroutine.
				p.logger.Warnf("Quitting worker. task id=%s", msg.ID)
				p.requeue(lease, msg)
				return
			case <-lease.Done():
				cancel()
				p.handleFailedMessage(ctx, lease, msg, ErrLeaseExpired)
				return
			case <-ctx.Done():
				p.handleFailedMessage(ctx, lease, msg, ctx.Err())
				return
			case resErr := <-resCh:
				if resErr != nil {
					p.handleFailedMessage(ctx, lease, msg, resErr)
					return
				}
				p.handleSucceededMessage(lease, msg)
}

case <-ctx.Done() read from channel occurs before case resErr := <-resCh

And due to this we have no opportunity to skip retry when publish cancelation, is this right?

Metadata

Metadata

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions