Skip to content

Commit e2ce4dc

Browse files
committed
Use promises.New from k6
This "automatically" fixes grafana/k6#4017 when this is build with a k6 version after that PR is merged. Also reduces copy-pasted code.
1 parent a296c20 commit e2ce4dc

File tree

1 file changed

+41
-63
lines changed

1 file changed

+41
-63
lines changed

redis/client.go

+41-63
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/redis/go-redis/v9"
1212
"go.k6.io/k6/js/common"
1313
"go.k6.io/k6/js/modules"
14+
"go.k6.io/k6/js/promises"
1415
"go.k6.io/k6/lib"
1516
)
1617

@@ -28,7 +29,7 @@ type Client struct {
2829
//
2930
// The value for `expiration` is interpreted as seconds.
3031
func (c *Client) Set(key string, value interface{}, expiration int) *sobek.Promise {
31-
promise, resolve, reject := c.makeHandledPromise()
32+
promise, resolve, reject := promises.New(c.vu)
3233

3334
if err := c.connect(); err != nil {
3435
reject(err)
@@ -59,7 +60,7 @@ func (c *Client) Set(key string, value interface{}, expiration int) *sobek.Promi
5960
//
6061
// If the key does not exist, the promise is rejected with an error.
6162
func (c *Client) Get(key string) *sobek.Promise {
62-
promise, resolve, reject := c.makeHandledPromise()
63+
promise, resolve, reject := promises.New(c.vu)
6364

6465
if err := c.connect(); err != nil {
6566
reject(err)
@@ -83,7 +84,7 @@ func (c *Client) Get(key string) *sobek.Promise {
8384
//
8485
// If the provided value is not a supported type, the promise is rejected with an error.
8586
func (c *Client) GetSet(key string, value interface{}) *sobek.Promise {
86-
promise, resolve, reject := c.makeHandledPromise()
87+
promise, resolve, reject := promises.New(c.vu)
8788

8889
if err := c.connect(); err != nil {
8990
reject(err)
@@ -110,7 +111,7 @@ func (c *Client) GetSet(key string, value interface{}) *sobek.Promise {
110111

111112
// Del removes the specified keys. A key is ignored if it does not exist
112113
func (c *Client) Del(keys ...string) *sobek.Promise {
113-
promise, resolve, reject := c.makeHandledPromise()
114+
promise, resolve, reject := promises.New(c.vu)
114115

115116
if err := c.connect(); err != nil {
116117
reject(err)
@@ -134,7 +135,7 @@ func (c *Client) Del(keys ...string) *sobek.Promise {
134135
//
135136
// If the key does not exist, the promise is rejected with an error.
136137
func (c *Client) GetDel(key string) *sobek.Promise {
137-
promise, resolve, reject := c.makeHandledPromise()
138+
promise, resolve, reject := promises.New(c.vu)
138139

139140
if err := c.connect(); err != nil {
140141
reject(err)
@@ -158,7 +159,7 @@ func (c *Client) GetDel(key string) *sobek.Promise {
158159
// Note that if the same existing key is mentioned in the argument
159160
// multiple times, it will be counted multiple times.
160161
func (c *Client) Exists(keys ...string) *sobek.Promise {
161-
promise, resolve, reject := c.makeHandledPromise()
162+
promise, resolve, reject := promises.New(c.vu)
162163

163164
if err := c.connect(); err != nil {
164165
reject(err)
@@ -183,7 +184,7 @@ func (c *Client) Exists(keys ...string) *sobek.Promise {
183184
// error is returned if the key contains a value of the wrong type, or
184185
// contains a string that cannot be represented as an integer.
185186
func (c *Client) Incr(key string) *sobek.Promise {
186-
promise, resolve, reject := c.makeHandledPromise()
187+
promise, resolve, reject := promises.New(c.vu)
187188

188189
if err := c.connect(); err != nil {
189190
reject(err)
@@ -208,7 +209,7 @@ func (c *Client) Incr(key string) *sobek.Promise {
208209
// error is returned if the key contains a value of the wrong type, or
209210
// contains a string that cannot be represented as an integer.
210211
func (c *Client) IncrBy(key string, increment int64) *sobek.Promise {
211-
promise, resolve, reject := c.makeHandledPromise()
212+
promise, resolve, reject := promises.New(c.vu)
212213

213214
if err := c.connect(); err != nil {
214215
reject(err)
@@ -233,7 +234,7 @@ func (c *Client) IncrBy(key string, increment int64) *sobek.Promise {
233234
// error is returned if the key contains a value of the wrong type, or
234235
// contains a string that cannot be represented as an integer.
235236
func (c *Client) Decr(key string) *sobek.Promise {
236-
promise, resolve, reject := c.makeHandledPromise()
237+
promise, resolve, reject := promises.New(c.vu)
237238

238239
if err := c.connect(); err != nil {
239240
reject(err)
@@ -258,7 +259,7 @@ func (c *Client) Decr(key string) *sobek.Promise {
258259
// error is returned if the key contains a value of the wrong type, or
259260
// contains a string that cannot be represented as an integer.
260261
func (c *Client) DecrBy(key string, decrement int64) *sobek.Promise {
261-
promise, resolve, reject := c.makeHandledPromise()
262+
promise, resolve, reject := promises.New(c.vu)
262263

263264
if err := c.connect(); err != nil {
264265
reject(err)
@@ -282,7 +283,7 @@ func (c *Client) DecrBy(key string, decrement int64) *sobek.Promise {
282283
//
283284
// If the database is empty, the promise is rejected with an error.
284285
func (c *Client) RandomKey() *sobek.Promise {
285-
promise, resolve, reject := c.makeHandledPromise()
286+
promise, resolve, reject := promises.New(c.vu)
286287

287288
if err := c.connect(); err != nil {
288289
reject(err)
@@ -304,7 +305,7 @@ func (c *Client) RandomKey() *sobek.Promise {
304305

305306
// Mget returns the values associated with the specified keys.
306307
func (c *Client) Mget(keys ...string) *sobek.Promise {
307-
promise, resolve, reject := c.makeHandledPromise()
308+
promise, resolve, reject := promises.New(c.vu)
308309

309310
if err := c.connect(); err != nil {
310311
reject(err)
@@ -329,7 +330,7 @@ func (c *Client) Mget(keys ...string) *sobek.Promise {
329330
// Note that calling Expire with a non-positive timeout will result in
330331
// the key being deleted rather than expired.
331332
func (c *Client) Expire(key string, seconds int) *sobek.Promise {
332-
promise, resolve, reject := c.makeHandledPromise()
333+
promise, resolve, reject := promises.New(c.vu)
333334

334335
if err := c.connect(); err != nil {
335336
reject(err)
@@ -353,7 +354,7 @@ func (c *Client) Expire(key string, seconds int) *sobek.Promise {
353354
//
354355
//nolint:revive,stylecheck
355356
func (c *Client) Ttl(key string) *sobek.Promise {
356-
promise, resolve, reject := c.makeHandledPromise()
357+
promise, resolve, reject := promises.New(c.vu)
357358

358359
if err := c.connect(); err != nil {
359360
reject(err)
@@ -375,7 +376,7 @@ func (c *Client) Ttl(key string) *sobek.Promise {
375376

376377
// Persist removes the existing timeout on key.
377378
func (c *Client) Persist(key string) *sobek.Promise {
378-
promise, resolve, reject := c.makeHandledPromise()
379+
promise, resolve, reject := promises.New(c.vu)
379380

380381
if err := c.connect(); err != nil {
381382
reject(err)
@@ -400,7 +401,7 @@ func (c *Client) Persist(key string) *sobek.Promise {
400401
// performing the push operations. When `key` holds a value that is not
401402
// a list, and error is returned.
402403
func (c *Client) Lpush(key string, values ...interface{}) *sobek.Promise {
403-
promise, resolve, reject := c.makeHandledPromise()
404+
promise, resolve, reject := promises.New(c.vu)
404405

405406
if err := c.connect(); err != nil {
406407
reject(err)
@@ -429,7 +430,7 @@ func (c *Client) Lpush(key string, values ...interface{}) *sobek.Promise {
429430
// at `key`. If `key` does not exist, it is created as empty list before
430431
// performing the push operations.
431432
func (c *Client) Rpush(key string, values ...interface{}) *sobek.Promise {
432-
promise, resolve, reject := c.makeHandledPromise()
433+
promise, resolve, reject := promises.New(c.vu)
433434

434435
if err := c.connect(); err != nil {
435436
reject(err)
@@ -459,7 +460,7 @@ func (c *Client) Rpush(key string, values ...interface{}) *sobek.Promise {
459460
// If the list does not exist, this command rejects the promise with an error.
460461
func (c *Client) Lpop(key string) *sobek.Promise {
461462
// TODO: redis supports indicating the amount of values to pop
462-
promise, resolve, reject := c.makeHandledPromise()
463+
promise, resolve, reject := promises.New(c.vu)
463464

464465
if err := c.connect(); err != nil {
465466
reject(err)
@@ -484,7 +485,7 @@ func (c *Client) Lpop(key string) *sobek.Promise {
484485
// If the list does not exist, this command rejects the promise with an error.
485486
func (c *Client) Rpop(key string) *sobek.Promise {
486487
// TODO: redis supports indicating the amount of values to pop
487-
promise, resolve, reject := c.makeHandledPromise()
488+
promise, resolve, reject := promises.New(c.vu)
488489

489490
if err := c.connect(); err != nil {
490491
reject(err)
@@ -509,7 +510,7 @@ func (c *Client) Rpop(key string) *sobek.Promise {
509510
// negative numbers, where they indicate offsets starting at the end of
510511
// the list.
511512
func (c *Client) Lrange(key string, start, stop int64) *sobek.Promise {
512-
promise, resolve, reject := c.makeHandledPromise()
513+
promise, resolve, reject := promises.New(c.vu)
513514

514515
if err := c.connect(); err != nil {
515516
reject(err)
@@ -535,7 +536,7 @@ func (c *Client) Lrange(key string, start, stop int64) *sobek.Promise {
535536
//
536537
// If the list does not exist, this command rejects the promise with an error.
537538
func (c *Client) Lindex(key string, index int64) *sobek.Promise {
538-
promise, resolve, reject := c.makeHandledPromise()
539+
promise, resolve, reject := promises.New(c.vu)
539540

540541
if err := c.connect(); err != nil {
541542
reject(err)
@@ -559,7 +560,7 @@ func (c *Client) Lindex(key string, index int64) *sobek.Promise {
559560
//
560561
// If the list does not exist, this command rejects the promise with an error.
561562
func (c *Client) Lset(key string, index int64, element string) *sobek.Promise {
562-
promise, resolve, reject := c.makeHandledPromise()
563+
promise, resolve, reject := promises.New(c.vu)
563564

564565
if err := c.connect(); err != nil {
565566
reject(err)
@@ -586,7 +587,7 @@ func (c *Client) Lset(key string, index int64, element string) *sobek.Promise {
586587
//
587588
// If the list does not exist, this command rejects the promise with an error.
588589
func (c *Client) Lrem(key string, count int64, value string) *sobek.Promise {
589-
promise, resolve, reject := c.makeHandledPromise()
590+
promise, resolve, reject := promises.New(c.vu)
590591

591592
if err := c.connect(); err != nil {
592593
reject(err)
@@ -611,7 +612,7 @@ func (c *Client) Lrem(key string, count int64, value string) *sobek.Promise {
611612
//
612613
// If the list does not exist, this command rejects the promise with an error.
613614
func (c *Client) Llen(key string) *sobek.Promise {
614-
promise, resolve, reject := c.makeHandledPromise()
615+
promise, resolve, reject := promises.New(c.vu)
615616

616617
if err := c.connect(); err != nil {
617618
reject(err)
@@ -637,7 +638,7 @@ func (c *Client) Llen(key string) *sobek.Promise {
637638
//
638639
// If the hash does not exist, this command rejects the promise with an error.
639640
func (c *Client) Hset(key string, field string, value interface{}) *sobek.Promise {
640-
promise, resolve, reject := c.makeHandledPromise()
641+
promise, resolve, reject := promises.New(c.vu)
641642

642643
if err := c.connect(); err != nil {
643644
reject(err)
@@ -667,7 +668,7 @@ func (c *Client) Hset(key string, field string, value interface{}) *sobek.Promis
667668
// holding a hash is created. If `field` already exists, this operation
668669
// has no effect.
669670
func (c *Client) Hsetnx(key, field, value string) *sobek.Promise {
670-
promise, resolve, reject := c.makeHandledPromise()
671+
promise, resolve, reject := promises.New(c.vu)
671672

672673
if err := c.connect(); err != nil {
673674
reject(err)
@@ -691,7 +692,7 @@ func (c *Client) Hsetnx(key, field, value string) *sobek.Promise {
691692
//
692693
// If the hash does not exist, this command rejects the promise with an error.
693694
func (c *Client) Hget(key, field string) *sobek.Promise {
694-
promise, resolve, reject := c.makeHandledPromise()
695+
promise, resolve, reject := promises.New(c.vu)
695696

696697
if err := c.connect(); err != nil {
697698
reject(err)
@@ -713,7 +714,7 @@ func (c *Client) Hget(key, field string) *sobek.Promise {
713714

714715
// Hdel deletes the specified fields from the hash stored at `key`.
715716
func (c *Client) Hdel(key string, fields ...string) *sobek.Promise {
716-
promise, resolve, reject := c.makeHandledPromise()
717+
promise, resolve, reject := promises.New(c.vu)
717718

718719
if err := c.connect(); err != nil {
719720
reject(err)
@@ -737,7 +738,7 @@ func (c *Client) Hdel(key string, fields ...string) *sobek.Promise {
737738
//
738739
// If the hash does not exist, this command rejects the promise with an error.
739740
func (c *Client) Hgetall(key string) *sobek.Promise {
740-
promise, resolve, reject := c.makeHandledPromise()
741+
promise, resolve, reject := promises.New(c.vu)
741742

742743
if err := c.connect(); err != nil {
743744
reject(err)
@@ -761,7 +762,7 @@ func (c *Client) Hgetall(key string) *sobek.Promise {
761762
//
762763
// If the hash does not exist, this command rejects the promise with an error.
763764
func (c *Client) Hkeys(key string) *sobek.Promise {
764-
promise, resolve, reject := c.makeHandledPromise()
765+
promise, resolve, reject := promises.New(c.vu)
765766

766767
if err := c.connect(); err != nil {
767768
reject(err)
@@ -785,7 +786,7 @@ func (c *Client) Hkeys(key string) *sobek.Promise {
785786
//
786787
// If the hash does not exist, this command rejects the promise with an error.
787788
func (c *Client) Hvals(key string) *sobek.Promise {
788-
promise, resolve, reject := c.makeHandledPromise()
789+
promise, resolve, reject := promises.New(c.vu)
789790

790791
if err := c.connect(); err != nil {
791792
reject(err)
@@ -809,7 +810,7 @@ func (c *Client) Hvals(key string) *sobek.Promise {
809810
//
810811
// If the hash does not exist, this command rejects the promise with an error.
811812
func (c *Client) Hlen(key string) *sobek.Promise {
812-
promise, resolve, reject := c.makeHandledPromise()
813+
promise, resolve, reject := promises.New(c.vu)
813814

814815
if err := c.connect(); err != nil {
815816
reject(err)
@@ -834,7 +835,7 @@ func (c *Client) Hlen(key string) *sobek.Promise {
834835
// If `field` does not exist the value is set to 0 before the operation is
835836
// set to 0 before the operation is performed.
836837
func (c *Client) Hincrby(key, field string, increment int64) *sobek.Promise {
837-
promise, resolve, reject := c.makeHandledPromise()
838+
promise, resolve, reject := promises.New(c.vu)
838839

839840
if err := c.connect(); err != nil {
840841
reject(err)
@@ -858,7 +859,7 @@ func (c *Client) Hincrby(key, field string, increment int64) *sobek.Promise {
858859
// Specified members that are already a member of this set are ignored.
859860
// If key does not exist, a new set is created before adding the specified members.
860861
func (c *Client) Sadd(key string, members ...interface{}) *sobek.Promise {
861-
promise, resolve, reject := c.makeHandledPromise()
862+
promise, resolve, reject := promises.New(c.vu)
862863

863864
if err := c.connect(); err != nil {
864865
reject(err)
@@ -887,7 +888,7 @@ func (c *Client) Sadd(key string, members ...interface{}) *sobek.Promise {
887888
// Specified members that are not a member of this set are ignored.
888889
// If key does not exist, it is treated as an empty set and this command returns 0.
889890
func (c *Client) Srem(key string, members ...interface{}) *sobek.Promise {
890-
promise, resolve, reject := c.makeHandledPromise()
891+
promise, resolve, reject := promises.New(c.vu)
891892

892893
if err := c.connect(); err != nil {
893894
reject(err)
@@ -914,7 +915,7 @@ func (c *Client) Srem(key string, members ...interface{}) *sobek.Promise {
914915

915916
// Sismember returns if member is a member of the set stored at key.
916917
func (c *Client) Sismember(key string, member interface{}) *sobek.Promise {
917-
promise, resolve, reject := c.makeHandledPromise()
918+
promise, resolve, reject := promises.New(c.vu)
918919

919920
if err := c.connect(); err != nil {
920921
reject(err)
@@ -941,7 +942,7 @@ func (c *Client) Sismember(key string, member interface{}) *sobek.Promise {
941942

942943
// Smembers returns all members of the set stored at key.
943944
func (c *Client) Smembers(key string) *sobek.Promise {
944-
promise, resolve, reject := c.makeHandledPromise()
945+
promise, resolve, reject := promises.New(c.vu)
945946

946947
if err := c.connect(); err != nil {
947948
reject(err)
@@ -965,7 +966,7 @@ func (c *Client) Smembers(key string) *sobek.Promise {
965966
//
966967
// If the set does not exist, the promise is rejected with an error.
967968
func (c *Client) Srandmember(key string) *sobek.Promise {
968-
promise, resolve, reject := c.makeHandledPromise()
969+
promise, resolve, reject := promises.New(c.vu)
969970

970971
if err := c.connect(); err != nil {
971972
reject(err)
@@ -989,7 +990,7 @@ func (c *Client) Srandmember(key string) *sobek.Promise {
989990
//
990991
// If the set does not exist, the promise is rejected with an error.
991992
func (c *Client) Spop(key string) *sobek.Promise {
992-
promise, resolve, reject := c.makeHandledPromise()
993+
promise, resolve, reject := promises.New(c.vu)
993994

994995
if err := c.connect(); err != nil {
995996
reject(err)
@@ -1015,7 +1016,7 @@ func (c *Client) SendCommand(command string, args ...interface{}) *sobek.Promise
10151016
doArgs = append(doArgs, command)
10161017
doArgs = append(doArgs, args...)
10171018

1018-
promise, resolve, reject := c.makeHandledPromise()
1019+
promise, resolve, reject := promises.New(c.vu)
10191020

10201021
if err := c.connect(); err != nil {
10211022
reject(err)
@@ -1040,29 +1041,6 @@ func (c *Client) SendCommand(command string, args ...interface{}) *sobek.Promise
10401041
return promise
10411042
}
10421043

1043-
// makeHandledPromise will create a promise and return its resolve and reject methods,
1044-
// wrapped in such a way that it will block the eventloop from exiting before they are
1045-
// called even if the promise isn't resolved by the time the current script ends executing.
1046-
func (c *Client) makeHandledPromise() (*sobek.Promise, func(interface{}), func(interface{})) {
1047-
runtime := c.vu.Runtime()
1048-
callback := c.vu.RegisterCallback()
1049-
p, resolve, reject := runtime.NewPromise()
1050-
1051-
return p, func(i interface{}) {
1052-
// more stuff
1053-
callback(func() error {
1054-
resolve(i)
1055-
return nil
1056-
})
1057-
}, func(i interface{}) {
1058-
// more stuff
1059-
callback(func() error {
1060-
reject(i)
1061-
return nil
1062-
})
1063-
}
1064-
}
1065-
10661044
// connect establishes the client's connection to the target
10671045
// redis instance(s).
10681046
func (c *Client) connect() error {

0 commit comments

Comments
 (0)