func worker()

in cmd/pinpi/main.go [102:128]


func worker(ctx context.Context, taskChan <-chan task, client obj.Client) {
	defer wg.Done()
	logger := logger.With("worker id", ctx.Value(workerContextKey("workerId")))
	defer logger.Sync()
	defer logger.Infow("worker exiting")

	logger.Info("worker started")
	b := retry.WithMaxRetries(3, retry.NewExponential(1*time.Second))
	for task := range taskChan {
		select {
		case <-ctx.Done():
			return
		default:
		}

		if err := retry.Do(ctx, b, func(ctx context.Context) error {
			if err := process(ctx, &task, logger, client); err != nil {
				return retry.RetryableError(err)
			}
			return nil
		}); err != nil {
			logger.Errorw("process failed", "error", err)
			task.cancel()
		}
	}

}