Skip to content

Commit b0c54eb

Browse files
committed
Upgrade go-redis
1 parent ea8db48 commit b0c54eb

File tree

15 files changed

+315
-196
lines changed

15 files changed

+315
-196
lines changed

azsqs/queue.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package azsqs
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"strconv"
@@ -193,7 +194,9 @@ func (q *Queue) getQueueURL() (string, error) {
193194
return *out.QueueUrl, nil
194195
}
195196

196-
func (q *Queue) ReserveN(n int, waitTimeout time.Duration) ([]taskq.Message, error) {
197+
func (q *Queue) ReserveN(
198+
ctx context.Context, n int, waitTimeout time.Duration,
199+
) ([]taskq.Message, error) {
197200
if n > 10 {
198201
n = 10
199202
}
@@ -511,7 +514,7 @@ func (q *Queue) isDuplicate(msg *taskq.Message) bool {
511514
if msg.Name == "" {
512515
return false
513516
}
514-
return q.opt.Storage.Exists(msgutil.FullMessageName(q, msg))
517+
return q.opt.Storage.Exists(msg.Ctx, msgutil.FullMessageName(q, msg))
515518
}
516519

517520
func findMessageByID(msgs []*taskq.Message, id string) *taskq.Message {

consumer.go

+31-27
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"sync/atomic"
99
"time"
1010

11-
"github.com/go-redis/redis_rate/v8"
11+
"github.com/go-redis/redis_rate/v9"
1212

1313
"github.com/vmihailenco/taskq/v3/internal"
1414
"github.com/vmihailenco/taskq/v3/internal/redislock"
@@ -140,7 +140,7 @@ func (c *Consumer) Stats() *ConsumerStats {
140140
}
141141

142142
func (c *Consumer) Add(msg *Message) error {
143-
_ = c.limiter.Reserve(1)
143+
_ = c.limiter.Reserve(msg.Ctx, 1)
144144
c.buffer <- msg
145145
return nil
146146
}
@@ -283,24 +283,24 @@ func (c *Consumer) removeWorker(id int32) bool { //nolint:unused
283283
return atomic.CompareAndSwapInt32(&c.numWorker, id+1, id)
284284
}
285285

286-
func (c *Consumer) addFetcher(id int32) bool {
286+
func (c *Consumer) addFetcher(ctx context.Context, id int32) bool {
287287
c.startStopMu.Lock()
288288
defer c.startStopMu.Unlock()
289289

290290
if atomic.CompareAndSwapInt32(&c.numFetcher, id, id+1) {
291291
c.fetchersWG.Add(1)
292292
go func() {
293293
defer c.fetchersWG.Done()
294-
c.fetcher(id)
294+
c.fetcher(ctx, id)
295295
}()
296296
return true
297297
}
298298
return false
299299
}
300300

301-
func (c *Consumer) ensureFetcher() {
301+
func (c *Consumer) ensureFetcher(ctx context.Context) {
302302
if atomic.LoadInt32(&c.numFetcher) == 0 {
303-
c.addFetcher(0)
303+
c.addFetcher(ctx, 0)
304304
}
305305
}
306306

@@ -339,7 +339,7 @@ func (c *Consumer) ProcessAll(ctx context.Context) error {
339339

340340
// ProcessOne processes at most one message in the queue.
341341
func (c *Consumer) ProcessOne(ctx context.Context) error {
342-
msg, err := c.reserveOne()
342+
msg, err := c.reserveOne(ctx)
343343
if err != nil {
344344
return err
345345
}
@@ -349,14 +349,14 @@ func (c *Consumer) ProcessOne(ctx context.Context) error {
349349
return c.Process(msg)
350350
}
351351

352-
func (c *Consumer) reserveOne() (*Message, error) {
352+
func (c *Consumer) reserveOne(ctx context.Context) (*Message, error) {
353353
select {
354354
case msg := <-c.buffer:
355355
return msg, nil
356356
default:
357357
}
358358

359-
msgs, err := c.q.ReserveN(1, c.opt.WaitTimeout)
359+
msgs, err := c.q.ReserveN(ctx, 1, c.opt.WaitTimeout)
360360
if err != nil && err != internal.ErrNotSupported {
361361
return nil, err
362362
}
@@ -371,7 +371,7 @@ func (c *Consumer) reserveOne() (*Message, error) {
371371
return &msgs[0], nil
372372
}
373373

374-
func (c *Consumer) fetcher(fetcherID int32) {
374+
func (c *Consumer) fetcher(ctx context.Context, fetcherID int32) {
375375
timer := time.NewTimer(time.Minute)
376376
timer.Stop()
377377

@@ -390,7 +390,7 @@ func (c *Consumer) fetcher(fetcherID int32) {
390390
continue
391391
}
392392

393-
timeout, err := c.fetchMessages(timer, fetchTimeout)
393+
timeout, err := c.fetchMessages(ctx, timer, fetchTimeout)
394394
if err != nil {
395395
if err == internal.ErrNotSupported {
396396
atomic.StoreInt32(&c.numFetcher, -1)
@@ -411,11 +411,11 @@ func (c *Consumer) fetcher(fetcherID int32) {
411411
}
412412

413413
func (c *Consumer) fetchMessages(
414-
timer *time.Timer, timeout time.Duration,
414+
ctx context.Context, timer *time.Timer, timeout time.Duration,
415415
) (bool, error) {
416-
size := c.limiter.Reserve(c.opt.ReservationSize)
416+
size := c.limiter.Reserve(ctx, c.opt.ReservationSize)
417417

418-
msgs, err := c.q.ReserveN(size, c.opt.WaitTimeout)
418+
msgs, err := c.q.ReserveN(ctx, size, c.opt.WaitTimeout)
419419
if err != nil {
420420
return false, err
421421
}
@@ -452,7 +452,7 @@ func (c *Consumer) worker(ctx context.Context, workerID int32) {
452452
var lock *redislock.Lock
453453
defer func() {
454454
if lock != nil {
455-
_ = lock.Release()
455+
_ = lock.Release(ctx)
456456
}
457457
}()
458458

@@ -464,10 +464,10 @@ func (c *Consumer) worker(ctx context.Context, workerID int32) {
464464
return
465465
}
466466
if c.opt.WorkerLimit > 0 {
467-
lock = c.lockWorker(lock, workerID)
467+
lock = c.lockWorker(ctx, lock, workerID)
468468
}
469469

470-
msg := c.waitMessage(timer)
470+
msg := c.waitMessage(ctx, timer)
471471
if msg == nil {
472472
if atomic.LoadInt32(&c.state) >= stateStoppingWorkers {
473473
return
@@ -480,7 +480,7 @@ func (c *Consumer) worker(ctx context.Context, workerID int32) {
480480
}
481481
}
482482

483-
func (c *Consumer) waitMessage(timer *time.Timer) *Message {
483+
func (c *Consumer) waitMessage(ctx context.Context, timer *time.Timer) *Message {
484484
const workerIdleTimeout = time.Second
485485

486486
select {
@@ -489,7 +489,7 @@ func (c *Consumer) waitMessage(timer *time.Timer) *Message {
489489
default:
490490
}
491491

492-
c.ensureFetcher()
492+
c.ensureFetcher(ctx)
493493

494494
timer.Reset(workerIdleTimeout)
495495
select {
@@ -698,7 +698,11 @@ func (c *Consumer) resetPause() {
698698
atomic.StoreUint32(&c.consecutiveNumErr, 0)
699699
}
700700

701-
func (c *Consumer) lockWorker(lock *redislock.Lock, workerID int32) *redislock.Lock {
701+
func (c *Consumer) lockWorker(
702+
ctx context.Context,
703+
lock *redislock.Lock,
704+
workerID int32,
705+
) *redislock.Lock {
702706
lockTimeout := c.opt.ReservationTimeout + 10*time.Second
703707

704708
timer := time.NewTimer(time.Minute)
@@ -708,9 +712,9 @@ func (c *Consumer) lockWorker(lock *redislock.Lock, workerID int32) *redislock.L
708712
var err error
709713
if lock == nil {
710714
key := fmt.Sprintf("%s:worker:lock:%d", c.q.Name(), workerID)
711-
lock, err = redislock.Obtain(c.opt.Redis, key, lockTimeout, nil)
715+
lock, err = redislock.Obtain(ctx, c.opt.Redis, key, lockTimeout, nil)
712716
} else {
713-
err = lock.Refresh(lockTimeout, nil)
717+
err = lock.Refresh(ctx, lockTimeout, nil)
714718
}
715719
if err == nil {
716720
return lock
@@ -720,7 +724,7 @@ func (c *Consumer) lockWorker(lock *redislock.Lock, workerID int32) *redislock.L
720724
internal.Logger.Printf("redislock.Lock failed: %s", err)
721725
}
722726
if lock != nil {
723-
_ = lock.Release()
727+
_ = lock.Release(ctx)
724728
lock = nil
725729
}
726730

@@ -729,7 +733,7 @@ func (c *Consumer) lockWorker(lock *redislock.Lock, workerID int32) *redislock.L
729733
case <-timer.C:
730734
case <-c.stopCh:
731735
if lock != nil {
732-
_ = lock.Release()
736+
_ = lock.Release(ctx)
733737
}
734738
return nil
735739
}
@@ -839,7 +843,7 @@ func (c *Consumer) replaceConfig(ctx context.Context, cfg *consumerConfig) {
839843
atomic.StoreInt32(&c.numFetcher, cfg.NumFetcher)
840844
} else {
841845
for id := numFetcher; id < cfg.NumFetcher; id++ {
842-
if !c.addFetcher(id) {
846+
if !c.addFetcher(ctx, id) {
843847
internal.Logger.Printf("taskq: addFetcher id=%d failed", id)
844848
}
845849
}
@@ -874,7 +878,7 @@ type limiter struct {
874878
cancelled uint32 // atomic
875879
}
876880

877-
func (l *limiter) Reserve(max int) int {
881+
func (l *limiter) Reserve(ctx context.Context, max int) int {
878882
if l.limiter == nil || l.limit == nil {
879883
return max
880884
}
@@ -899,7 +903,7 @@ func (l *limiter) Reserve(max int) int {
899903

900904
var size int
901905
for {
902-
res, err := l.limiter.Allow(l.bucket, l.limit)
906+
res, err := l.limiter.Allow(ctx, l.bucket, l.limit)
903907
if err != nil {
904908
//TODO: ??
905909
time.Sleep(100 * time.Millisecond)

consumer_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"testing"
1414
"time"
1515

16-
"github.com/go-redis/redis/v7"
17-
"github.com/go-redis/redis_rate/v8"
16+
"github.com/go-redis/redis/v8"
17+
"github.com/go-redis/redis_rate/v9"
1818

1919
"github.com/vmihailenco/taskq/v3"
2020
)
@@ -39,7 +39,7 @@ func redisRing() *redis.Ring {
3939
Addrs: map[string]string{"0": ":6379"},
4040
})
4141
})
42-
_ = ring.FlushDB().Err()
42+
_ = ring.FlushDB(context.TODO()).Err()
4343
return ring
4444
}
4545

example_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
"math"
88
"time"
99

10-
"github.com/go-redis/redis_rate/v8"
10+
"github.com/go-redis/redis_rate/v9"
11+
1112
"github.com/vmihailenco/taskq/v3"
1213
"github.com/vmihailenco/taskq/v3/memqueue"
1314
)

examples/api_worker/tasks.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"syscall"
99
"time"
1010

11-
"github.com/go-redis/redis/v7"
11+
"github.com/go-redis/redis/v8"
1212

1313
"github.com/vmihailenco/taskq/v3"
1414
"github.com/vmihailenco/taskq/v3/redisq"

examples/sqs_api_worker/tasks.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
"github.com/aws/aws-sdk-go/aws/session"
1212
"github.com/aws/aws-sdk-go/service/sqs"
13-
"github.com/go-redis/redis/v7"
13+
"github.com/go-redis/redis/v8"
1414

1515
"github.com/vmihailenco/taskq/v3"
1616
"github.com/vmihailenco/taskq/v3/azsqs"

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ require (
66
github.com/aws/aws-sdk-go v1.28.0
77
github.com/capnm/sysinfo v0.0.0-20130621111458-5909a53897f3
88
github.com/dgryski/go-farm v0.0.0-20191112170834-c2139c5d712b
9-
github.com/go-redis/redis/v7 v7.0.0-beta.5
10-
github.com/go-redis/redis_rate/v8 v8.0.0
9+
github.com/go-redis/redis/v8 v8.0.0-alpha.0
10+
github.com/go-redis/redis_rate/v9 v9.0.0-alpha.0
1111
github.com/google/uuid v1.1.1
1212
github.com/hashicorp/golang-lru v0.5.3
1313
github.com/iron-io/iron_go3 v0.0.0-20190916120531-a4a7f74b73ac
14+
github.com/jeffh/go.bdd v0.0.0-20120717032931-88f798ee0c74 // indirect
1415
github.com/onsi/ginkgo v1.10.1
1516
github.com/onsi/gomega v1.7.0
1617
github.com/satori/go.uuid v1.2.0
1718
github.com/valyala/gozstd v1.6.4
1819
github.com/vmihailenco/msgpack/v4 v4.3.5
19-
github.com/vmihailenco/taskq/v2 v2.2.3
2020
)

0 commit comments

Comments
 (0)