qdone 2.0.46-alpha → 2.0.47-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commonjs/src/enqueue.js +45 -15
- package/package.json +1 -1
- package/src/enqueue.js +44 -13
package/commonjs/src/enqueue.js
CHANGED
|
@@ -333,12 +333,27 @@ let requestCount = 0;
|
|
|
333
333
|
// Returns number of messages flushed.
|
|
334
334
|
//
|
|
335
335
|
async function flushMessages(qrl, opt, sendBuffer) {
|
|
336
|
-
debug('flushMessages', qrl);
|
|
336
|
+
debug('flushMessages', { qrl, sendBuffer });
|
|
337
|
+
// Track our outgoing messages to map with Failed / Successful returns
|
|
338
|
+
const messagesById = new Map();
|
|
339
|
+
const resultsById = new Map();
|
|
340
|
+
const results = [];
|
|
341
|
+
if (sendBuffer[qrl] && sendBuffer[qrl].length) {
|
|
342
|
+
for (const message of sendBuffer[qrl]) {
|
|
343
|
+
const Id = message.Id;
|
|
344
|
+
messagesById.set(Id, message);
|
|
345
|
+
// Pre-prepare results
|
|
346
|
+
const result = { Id };
|
|
347
|
+
resultsById.set(Id, result);
|
|
348
|
+
results.push(result);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
337
351
|
// Flush until empty
|
|
338
352
|
let numFlushed = 0;
|
|
339
353
|
async function whileNotEmpty() {
|
|
340
|
-
if (!(sendBuffer[qrl] && sendBuffer[qrl].length))
|
|
341
|
-
return numFlushed;
|
|
354
|
+
if (!(sendBuffer[qrl] && sendBuffer[qrl].length)) {
|
|
355
|
+
return { numFlushed, results };
|
|
356
|
+
}
|
|
342
357
|
// Construct batch until full
|
|
343
358
|
const batch = [];
|
|
344
359
|
let nextSize = JSON.stringify(sendBuffer[qrl][0]).length;
|
|
@@ -353,9 +368,8 @@ async function flushMessages(qrl, opt, sendBuffer) {
|
|
|
353
368
|
}
|
|
354
369
|
// Send batch
|
|
355
370
|
const data = await sendMessageBatch(qrl, batch, opt);
|
|
356
|
-
debug({ data });
|
|
357
371
|
// Fail if there are any individual message failures
|
|
358
|
-
if (data
|
|
372
|
+
if (data?.Failed && data?.Failed.length) {
|
|
359
373
|
const err = new Error('One or more message failures: ' + JSON.stringify(data.Failed));
|
|
360
374
|
err.Failed = data.Failed;
|
|
361
375
|
throw err;
|
|
@@ -363,10 +377,19 @@ async function flushMessages(qrl, opt, sendBuffer) {
|
|
|
363
377
|
// If we actually managed to flush any of them
|
|
364
378
|
if (batch.length) {
|
|
365
379
|
requestCount += 1;
|
|
366
|
-
data
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
380
|
+
if (data?.Successful) {
|
|
381
|
+
for (const { Id, MessageId } of data.Successful) {
|
|
382
|
+
const result = resultsById.get(Id);
|
|
383
|
+
const message = messagesById.get(Id);
|
|
384
|
+
result.MessageId = MessageId;
|
|
385
|
+
result.Id = Id;
|
|
386
|
+
if (message?.MessageAttributes?.QdoneDeduplicationId?.StringValue) {
|
|
387
|
+
result.QdoneDeduplicationId = message?.MessageAttributes?.QdoneDeduplicationId?.StringValue;
|
|
388
|
+
}
|
|
389
|
+
if (opt.verbose)
|
|
390
|
+
console.error(chalk_1.default.blue('Enqueued job ') + MessageId + chalk_1.default.blue(' request ' + requestCount));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
370
393
|
numFlushed += batch.length;
|
|
371
394
|
}
|
|
372
395
|
return whileNotEmpty();
|
|
@@ -379,15 +402,16 @@ exports.flushMessages = flushMessages;
|
|
|
379
402
|
// Automaticaly flushes if queue has >= 10 messages.
|
|
380
403
|
// Returns number of messages flushed.
|
|
381
404
|
//
|
|
405
|
+
const debugAddMessage = (0, debug_1.default)('qdone:enqueue:addMessage');
|
|
382
406
|
async function addMessage(qrl, command, messageIndex, opt, sendBuffer, messageOptions) {
|
|
383
407
|
const message = formatMessage(command, messageIndex, opt, messageOptions);
|
|
384
408
|
sendBuffer[qrl] = sendBuffer[qrl] || [];
|
|
385
409
|
sendBuffer[qrl].push(message);
|
|
386
|
-
|
|
410
|
+
debugAddMessage({ location: 'addMessage', messageIndex, sendBuffer });
|
|
387
411
|
if (sendBuffer[qrl].length >= 10) {
|
|
388
412
|
return flushMessages(qrl, opt, sendBuffer);
|
|
389
413
|
}
|
|
390
|
-
return 0;
|
|
414
|
+
return { numFlushed: 0, results: [] };
|
|
391
415
|
}
|
|
392
416
|
exports.addMessage = addMessage;
|
|
393
417
|
//
|
|
@@ -421,6 +445,7 @@ async function enqueueBatch(pairs, options) {
|
|
|
421
445
|
(0, node_1.setExtra)({ qdoneOperation: 'enqueueBatch', args: { pairs, opt } });
|
|
422
446
|
}
|
|
423
447
|
try {
|
|
448
|
+
const allResults = [];
|
|
424
449
|
// Find unique queues so we can pre-fetch qrls. We do this so that all
|
|
425
450
|
// queues are created prior to going through our flush logic
|
|
426
451
|
const normalizedPairs = pairs.map(({ queue, command, messageOptions }) => ({
|
|
@@ -443,18 +468,23 @@ async function enqueueBatch(pairs, options) {
|
|
|
443
468
|
let initialFlushTotal = 0;
|
|
444
469
|
for (const { qname, command, messageOptions } of normalizedPairs) {
|
|
445
470
|
const qrl = await getOrCreateQueue(qname, opt);
|
|
446
|
-
|
|
471
|
+
const { numFlushed, results } = await addMessage(qrl, command, messageIndex++, opt, sendBuffer, messageOptions);
|
|
472
|
+
initialFlushTotal += numFlushed;
|
|
473
|
+
allResults.push(...results);
|
|
447
474
|
}
|
|
448
475
|
// And flush any remaining messages
|
|
449
476
|
const extraFlushPromises = [];
|
|
450
477
|
for (const qrl in sendBuffer) {
|
|
451
478
|
extraFlushPromises.push(flushMessages(qrl, opt, sendBuffer));
|
|
452
479
|
}
|
|
453
|
-
|
|
454
|
-
const
|
|
480
|
+
let extraFlushTotal = 0;
|
|
481
|
+
for (const { numFlushed, results } of await Promise.all(extraFlushPromises)) {
|
|
482
|
+
allResults.push(...results);
|
|
483
|
+
extraFlushTotal += numFlushed;
|
|
484
|
+
}
|
|
455
485
|
const totalFlushed = initialFlushTotal + extraFlushTotal;
|
|
456
486
|
debug({ initialFlushTotal, extraFlushTotal, totalFlushed });
|
|
457
|
-
return totalFlushed;
|
|
487
|
+
return { numFlushed: totalFlushed, results: allResults };
|
|
458
488
|
}
|
|
459
489
|
catch (e) {
|
|
460
490
|
console.log(e);
|
package/package.json
CHANGED
package/src/enqueue.js
CHANGED
|
@@ -332,11 +332,27 @@ let requestCount = 0
|
|
|
332
332
|
// Returns number of messages flushed.
|
|
333
333
|
//
|
|
334
334
|
export async function flushMessages (qrl, opt, sendBuffer) {
|
|
335
|
-
debug('flushMessages', qrl)
|
|
335
|
+
debug('flushMessages', { qrl, sendBuffer })
|
|
336
|
+
// Track our outgoing messages to map with Failed / Successful returns
|
|
337
|
+
const messagesById = new Map()
|
|
338
|
+
const resultsById = new Map()
|
|
339
|
+
const results = []
|
|
340
|
+
if (sendBuffer[qrl] && sendBuffer[qrl].length) {
|
|
341
|
+
for (const message of sendBuffer[qrl]) {
|
|
342
|
+
const Id = message.Id
|
|
343
|
+
messagesById.set(Id, message)
|
|
344
|
+
// Pre-prepare results
|
|
345
|
+
const result = { Id }
|
|
346
|
+
resultsById.set(Id, result)
|
|
347
|
+
results.push(result)
|
|
348
|
+
}
|
|
349
|
+
}
|
|
336
350
|
// Flush until empty
|
|
337
351
|
let numFlushed = 0
|
|
338
352
|
async function whileNotEmpty () {
|
|
339
|
-
if (!(sendBuffer[qrl] && sendBuffer[qrl].length))
|
|
353
|
+
if (!(sendBuffer[qrl] && sendBuffer[qrl].length)) {
|
|
354
|
+
return { numFlushed, results }
|
|
355
|
+
}
|
|
340
356
|
// Construct batch until full
|
|
341
357
|
const batch = []
|
|
342
358
|
let nextSize = JSON.stringify(sendBuffer[qrl][0]).length
|
|
@@ -350,10 +366,9 @@ export async function flushMessages (qrl, opt, sendBuffer) {
|
|
|
350
366
|
|
|
351
367
|
// Send batch
|
|
352
368
|
const data = await sendMessageBatch(qrl, batch, opt)
|
|
353
|
-
debug({ data })
|
|
354
369
|
|
|
355
370
|
// Fail if there are any individual message failures
|
|
356
|
-
if (data
|
|
371
|
+
if (data?.Failed && data?.Failed.length) {
|
|
357
372
|
const err = new Error('One or more message failures: ' + JSON.stringify(data.Failed))
|
|
358
373
|
err.Failed = data.Failed
|
|
359
374
|
throw err
|
|
@@ -362,9 +377,18 @@ export async function flushMessages (qrl, opt, sendBuffer) {
|
|
|
362
377
|
// If we actually managed to flush any of them
|
|
363
378
|
if (batch.length) {
|
|
364
379
|
requestCount += 1
|
|
365
|
-
data
|
|
366
|
-
|
|
367
|
-
|
|
380
|
+
if (data?.Successful) {
|
|
381
|
+
for (const { Id, MessageId } of data.Successful) {
|
|
382
|
+
const result = resultsById.get(Id)
|
|
383
|
+
const message = messagesById.get(Id)
|
|
384
|
+
result.MessageId = MessageId
|
|
385
|
+
result.Id = Id
|
|
386
|
+
if (message?.MessageAttributes?.QdoneDeduplicationId?.StringValue) {
|
|
387
|
+
result.QdoneDeduplicationId = message?.MessageAttributes?.QdoneDeduplicationId?.StringValue
|
|
388
|
+
}
|
|
389
|
+
if (opt.verbose) console.error(chalk.blue('Enqueued job ') + MessageId + chalk.blue(' request ' + requestCount))
|
|
390
|
+
}
|
|
391
|
+
}
|
|
368
392
|
numFlushed += batch.length
|
|
369
393
|
}
|
|
370
394
|
return whileNotEmpty()
|
|
@@ -377,15 +401,16 @@ export async function flushMessages (qrl, opt, sendBuffer) {
|
|
|
377
401
|
// Automaticaly flushes if queue has >= 10 messages.
|
|
378
402
|
// Returns number of messages flushed.
|
|
379
403
|
//
|
|
404
|
+
const debugAddMessage = Debug('qdone:enqueue:addMessage')
|
|
380
405
|
export async function addMessage (qrl, command, messageIndex, opt, sendBuffer, messageOptions) {
|
|
381
406
|
const message = formatMessage(command, messageIndex, opt, messageOptions)
|
|
382
407
|
sendBuffer[qrl] = sendBuffer[qrl] || []
|
|
383
408
|
sendBuffer[qrl].push(message)
|
|
384
|
-
|
|
409
|
+
debugAddMessage({ location: 'addMessage', messageIndex, sendBuffer })
|
|
385
410
|
if (sendBuffer[qrl].length >= 10) {
|
|
386
411
|
return flushMessages(qrl, opt, sendBuffer)
|
|
387
412
|
}
|
|
388
|
-
return 0
|
|
413
|
+
return { numFlushed: 0, results: [] }
|
|
389
414
|
}
|
|
390
415
|
|
|
391
416
|
//
|
|
@@ -418,6 +443,7 @@ export async function enqueueBatch (pairs, options) {
|
|
|
418
443
|
setExtra({ qdoneOperation: 'enqueueBatch', args: { pairs, opt } })
|
|
419
444
|
}
|
|
420
445
|
try {
|
|
446
|
+
const allResults = []
|
|
421
447
|
// Find unique queues so we can pre-fetch qrls. We do this so that all
|
|
422
448
|
// queues are created prior to going through our flush logic
|
|
423
449
|
const normalizedPairs = pairs.map(({ queue, command, messageOptions }) => ({
|
|
@@ -441,7 +467,9 @@ export async function enqueueBatch (pairs, options) {
|
|
|
441
467
|
let initialFlushTotal = 0
|
|
442
468
|
for (const { qname, command, messageOptions } of normalizedPairs) {
|
|
443
469
|
const qrl = await getOrCreateQueue(qname, opt)
|
|
444
|
-
|
|
470
|
+
const { numFlushed, results } = await addMessage(qrl, command, messageIndex++, opt, sendBuffer, messageOptions)
|
|
471
|
+
initialFlushTotal += numFlushed
|
|
472
|
+
allResults.push(...results)
|
|
445
473
|
}
|
|
446
474
|
|
|
447
475
|
// And flush any remaining messages
|
|
@@ -449,11 +477,14 @@ export async function enqueueBatch (pairs, options) {
|
|
|
449
477
|
for (const qrl in sendBuffer) {
|
|
450
478
|
extraFlushPromises.push(flushMessages(qrl, opt, sendBuffer))
|
|
451
479
|
}
|
|
452
|
-
|
|
453
|
-
const
|
|
480
|
+
let extraFlushTotal = 0
|
|
481
|
+
for (const { numFlushed, results } of await Promise.all(extraFlushPromises)) {
|
|
482
|
+
allResults.push(...results)
|
|
483
|
+
extraFlushTotal += numFlushed
|
|
484
|
+
}
|
|
454
485
|
const totalFlushed = initialFlushTotal + extraFlushTotal
|
|
455
486
|
debug({ initialFlushTotal, extraFlushTotal, totalFlushed })
|
|
456
|
-
return totalFlushed
|
|
487
|
+
return { numFlushed: totalFlushed, results: allResults }
|
|
457
488
|
} catch (e) {
|
|
458
489
|
console.log(e)
|
|
459
490
|
throw e
|