@@ -11,6 +11,7 @@ import (
11
11
"github.com/redis/go-redis/v9"
12
12
"go.k6.io/k6/js/common"
13
13
"go.k6.io/k6/js/modules"
14
+ "go.k6.io/k6/js/promises"
14
15
"go.k6.io/k6/lib"
15
16
)
16
17
@@ -28,7 +29,7 @@ type Client struct {
28
29
//
29
30
// The value for `expiration` is interpreted as seconds.
30
31
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 )
32
33
33
34
if err := c .connect (); err != nil {
34
35
reject (err )
@@ -59,7 +60,7 @@ func (c *Client) Set(key string, value interface{}, expiration int) *sobek.Promi
59
60
//
60
61
// If the key does not exist, the promise is rejected with an error.
61
62
func (c * Client ) Get (key string ) * sobek.Promise {
62
- promise , resolve , reject := c . makeHandledPromise ( )
63
+ promise , resolve , reject := promises . New ( c . vu )
63
64
64
65
if err := c .connect (); err != nil {
65
66
reject (err )
@@ -83,7 +84,7 @@ func (c *Client) Get(key string) *sobek.Promise {
83
84
//
84
85
// If the provided value is not a supported type, the promise is rejected with an error.
85
86
func (c * Client ) GetSet (key string , value interface {}) * sobek.Promise {
86
- promise , resolve , reject := c . makeHandledPromise ( )
87
+ promise , resolve , reject := promises . New ( c . vu )
87
88
88
89
if err := c .connect (); err != nil {
89
90
reject (err )
@@ -110,7 +111,7 @@ func (c *Client) GetSet(key string, value interface{}) *sobek.Promise {
110
111
111
112
// Del removes the specified keys. A key is ignored if it does not exist
112
113
func (c * Client ) Del (keys ... string ) * sobek.Promise {
113
- promise , resolve , reject := c . makeHandledPromise ( )
114
+ promise , resolve , reject := promises . New ( c . vu )
114
115
115
116
if err := c .connect (); err != nil {
116
117
reject (err )
@@ -134,7 +135,7 @@ func (c *Client) Del(keys ...string) *sobek.Promise {
134
135
//
135
136
// If the key does not exist, the promise is rejected with an error.
136
137
func (c * Client ) GetDel (key string ) * sobek.Promise {
137
- promise , resolve , reject := c . makeHandledPromise ( )
138
+ promise , resolve , reject := promises . New ( c . vu )
138
139
139
140
if err := c .connect (); err != nil {
140
141
reject (err )
@@ -158,7 +159,7 @@ func (c *Client) GetDel(key string) *sobek.Promise {
158
159
// Note that if the same existing key is mentioned in the argument
159
160
// multiple times, it will be counted multiple times.
160
161
func (c * Client ) Exists (keys ... string ) * sobek.Promise {
161
- promise , resolve , reject := c . makeHandledPromise ( )
162
+ promise , resolve , reject := promises . New ( c . vu )
162
163
163
164
if err := c .connect (); err != nil {
164
165
reject (err )
@@ -183,7 +184,7 @@ func (c *Client) Exists(keys ...string) *sobek.Promise {
183
184
// error is returned if the key contains a value of the wrong type, or
184
185
// contains a string that cannot be represented as an integer.
185
186
func (c * Client ) Incr (key string ) * sobek.Promise {
186
- promise , resolve , reject := c . makeHandledPromise ( )
187
+ promise , resolve , reject := promises . New ( c . vu )
187
188
188
189
if err := c .connect (); err != nil {
189
190
reject (err )
@@ -208,7 +209,7 @@ func (c *Client) Incr(key string) *sobek.Promise {
208
209
// error is returned if the key contains a value of the wrong type, or
209
210
// contains a string that cannot be represented as an integer.
210
211
func (c * Client ) IncrBy (key string , increment int64 ) * sobek.Promise {
211
- promise , resolve , reject := c . makeHandledPromise ( )
212
+ promise , resolve , reject := promises . New ( c . vu )
212
213
213
214
if err := c .connect (); err != nil {
214
215
reject (err )
@@ -233,7 +234,7 @@ func (c *Client) IncrBy(key string, increment int64) *sobek.Promise {
233
234
// error is returned if the key contains a value of the wrong type, or
234
235
// contains a string that cannot be represented as an integer.
235
236
func (c * Client ) Decr (key string ) * sobek.Promise {
236
- promise , resolve , reject := c . makeHandledPromise ( )
237
+ promise , resolve , reject := promises . New ( c . vu )
237
238
238
239
if err := c .connect (); err != nil {
239
240
reject (err )
@@ -258,7 +259,7 @@ func (c *Client) Decr(key string) *sobek.Promise {
258
259
// error is returned if the key contains a value of the wrong type, or
259
260
// contains a string that cannot be represented as an integer.
260
261
func (c * Client ) DecrBy (key string , decrement int64 ) * sobek.Promise {
261
- promise , resolve , reject := c . makeHandledPromise ( )
262
+ promise , resolve , reject := promises . New ( c . vu )
262
263
263
264
if err := c .connect (); err != nil {
264
265
reject (err )
@@ -282,7 +283,7 @@ func (c *Client) DecrBy(key string, decrement int64) *sobek.Promise {
282
283
//
283
284
// If the database is empty, the promise is rejected with an error.
284
285
func (c * Client ) RandomKey () * sobek.Promise {
285
- promise , resolve , reject := c . makeHandledPromise ( )
286
+ promise , resolve , reject := promises . New ( c . vu )
286
287
287
288
if err := c .connect (); err != nil {
288
289
reject (err )
@@ -304,7 +305,7 @@ func (c *Client) RandomKey() *sobek.Promise {
304
305
305
306
// Mget returns the values associated with the specified keys.
306
307
func (c * Client ) Mget (keys ... string ) * sobek.Promise {
307
- promise , resolve , reject := c . makeHandledPromise ( )
308
+ promise , resolve , reject := promises . New ( c . vu )
308
309
309
310
if err := c .connect (); err != nil {
310
311
reject (err )
@@ -329,7 +330,7 @@ func (c *Client) Mget(keys ...string) *sobek.Promise {
329
330
// Note that calling Expire with a non-positive timeout will result in
330
331
// the key being deleted rather than expired.
331
332
func (c * Client ) Expire (key string , seconds int ) * sobek.Promise {
332
- promise , resolve , reject := c . makeHandledPromise ( )
333
+ promise , resolve , reject := promises . New ( c . vu )
333
334
334
335
if err := c .connect (); err != nil {
335
336
reject (err )
@@ -353,7 +354,7 @@ func (c *Client) Expire(key string, seconds int) *sobek.Promise {
353
354
//
354
355
//nolint:revive,stylecheck
355
356
func (c * Client ) Ttl (key string ) * sobek.Promise {
356
- promise , resolve , reject := c . makeHandledPromise ( )
357
+ promise , resolve , reject := promises . New ( c . vu )
357
358
358
359
if err := c .connect (); err != nil {
359
360
reject (err )
@@ -375,7 +376,7 @@ func (c *Client) Ttl(key string) *sobek.Promise {
375
376
376
377
// Persist removes the existing timeout on key.
377
378
func (c * Client ) Persist (key string ) * sobek.Promise {
378
- promise , resolve , reject := c . makeHandledPromise ( )
379
+ promise , resolve , reject := promises . New ( c . vu )
379
380
380
381
if err := c .connect (); err != nil {
381
382
reject (err )
@@ -400,7 +401,7 @@ func (c *Client) Persist(key string) *sobek.Promise {
400
401
// performing the push operations. When `key` holds a value that is not
401
402
// a list, and error is returned.
402
403
func (c * Client ) Lpush (key string , values ... interface {}) * sobek.Promise {
403
- promise , resolve , reject := c . makeHandledPromise ( )
404
+ promise , resolve , reject := promises . New ( c . vu )
404
405
405
406
if err := c .connect (); err != nil {
406
407
reject (err )
@@ -429,7 +430,7 @@ func (c *Client) Lpush(key string, values ...interface{}) *sobek.Promise {
429
430
// at `key`. If `key` does not exist, it is created as empty list before
430
431
// performing the push operations.
431
432
func (c * Client ) Rpush (key string , values ... interface {}) * sobek.Promise {
432
- promise , resolve , reject := c . makeHandledPromise ( )
433
+ promise , resolve , reject := promises . New ( c . vu )
433
434
434
435
if err := c .connect (); err != nil {
435
436
reject (err )
@@ -459,7 +460,7 @@ func (c *Client) Rpush(key string, values ...interface{}) *sobek.Promise {
459
460
// If the list does not exist, this command rejects the promise with an error.
460
461
func (c * Client ) Lpop (key string ) * sobek.Promise {
461
462
// TODO: redis supports indicating the amount of values to pop
462
- promise , resolve , reject := c . makeHandledPromise ( )
463
+ promise , resolve , reject := promises . New ( c . vu )
463
464
464
465
if err := c .connect (); err != nil {
465
466
reject (err )
@@ -484,7 +485,7 @@ func (c *Client) Lpop(key string) *sobek.Promise {
484
485
// If the list does not exist, this command rejects the promise with an error.
485
486
func (c * Client ) Rpop (key string ) * sobek.Promise {
486
487
// TODO: redis supports indicating the amount of values to pop
487
- promise , resolve , reject := c . makeHandledPromise ( )
488
+ promise , resolve , reject := promises . New ( c . vu )
488
489
489
490
if err := c .connect (); err != nil {
490
491
reject (err )
@@ -509,7 +510,7 @@ func (c *Client) Rpop(key string) *sobek.Promise {
509
510
// negative numbers, where they indicate offsets starting at the end of
510
511
// the list.
511
512
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 )
513
514
514
515
if err := c .connect (); err != nil {
515
516
reject (err )
@@ -535,7 +536,7 @@ func (c *Client) Lrange(key string, start, stop int64) *sobek.Promise {
535
536
//
536
537
// If the list does not exist, this command rejects the promise with an error.
537
538
func (c * Client ) Lindex (key string , index int64 ) * sobek.Promise {
538
- promise , resolve , reject := c . makeHandledPromise ( )
539
+ promise , resolve , reject := promises . New ( c . vu )
539
540
540
541
if err := c .connect (); err != nil {
541
542
reject (err )
@@ -559,7 +560,7 @@ func (c *Client) Lindex(key string, index int64) *sobek.Promise {
559
560
//
560
561
// If the list does not exist, this command rejects the promise with an error.
561
562
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 )
563
564
564
565
if err := c .connect (); err != nil {
565
566
reject (err )
@@ -586,7 +587,7 @@ func (c *Client) Lset(key string, index int64, element string) *sobek.Promise {
586
587
//
587
588
// If the list does not exist, this command rejects the promise with an error.
588
589
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 )
590
591
591
592
if err := c .connect (); err != nil {
592
593
reject (err )
@@ -611,7 +612,7 @@ func (c *Client) Lrem(key string, count int64, value string) *sobek.Promise {
611
612
//
612
613
// If the list does not exist, this command rejects the promise with an error.
613
614
func (c * Client ) Llen (key string ) * sobek.Promise {
614
- promise , resolve , reject := c . makeHandledPromise ( )
615
+ promise , resolve , reject := promises . New ( c . vu )
615
616
616
617
if err := c .connect (); err != nil {
617
618
reject (err )
@@ -637,7 +638,7 @@ func (c *Client) Llen(key string) *sobek.Promise {
637
638
//
638
639
// If the hash does not exist, this command rejects the promise with an error.
639
640
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 )
641
642
642
643
if err := c .connect (); err != nil {
643
644
reject (err )
@@ -667,7 +668,7 @@ func (c *Client) Hset(key string, field string, value interface{}) *sobek.Promis
667
668
// holding a hash is created. If `field` already exists, this operation
668
669
// has no effect.
669
670
func (c * Client ) Hsetnx (key , field , value string ) * sobek.Promise {
670
- promise , resolve , reject := c . makeHandledPromise ( )
671
+ promise , resolve , reject := promises . New ( c . vu )
671
672
672
673
if err := c .connect (); err != nil {
673
674
reject (err )
@@ -691,7 +692,7 @@ func (c *Client) Hsetnx(key, field, value string) *sobek.Promise {
691
692
//
692
693
// If the hash does not exist, this command rejects the promise with an error.
693
694
func (c * Client ) Hget (key , field string ) * sobek.Promise {
694
- promise , resolve , reject := c . makeHandledPromise ( )
695
+ promise , resolve , reject := promises . New ( c . vu )
695
696
696
697
if err := c .connect (); err != nil {
697
698
reject (err )
@@ -713,7 +714,7 @@ func (c *Client) Hget(key, field string) *sobek.Promise {
713
714
714
715
// Hdel deletes the specified fields from the hash stored at `key`.
715
716
func (c * Client ) Hdel (key string , fields ... string ) * sobek.Promise {
716
- promise , resolve , reject := c . makeHandledPromise ( )
717
+ promise , resolve , reject := promises . New ( c . vu )
717
718
718
719
if err := c .connect (); err != nil {
719
720
reject (err )
@@ -737,7 +738,7 @@ func (c *Client) Hdel(key string, fields ...string) *sobek.Promise {
737
738
//
738
739
// If the hash does not exist, this command rejects the promise with an error.
739
740
func (c * Client ) Hgetall (key string ) * sobek.Promise {
740
- promise , resolve , reject := c . makeHandledPromise ( )
741
+ promise , resolve , reject := promises . New ( c . vu )
741
742
742
743
if err := c .connect (); err != nil {
743
744
reject (err )
@@ -761,7 +762,7 @@ func (c *Client) Hgetall(key string) *sobek.Promise {
761
762
//
762
763
// If the hash does not exist, this command rejects the promise with an error.
763
764
func (c * Client ) Hkeys (key string ) * sobek.Promise {
764
- promise , resolve , reject := c . makeHandledPromise ( )
765
+ promise , resolve , reject := promises . New ( c . vu )
765
766
766
767
if err := c .connect (); err != nil {
767
768
reject (err )
@@ -785,7 +786,7 @@ func (c *Client) Hkeys(key string) *sobek.Promise {
785
786
//
786
787
// If the hash does not exist, this command rejects the promise with an error.
787
788
func (c * Client ) Hvals (key string ) * sobek.Promise {
788
- promise , resolve , reject := c . makeHandledPromise ( )
789
+ promise , resolve , reject := promises . New ( c . vu )
789
790
790
791
if err := c .connect (); err != nil {
791
792
reject (err )
@@ -809,7 +810,7 @@ func (c *Client) Hvals(key string) *sobek.Promise {
809
810
//
810
811
// If the hash does not exist, this command rejects the promise with an error.
811
812
func (c * Client ) Hlen (key string ) * sobek.Promise {
812
- promise , resolve , reject := c . makeHandledPromise ( )
813
+ promise , resolve , reject := promises . New ( c . vu )
813
814
814
815
if err := c .connect (); err != nil {
815
816
reject (err )
@@ -834,7 +835,7 @@ func (c *Client) Hlen(key string) *sobek.Promise {
834
835
// If `field` does not exist the value is set to 0 before the operation is
835
836
// set to 0 before the operation is performed.
836
837
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 )
838
839
839
840
if err := c .connect (); err != nil {
840
841
reject (err )
@@ -858,7 +859,7 @@ func (c *Client) Hincrby(key, field string, increment int64) *sobek.Promise {
858
859
// Specified members that are already a member of this set are ignored.
859
860
// If key does not exist, a new set is created before adding the specified members.
860
861
func (c * Client ) Sadd (key string , members ... interface {}) * sobek.Promise {
861
- promise , resolve , reject := c . makeHandledPromise ( )
862
+ promise , resolve , reject := promises . New ( c . vu )
862
863
863
864
if err := c .connect (); err != nil {
864
865
reject (err )
@@ -887,7 +888,7 @@ func (c *Client) Sadd(key string, members ...interface{}) *sobek.Promise {
887
888
// Specified members that are not a member of this set are ignored.
888
889
// If key does not exist, it is treated as an empty set and this command returns 0.
889
890
func (c * Client ) Srem (key string , members ... interface {}) * sobek.Promise {
890
- promise , resolve , reject := c . makeHandledPromise ( )
891
+ promise , resolve , reject := promises . New ( c . vu )
891
892
892
893
if err := c .connect (); err != nil {
893
894
reject (err )
@@ -914,7 +915,7 @@ func (c *Client) Srem(key string, members ...interface{}) *sobek.Promise {
914
915
915
916
// Sismember returns if member is a member of the set stored at key.
916
917
func (c * Client ) Sismember (key string , member interface {}) * sobek.Promise {
917
- promise , resolve , reject := c . makeHandledPromise ( )
918
+ promise , resolve , reject := promises . New ( c . vu )
918
919
919
920
if err := c .connect (); err != nil {
920
921
reject (err )
@@ -941,7 +942,7 @@ func (c *Client) Sismember(key string, member interface{}) *sobek.Promise {
941
942
942
943
// Smembers returns all members of the set stored at key.
943
944
func (c * Client ) Smembers (key string ) * sobek.Promise {
944
- promise , resolve , reject := c . makeHandledPromise ( )
945
+ promise , resolve , reject := promises . New ( c . vu )
945
946
946
947
if err := c .connect (); err != nil {
947
948
reject (err )
@@ -965,7 +966,7 @@ func (c *Client) Smembers(key string) *sobek.Promise {
965
966
//
966
967
// If the set does not exist, the promise is rejected with an error.
967
968
func (c * Client ) Srandmember (key string ) * sobek.Promise {
968
- promise , resolve , reject := c . makeHandledPromise ( )
969
+ promise , resolve , reject := promises . New ( c . vu )
969
970
970
971
if err := c .connect (); err != nil {
971
972
reject (err )
@@ -989,7 +990,7 @@ func (c *Client) Srandmember(key string) *sobek.Promise {
989
990
//
990
991
// If the set does not exist, the promise is rejected with an error.
991
992
func (c * Client ) Spop (key string ) * sobek.Promise {
992
- promise , resolve , reject := c . makeHandledPromise ( )
993
+ promise , resolve , reject := promises . New ( c . vu )
993
994
994
995
if err := c .connect (); err != nil {
995
996
reject (err )
@@ -1015,7 +1016,7 @@ func (c *Client) SendCommand(command string, args ...interface{}) *sobek.Promise
1015
1016
doArgs = append (doArgs , command )
1016
1017
doArgs = append (doArgs , args ... )
1017
1018
1018
- promise , resolve , reject := c . makeHandledPromise ( )
1019
+ promise , resolve , reject := promises . New ( c . vu )
1019
1020
1020
1021
if err := c .connect (); err != nil {
1021
1022
reject (err )
@@ -1040,29 +1041,6 @@ func (c *Client) SendCommand(command string, args ...interface{}) *sobek.Promise
1040
1041
return promise
1041
1042
}
1042
1043
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
-
1066
1044
// connect establishes the client's connection to the target
1067
1045
// redis instance(s).
1068
1046
func (c * Client ) connect () error {
0 commit comments