@@ -28,6 +28,7 @@ export type ReleaseConcurrencyQueueOptions<T> = {
28
28
pollInterval ?: number ;
29
29
batchSize ?: number ;
30
30
retry ?: ReleaseConcurrencyQueueRetryOptions ;
31
+ disableConsumers ?: boolean ;
31
32
} ;
32
33
33
34
const QueueItemMetadata = z . object ( {
@@ -74,7 +75,10 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
74
75
} ;
75
76
76
77
this . #registerCommands( ) ;
77
- this . #startConsumers( ) ;
78
+
79
+ if ( ! options . disableConsumers ) {
80
+ this . #startConsumers( ) ;
81
+ }
78
82
}
79
83
80
84
public async quit ( ) {
@@ -93,6 +97,12 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
93
97
const maxTokens = await this . #callMaxTokens( releaseQueueDescriptor ) ;
94
98
95
99
if ( maxTokens === 0 ) {
100
+ this . logger . debug ( "No tokens available, skipping release" , {
101
+ releaseQueueDescriptor,
102
+ releaserId,
103
+ maxTokens,
104
+ } ) ;
105
+
96
106
return ;
97
107
}
98
108
@@ -109,6 +119,14 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
109
119
String ( Date . now ( ) )
110
120
) ;
111
121
122
+ this . logger . debug ( "Consumed token in attemptToRelease" , {
123
+ releaseQueueDescriptor,
124
+ releaserId,
125
+ maxTokens,
126
+ result,
127
+ releaseQueue,
128
+ } ) ;
129
+
112
130
if ( ! ! result ) {
113
131
await this . #callExecutor( releaseQueueDescriptor , releaserId , {
114
132
retryCount : 0 ,
@@ -119,6 +137,7 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
119
137
releaseQueueDescriptor,
120
138
releaserId,
121
139
maxTokens,
140
+ releaseQueue,
122
141
} ) ;
123
142
}
124
143
}
@@ -130,13 +149,19 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
130
149
*/
131
150
public async consumeToken ( releaseQueueDescriptor : T , releaserId : string ) {
132
151
const maxTokens = await this . #callMaxTokens( releaseQueueDescriptor ) ;
152
+ const releaseQueue = this . keys . fromDescriptor ( releaseQueueDescriptor ) ;
133
153
134
154
if ( maxTokens === 0 ) {
155
+ this . logger . debug ( "No tokens available, skipping consume" , {
156
+ releaseQueueDescriptor,
157
+ releaserId,
158
+ maxTokens,
159
+ releaseQueue,
160
+ } ) ;
161
+
135
162
return ;
136
163
}
137
164
138
- const releaseQueue = this . keys . fromDescriptor ( releaseQueueDescriptor ) ;
139
-
140
165
await this . redis . consumeToken (
141
166
this . masterQueuesKey ,
142
167
this . #bucketKey( releaseQueue ) ,
@@ -147,6 +172,13 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
147
172
String ( maxTokens ) ,
148
173
String ( Date . now ( ) )
149
174
) ;
175
+
176
+ this . logger . debug ( "Consumed token in consumeToken" , {
177
+ releaseQueueDescriptor,
178
+ releaserId,
179
+ maxTokens,
180
+ releaseQueue,
181
+ } ) ;
150
182
}
151
183
152
184
/**
@@ -157,6 +189,11 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
157
189
public async returnToken ( releaseQueueDescriptor : T , releaserId : string ) {
158
190
const releaseQueue = this . keys . fromDescriptor ( releaseQueueDescriptor ) ;
159
191
192
+ this . logger . debug ( "Returning token in returnToken" , {
193
+ releaseQueueDescriptor,
194
+ releaserId,
195
+ } ) ;
196
+
160
197
await this . redis . returnTokenOnly (
161
198
this . masterQueuesKey ,
162
199
this . #bucketKey( releaseQueue ) ,
@@ -165,6 +202,12 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
165
202
releaseQueue ,
166
203
releaserId
167
204
) ;
205
+
206
+ this . logger . debug ( "Returned token in returnToken" , {
207
+ releaseQueueDescriptor,
208
+ releaserId,
209
+ releaseQueue,
210
+ } ) ;
168
211
}
169
212
170
213
/**
@@ -177,10 +220,20 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
177
220
const releaseQueue = this . keys . fromDescriptor ( releaseQueueDescriptor ) ;
178
221
179
222
if ( amount < 0 ) {
223
+ this . logger . debug ( "Cannot refill with negative tokens" , {
224
+ releaseQueueDescriptor,
225
+ amount,
226
+ } ) ;
227
+
180
228
throw new Error ( "Cannot refill with negative tokens" ) ;
181
229
}
182
230
183
231
if ( amount === 0 ) {
232
+ this . logger . debug ( "Cannot refill with 0 tokens" , {
233
+ releaseQueueDescriptor,
234
+ amount,
235
+ } ) ;
236
+
184
237
return [ ] ;
185
238
}
186
239
@@ -192,6 +245,13 @@ export class ReleaseConcurrencyTokenBucketQueue<T> {
192
245
String ( amount ) ,
193
246
String ( maxTokens )
194
247
) ;
248
+
249
+ this . logger . debug ( "Refilled tokens in refillTokens" , {
250
+ releaseQueueDescriptor,
251
+ releaseQueue,
252
+ amount,
253
+ maxTokens,
254
+ } ) ;
195
255
}
196
256
197
257
/**
0 commit comments