keuss 1.6.10 → 1.6.13
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/Pipeline/Queue.js +12 -2
- package/Queue.js +18 -8
- package/TODO +0 -1
- package/backends/bucket-mongo-safe.js +42 -44
- package/backends/bucket-mongo.js +6 -8
- package/examples/snippets/06-random-consumer-producer.js +5 -5
- package/package.json +6 -6
- package/test/backends_bucket-at-least-once.js +43 -35
- package/test/backends_deadletter.js +10 -1
- package/.nyc_output/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
- package/.nyc_output/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
- package/.nyc_output/processinfo/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
- package/.nyc_output/processinfo/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -79
- package/coverage/index.html +0 -162
- package/coverage/keuss/Pipeline/BaseLink.js.html +0 -636
- package/coverage/keuss/Pipeline/Builder.js.html +0 -615
- package/coverage/keuss/Pipeline/ChoiceLink.js.html +0 -294
- package/coverage/keuss/Pipeline/DirectLink.js.html +0 -231
- package/coverage/keuss/Pipeline/Pipeline.js.html +0 -258
- package/coverage/keuss/Pipeline/Queue.js.html +0 -939
- package/coverage/keuss/Pipeline/Sink.js.html +0 -147
- package/coverage/keuss/Pipeline/index.html +0 -175
- package/coverage/keuss/QFactory-MongoDB-defaults.js.html +0 -219
- package/coverage/keuss/QFactory.js.html +0 -459
- package/coverage/keuss/Queue.js.html +0 -2274
- package/coverage/keuss/Signal.js.html +0 -312
- package/coverage/keuss/Stats.js.html +0 -174
- package/coverage/keuss/backends/bucket-mongo-safe.js.html +0 -2952
- package/coverage/keuss/backends/bucket-mongo.js.html +0 -1167
- package/coverage/keuss/backends/index.html +0 -175
- package/coverage/keuss/backends/mongo.js.html +0 -897
- package/coverage/keuss/backends/pl-mongo.js.html +0 -723
- package/coverage/keuss/backends/ps-mongo.js.html +0 -1038
- package/coverage/keuss/backends/redis-list.js.html +0 -513
- package/coverage/keuss/backends/redis-oq.js.html +0 -543
- package/coverage/keuss/bench/all-mongo.js.html +0 -393
- package/coverage/keuss/bench/index.html +0 -149
- package/coverage/keuss/bench/multi-q.js.html +0 -324
- package/coverage/keuss/bench/redis-oq-consumer-producer.js.html +0 -225
- package/coverage/keuss/bench/redis-oq-consumer.js.html +0 -189
- package/coverage/keuss/bench/redis-oq-producer.js.html +0 -198
- package/coverage/keuss/docusaurus/.docusaurus/client-modules.js.html +0 -93
- package/coverage/keuss/docusaurus/.docusaurus/docusaurus.config.js.html +0 -402
- package/coverage/keuss/docusaurus/.docusaurus/index.html +0 -136
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/01a85c17.4e57aa0a.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/09d5ad39.3009117f.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1.12cf3eb8.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/12559443.a244228c.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/17896441.5efb3558.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1be78505.f9c04817.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/2.4e2dc02c.js.html +0 -72
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3.d549a05d.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/36.db0e809a.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/37637b3c.28c0900b.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3d8d21df.2228b429.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/45a5cd1f.951da354.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/52c38f7a.785707bc.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/57ffbe3d.04d3e53e.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/5f7c35e9.2fa77599.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6299bd84.ec197a3e.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6875c492.cdf3e939.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6beec1d2.6873e708.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/7b786ad4.bbce08e6.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8070e160.400a4e57.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/88c93c54.e868a433.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8d3e6f9e.aadf6d32.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9bc74468.516633c5.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9beb87c2.71e3744d.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a3732fac.b0f98dbf.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a6aa9e1f.6ac55e6c.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/baf0d4a2.b50efd2d.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/c4f5d8e4.e9dfd999.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/ccc49370.1831890b.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/d4942345.7d23b349.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e2244795.4ea3d168.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e64fe266.308265e8.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/f78725cc.5f3e115d.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/fa8d8063.2312a332.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/index.html +0 -565
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/main.66f1008c.js.html +0 -72
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/runtime~main.7d73b048.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/styles.b5ee3016.js.html +0 -69
- package/coverage/keuss/docusaurus/.docusaurus/registry.js.html +0 -165
- package/coverage/keuss/docusaurus/.docusaurus/routes.js.html +0 -447
- package/coverage/keuss/docusaurus/build/01a85c17.4e57aa0a.js.html +0 -69
- package/coverage/keuss/docusaurus/build/09d5ad39.3009117f.js.html +0 -69
- package/coverage/keuss/docusaurus/build/1.12cf3eb8.js.html +0 -69
- package/coverage/keuss/docusaurus/build/12559443.a244228c.js.html +0 -69
- package/coverage/keuss/docusaurus/build/17896441.5efb3558.js.html +0 -69
- package/coverage/keuss/docusaurus/build/1be78505.f9c04817.js.html +0 -69
- package/coverage/keuss/docusaurus/build/2.4e2dc02c.js.html +0 -72
- package/coverage/keuss/docusaurus/build/3.d549a05d.js.html +0 -69
- package/coverage/keuss/docusaurus/build/36.db0e809a.js.html +0 -69
- package/coverage/keuss/docusaurus/build/37637b3c.28c0900b.js.html +0 -69
- package/coverage/keuss/docusaurus/build/3d8d21df.2228b429.js.html +0 -69
- package/coverage/keuss/docusaurus/build/45a5cd1f.951da354.js.html +0 -69
- package/coverage/keuss/docusaurus/build/52c38f7a.785707bc.js.html +0 -69
- package/coverage/keuss/docusaurus/build/57ffbe3d.04d3e53e.js.html +0 -69
- package/coverage/keuss/docusaurus/build/5f7c35e9.2fa77599.js.html +0 -69
- package/coverage/keuss/docusaurus/build/6299bd84.ec197a3e.js.html +0 -69
- package/coverage/keuss/docusaurus/build/6875c492.cdf3e939.js.html +0 -69
- package/coverage/keuss/docusaurus/build/6beec1d2.6873e708.js.html +0 -69
- package/coverage/keuss/docusaurus/build/7b786ad4.bbce08e6.js.html +0 -69
- package/coverage/keuss/docusaurus/build/8070e160.400a4e57.js.html +0 -69
- package/coverage/keuss/docusaurus/build/88c93c54.e868a433.js.html +0 -69
- package/coverage/keuss/docusaurus/build/8d3e6f9e.aadf6d32.js.html +0 -69
- package/coverage/keuss/docusaurus/build/9bc74468.516633c5.js.html +0 -69
- package/coverage/keuss/docusaurus/build/9beb87c2.71e3744d.js.html +0 -69
- package/coverage/keuss/docusaurus/build/a3732fac.b0f98dbf.js.html +0 -69
- package/coverage/keuss/docusaurus/build/a6aa9e1f.6ac55e6c.js.html +0 -69
- package/coverage/keuss/docusaurus/build/baf0d4a2.b50efd2d.js.html +0 -69
- package/coverage/keuss/docusaurus/build/c4f5d8e4.e9dfd999.js.html +0 -69
- package/coverage/keuss/docusaurus/build/ccc49370.1831890b.js.html +0 -69
- package/coverage/keuss/docusaurus/build/d4942345.7d23b349.js.html +0 -69
- package/coverage/keuss/docusaurus/build/e2244795.4ea3d168.js.html +0 -69
- package/coverage/keuss/docusaurus/build/e64fe266.308265e8.js.html +0 -69
- package/coverage/keuss/docusaurus/build/f78725cc.5f3e115d.js.html +0 -69
- package/coverage/keuss/docusaurus/build/fa8d8063.2312a332.js.html +0 -69
- package/coverage/keuss/docusaurus/build/index.html +0 -565
- package/coverage/keuss/docusaurus/build/main.66f1008c.js.html +0 -72
- package/coverage/keuss/docusaurus/build/runtime~main.7d73b048.js.html +0 -69
- package/coverage/keuss/docusaurus/build/styles.b5ee3016.js.html +0 -69
- package/coverage/keuss/docusaurus/docusaurus.config.js.html +0 -360
- package/coverage/keuss/docusaurus/index.html +0 -110
- package/coverage/keuss/docusaurus/sidebars.js.html +0 -96
- package/coverage/keuss/docusaurus/src/pages/index.html +0 -97
- package/coverage/keuss/docusaurus/src/pages/index.js.html +0 -450
- package/coverage/keuss/examples/pipelines/builder/index.html +0 -97
- package/coverage/keuss/examples/pipelines/builder/index.js.html +0 -450
- package/coverage/keuss/examples/pipelines/simplest/index.html +0 -97
- package/coverage/keuss/examples/pipelines/simplest/index.js.html +0 -183
- package/coverage/keuss/examples/pipelines/simulation-fork/index.html +0 -97
- package/coverage/keuss/examples/pipelines/simulation-fork/index.js.html +0 -414
- package/coverage/keuss/examples/snippets/01-simplest-pop-push.js.html +0 -195
- package/coverage/keuss/examples/snippets/02-simplest-reserve-rollback-commit.js.html +0 -201
- package/coverage/keuss/examples/snippets/03-simplest-producer-consumer-loops.js.html +0 -300
- package/coverage/keuss/examples/snippets/04-bucket-mongo-safe-insert-reserve-commit.js.html +0 -303
- package/coverage/keuss/examples/snippets/05-insert-reserve-rollback-deadletter.js.html +0 -384
- package/coverage/keuss/examples/snippets/06-random-consumer-producer.js.html +0 -879
- package/coverage/keuss/examples/snippets/index.html +0 -188
- package/coverage/keuss/examples/snippets/redislabs-consumer-producer.js.html +0 -201
- package/coverage/keuss/examples/snippets/with-redis-stats-and-signaller-consumer-producer.js.html +0 -222
- package/coverage/keuss/examples/webhooks/app.js.html +0 -279
- package/coverage/keuss/examples/webhooks/consumer.js.html +0 -363
- package/coverage/keuss/examples/webhooks/index.html +0 -123
- package/coverage/keuss/examples/webhooks/index.js.html +0 -234
- package/coverage/keuss/index.html +0 -149
- package/coverage/keuss/playground/index.html +0 -136
- package/coverage/keuss/playground/pl-rollback.js.html +0 -234
- package/coverage/keuss/playground/pl1.js.html +0 -291
- package/coverage/keuss/playground/q1.js.html +0 -168
- package/coverage/keuss/playground/simple-pl.js.html +0 -195
- package/coverage/keuss/signal/index.html +0 -123
- package/coverage/keuss/signal/local.js.html +0 -306
- package/coverage/keuss/signal/mongo-capped.js.html +0 -378
- package/coverage/keuss/signal/redis-pubsub.js.html +0 -399
- package/coverage/keuss/stats/index.html +0 -123
- package/coverage/keuss/stats/mem.js.html +0 -519
- package/coverage/keuss/stats/mongo.js.html +0 -930
- package/coverage/keuss/stats/redis.js.html +0 -894
- package/coverage/keuss/utils/RedisConn.js.html +0 -150
- package/coverage/keuss/utils/RedisOrderedQueue.js.html +0 -864
- package/coverage/keuss/utils/index.html +0 -110
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -170
- package/docusaurus/README.md +0 -33
- package/docusaurus/babel.config.js +0 -3
- package/docusaurus/blog/2020-08-04-welcome.md +0 -10
- package/docusaurus/docs/about.md +0 -14
- package/docusaurus/docs/api/factory.md +0 -102
- package/docusaurus/docs/api/queue.md +0 -247
- package/docusaurus/docs/api/signal.md +0 -38
- package/docusaurus/docs/api/stats.md +0 -37
- package/docusaurus/docs/changelog.md +0 -51
- package/docusaurus/docs/concepts.md +0 -116
- package/docusaurus/docs/examples.md +0 -10
- package/docusaurus/docs/quickstart.md +0 -195
- package/docusaurus/docs/style-guide.md +0 -202
- package/docusaurus/docs/usage/buckets.md +0 -43
- package/docusaurus/docs/usage/no-signaller.md +0 -16
- package/docusaurus/docs/usage/pipelines/about.md +0 -128
- package/docusaurus/docs/usage/pipelines/building.md +0 -158
- package/docusaurus/docs/usage/pipelines/examples.md +0 -10
- package/docusaurus/docs/usage/pipelines/processors.md +0 -187
- package/docusaurus/docs/usage/putting-all-together.md +0 -153
- package/docusaurus/docs/usage/redis-conns.md +0 -70
- package/docusaurus/docs/usage/shutdown.md +0 -11
- package/docusaurus/docusaurus.config.js +0 -96
- package/docusaurus/package.json +0 -33
- package/docusaurus/sidebars.js +0 -44
- package/docusaurus/src/css/custom.css +0 -25
- package/docusaurus/src/pages/index.js +0 -127
- package/docusaurus/src/pages/styles.module.css +0 -37
- package/docusaurus/static/.nojekyll +0 -0
- package/docusaurus/static/img/favicon.ico +0 -0
- package/docusaurus/static/img/logo.svg +0 -1
- package/docusaurus/yarn.lock +0 -8384
package/Pipeline/Queue.js
CHANGED
|
@@ -167,6 +167,10 @@ class PipelinedMongoQueue extends Queue {
|
|
|
167
167
|
this._embed_update_for_payload (upd, opts.update);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
if (opts.hdrs) {
|
|
171
|
+
_.each (opts.hdrs, (v, k) => upd.$set['hdrs.' + k] = v);
|
|
172
|
+
}
|
|
173
|
+
|
|
170
174
|
this._col.updateOne (q, upd, {}, (err, result) => {
|
|
171
175
|
if (err) return callback (err);
|
|
172
176
|
callback (null, result && (result.modifiedCount == 1));
|
|
@@ -274,9 +278,15 @@ class PipelinedMongoQueue extends Queue {
|
|
|
274
278
|
|
|
275
279
|
|
|
276
280
|
//////////////////////////////////////////////
|
|
277
|
-
//
|
|
281
|
+
// redefinition from Queue
|
|
278
282
|
_move_to_deadletter (obj, cb) {
|
|
279
|
-
|
|
283
|
+
const hdrs = {
|
|
284
|
+
'x-dl-from-queue': this.name (),
|
|
285
|
+
'x-dl-t': new Date().toISOString (),
|
|
286
|
+
'x-dl-tries': obj.tries
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
this.pl_step (obj._id, this._factory.deadletter_queue (), {hdrs}, (err, res) => {
|
|
280
290
|
if (err) return cb (err);
|
|
281
291
|
this._stats.incr ('get');
|
|
282
292
|
this._factory.deadletter_queue ()._stats.incr ('put');
|
package/Queue.js
CHANGED
|
@@ -433,14 +433,14 @@ class Queue {
|
|
|
433
433
|
let id = (obj._id ? obj._id : obj);
|
|
434
434
|
|
|
435
435
|
if (
|
|
436
|
-
(obj.tries) &&
|
|
437
|
-
(this._factory.deadletter_queue ()) &&
|
|
438
|
-
(this._factory.max_ko ()) &&
|
|
439
|
-
(obj.tries > this._factory.max_ko ())
|
|
436
|
+
(obj.tries) && // only if we got tries
|
|
437
|
+
(this._factory.deadletter_queue ()) && // AND the factory has a deadletter queue
|
|
438
|
+
(this._factory.max_ko ()) && // AND thee's a max ko attempts
|
|
439
|
+
(obj.tries > this._factory.max_ko ()) && // AND we got enough tries
|
|
440
|
+
(this.name () != '__deadletter__') // and this queue is not deadletter already
|
|
440
441
|
) {
|
|
441
442
|
debug ('%s: too many retries (%d), moving to deadletter', obj._id, obj.tries);
|
|
442
443
|
this._move_to_deadletter (obj, cb);
|
|
443
|
-
// TODO add from-what-queue to deadletter elements
|
|
444
444
|
}
|
|
445
445
|
else {
|
|
446
446
|
this.rollback (id, next_t, (err, res) => {
|
|
@@ -537,13 +537,15 @@ class Queue {
|
|
|
537
537
|
//////////////////////////////////
|
|
538
538
|
async.parallel ({
|
|
539
539
|
type: cb => cb (null, this.type()),
|
|
540
|
+
capabilities: cb => cb (null, this.capabilities ()),
|
|
541
|
+
factory: cb => cb (null, this._factory.to_descriptor_obj ()),
|
|
540
542
|
stats: cb => this.stats (cb),
|
|
541
543
|
paused: cb => this.paused (cb),
|
|
542
544
|
next_mature_t: cb => this.next_t (cb),
|
|
543
545
|
size: cb => this.size (cb),
|
|
544
546
|
totalSize: cb => this.totalSize (cb),
|
|
545
547
|
schedSize: cb => this.schedSize (cb),
|
|
546
|
-
resvSize: cb => this.resvSize (cb)
|
|
548
|
+
resvSize: cb => this.resvSize (cb)
|
|
547
549
|
}, cb);
|
|
548
550
|
}
|
|
549
551
|
|
|
@@ -710,15 +712,23 @@ class Queue {
|
|
|
710
712
|
/////////////////////////////////////////////
|
|
711
713
|
_move_to_deadletter (obj, cb) {
|
|
712
714
|
// commit and move to deadletter
|
|
713
|
-
// ALSO NOT IN deadletter queue (to void loop)
|
|
714
715
|
// commit element in origin queue, push in deadletter afterwards
|
|
716
|
+
const opts = {
|
|
717
|
+
hdrs: _.clone (obj.hdrs || {})
|
|
718
|
+
};
|
|
719
|
+
|
|
720
|
+
// add some extra x-dl-* headers
|
|
721
|
+
opts.hdrs['x-dl-from-queue'] = this.name ();
|
|
722
|
+
opts.hdrs['x-dl-t'] = new Date().toISOString ();
|
|
723
|
+
opts.hdrs['x-dl-tries'] = obj.tries;
|
|
724
|
+
|
|
715
725
|
this.commit (obj._id, err => {
|
|
716
726
|
if (err) {
|
|
717
727
|
debug ('while committing %s prior to moving to deadletter: %j', obj._id, err);
|
|
718
728
|
return cb (err);
|
|
719
729
|
}
|
|
720
730
|
|
|
721
|
-
this._factory.deadletter_queue ().push (obj.payload, (err, res) => {
|
|
731
|
+
this._factory.deadletter_queue ().push (obj.payload, opts, (err, res) => {
|
|
722
732
|
if (err) {
|
|
723
733
|
debug ('while moving %s to deadletter: %j', obj._id, err);
|
|
724
734
|
return cb (err, 'deadletter');
|
package/TODO
CHANGED
|
@@ -133,11 +133,13 @@ class Bucket {
|
|
|
133
133
|
q: q
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
-
if ((res && res.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
if ((res && res.deletedCount) != 1) {
|
|
137
|
+
return cb({
|
|
138
|
+
err: 'Bucket flush: exactly one must be deleted',
|
|
139
|
+
e: err,
|
|
140
|
+
q: q
|
|
141
|
+
});
|
|
142
|
+
}
|
|
141
143
|
|
|
142
144
|
debug ('Bucket: deleted whole bucket %o', q);
|
|
143
145
|
cb (null, null);
|
|
@@ -216,7 +218,7 @@ class Bucket {
|
|
|
216
218
|
q: q
|
|
217
219
|
});
|
|
218
220
|
|
|
219
|
-
if (
|
|
221
|
+
if (res && (res.modifiedCount != 1)) return cb({
|
|
220
222
|
err: 'Bucket flush: exactly one must be updated',
|
|
221
223
|
e: err,
|
|
222
224
|
q: q,
|
|
@@ -650,17 +652,15 @@ class BucketMongoSafeQueue extends Queue {
|
|
|
650
652
|
//////////////////////////////////
|
|
651
653
|
// queue size including non-mature elements
|
|
652
654
|
totalSize (callback) {
|
|
653
|
-
this._col.aggregate ([
|
|
655
|
+
const cursor = this._col.aggregate ([
|
|
654
656
|
{$group:{_id:'t', v: {$sum: '$n'}}}
|
|
655
|
-
]
|
|
656
|
-
if (err) return callback (err);
|
|
657
|
+
]);
|
|
657
658
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
});
|
|
659
|
+
cursor.toArray ((err, res) => {
|
|
660
|
+
debug ('calculating totalSize: aggregation pipeline returns %o', res);
|
|
661
|
+
if (err) return callback (err);
|
|
662
|
+
if (res.length == 0) return callback (null, 0);
|
|
663
|
+
callback (null, res[0].v);
|
|
664
664
|
});
|
|
665
665
|
}
|
|
666
666
|
|
|
@@ -668,18 +668,16 @@ class BucketMongoSafeQueue extends Queue {
|
|
|
668
668
|
//////////////////////////////////
|
|
669
669
|
// queue size NOT including non-mature elements
|
|
670
670
|
size (callback) {
|
|
671
|
-
this._col.aggregate ([
|
|
671
|
+
const cursor = this._col.aggregate ([
|
|
672
672
|
{$match: {mature: {$lte: Queue.now ()}}},
|
|
673
673
|
{$group:{_id:'t', v: {$sum: '$n'}}}
|
|
674
|
-
]
|
|
675
|
-
if (err) return callback (err);
|
|
674
|
+
]);
|
|
676
675
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
});
|
|
676
|
+
cursor.toArray ((err, res) => {
|
|
677
|
+
debug ('calculating size: aggregation pipeline returns %o', res);
|
|
678
|
+
if (err) return callback (err);
|
|
679
|
+
if (res.length == 0) return callback (null, 0);
|
|
680
|
+
callback (null, res[0].v);
|
|
683
681
|
});
|
|
684
682
|
}
|
|
685
683
|
|
|
@@ -687,42 +685,39 @@ class BucketMongoSafeQueue extends Queue {
|
|
|
687
685
|
//////////////////////////////////
|
|
688
686
|
// queue size of non-mature elements only
|
|
689
687
|
schedSize (callback) {
|
|
690
|
-
this._col.aggregate ([
|
|
688
|
+
const cursor = this._col.aggregate ([
|
|
691
689
|
{$match: {
|
|
692
690
|
mature: {$gt: Queue.now ()},
|
|
693
691
|
reserved: {$exists: false}
|
|
694
692
|
}},
|
|
695
693
|
{$group:{_id:'t', v: {$sum: '$n'}}}
|
|
696
|
-
]
|
|
697
|
-
if (err) return callback (err);
|
|
694
|
+
]);
|
|
698
695
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
});
|
|
696
|
+
cursor.toArray ((err, res) => {
|
|
697
|
+
debug ('calculating schedSize: aggregation pipeline returns %o', res);
|
|
698
|
+
if (err) return callback (err);
|
|
699
|
+
if (res.length == 0) return callback (null, 0);
|
|
700
|
+
callback (null, res[0].v);
|
|
705
701
|
});
|
|
706
702
|
}
|
|
707
703
|
|
|
704
|
+
|
|
708
705
|
//////////////////////////////////
|
|
709
706
|
// queue size of non-mature elements only
|
|
710
707
|
resvSize (callback) {
|
|
711
|
-
this._col.aggregate ([
|
|
708
|
+
const cursor = this._col.aggregate ([
|
|
712
709
|
{$match: {
|
|
713
710
|
mature: {$gt: Queue.now ()},
|
|
714
711
|
reserved: {$exists: true}
|
|
715
712
|
}},
|
|
716
713
|
{$group:{_id:'t', v: {$sum: '$n'}}}
|
|
717
|
-
]
|
|
718
|
-
if (err) return callback (err);
|
|
714
|
+
]);
|
|
719
715
|
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
});
|
|
716
|
+
cursor.toArray ((err, res) => {
|
|
717
|
+
debug ('calculating resvSize: aggregation pipeline returns %o', res);
|
|
718
|
+
if (err) return callback (err);
|
|
719
|
+
if (res.length == 0) return callback (null, 0);
|
|
720
|
+
callback (null, res[0].v);
|
|
726
721
|
});
|
|
727
722
|
}
|
|
728
723
|
|
|
@@ -730,7 +725,11 @@ class BucketMongoSafeQueue extends Queue {
|
|
|
730
725
|
/////////////////////////////////////////
|
|
731
726
|
// get element from queue
|
|
732
727
|
next_t (callback) {
|
|
733
|
-
this._col.
|
|
728
|
+
this._col.findOne ({}, {
|
|
729
|
+
sort: {mature:1},
|
|
730
|
+
projection: {mature: 1}
|
|
731
|
+
},
|
|
732
|
+
(err, result) => {
|
|
734
733
|
if (err) return callback (err);
|
|
735
734
|
debug ('obtaining next_t: got %o', result && result.mature);
|
|
736
735
|
callback (null, result && result.mature);
|
|
@@ -738,7 +737,6 @@ class BucketMongoSafeQueue extends Queue {
|
|
|
738
737
|
}
|
|
739
738
|
|
|
740
739
|
|
|
741
|
-
|
|
742
740
|
//////////////////////////////////////////////
|
|
743
741
|
// remove by id
|
|
744
742
|
remove (id, callback) {
|
package/backends/bucket-mongo.js
CHANGED
|
@@ -205,16 +205,14 @@ class BucketMongoQueue extends Queue {
|
|
|
205
205
|
// queue size including non-mature elements
|
|
206
206
|
totalSize (callback) {
|
|
207
207
|
//////////////////////////////////
|
|
208
|
-
this._col.aggregate ([
|
|
208
|
+
const cursor = this._col.aggregate ([
|
|
209
209
|
{$group:{_id:'t', v: {$sum: '$n'}}}
|
|
210
|
-
]
|
|
211
|
-
if (err) return callback (err);
|
|
210
|
+
]);
|
|
212
211
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
});
|
|
212
|
+
cursor.toArray ((err, res) => {
|
|
213
|
+
if (err) return callback (err);
|
|
214
|
+
if (res.length == 0) return callback (null, 0);
|
|
215
|
+
callback (null, res[0].v);
|
|
218
216
|
});
|
|
219
217
|
}
|
|
220
218
|
|
|
@@ -26,10 +26,10 @@ var factory_opts = {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
// test dimensions: elems to produce and consume, number of consumers, number of producers
|
|
29
|
-
const num_elems =
|
|
29
|
+
const num_elems = 1000000;
|
|
30
30
|
const num_producers = 3;
|
|
31
31
|
const num_consumers = 7;
|
|
32
|
-
const commit_likelihood =
|
|
32
|
+
const commit_likelihood = 75;
|
|
33
33
|
|
|
34
34
|
// stats holder
|
|
35
35
|
var selfs = {
|
|
@@ -223,12 +223,12 @@ MQ (factory_opts, function (err, factory) {
|
|
|
223
223
|
var q = factory.queue ('test_queue_456', q_opts);
|
|
224
224
|
|
|
225
225
|
var timer = setInterval (() => {
|
|
226
|
-
console.log ('**** state: %
|
|
226
|
+
console.log ('**** state: %o', _.map (shareds, (v, k) => {return {cnt: v.push_count || v.pop_count, max: v.push_max || v.pop_max }}));
|
|
227
227
|
|
|
228
228
|
console.log ('das pop %d, ko %d, ok %d', das_pop, das_ko, das_ok);
|
|
229
229
|
|
|
230
230
|
q.status ((err ,res) => {
|
|
231
|
-
console.log ('**** status: %
|
|
231
|
+
console.log ('**** status: %o', res);
|
|
232
232
|
});
|
|
233
233
|
}, 2000);
|
|
234
234
|
|
|
@@ -263,7 +263,7 @@ MQ (factory_opts, function (err, factory) {
|
|
|
263
263
|
clearInterval (timer);
|
|
264
264
|
|
|
265
265
|
q.status ((err ,res) => {
|
|
266
|
-
console.log ('**** status: %
|
|
266
|
+
console.log ('**** status: %o', res);
|
|
267
267
|
q.drain (() => factory.close ());
|
|
268
268
|
});
|
|
269
269
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "keuss",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.13",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"queue",
|
|
6
6
|
"persistent",
|
|
@@ -26,19 +26,19 @@
|
|
|
26
26
|
},
|
|
27
27
|
"license": "GPL-3.0",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@nodebb/mubsub": "~1.
|
|
29
|
+
"@nodebb/mubsub": "~1.8.0",
|
|
30
30
|
"async": "~3.2.3",
|
|
31
31
|
"async-lock": "~1.3.1",
|
|
32
|
-
"debug": "~4.3.
|
|
33
|
-
"ioredis": "~
|
|
32
|
+
"debug": "~4.3.4",
|
|
33
|
+
"ioredis": "~5.0.4",
|
|
34
34
|
"lodash": "~4.17.21",
|
|
35
35
|
"mitt": "~3.0.0",
|
|
36
|
-
"mongodb": "~
|
|
36
|
+
"mongodb": "~4.5.0",
|
|
37
37
|
"uuid": "~8.3.2"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"chance": "~1.1.8",
|
|
41
|
-
"mocha": "~9.2.
|
|
41
|
+
"mocha": "~9.2.2",
|
|
42
42
|
"should": "~13.2.3"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
@@ -52,6 +52,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
52
52
|
function (cb) {q.totalSize (cb)},
|
|
53
53
|
function (cb) {q.next_t (cb)},
|
|
54
54
|
], function(err, results) {
|
|
55
|
+
if (err) return done (err);
|
|
55
56
|
results.should.eql ([{get: 0, put: 0, reserve: 0, commit: 0, rollback: 0, deadletter: 0}, 0, 0, null])
|
|
56
57
|
done();
|
|
57
58
|
});
|
|
@@ -67,15 +68,15 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
67
68
|
function (cb) {setTimeout (cb, 1111)},
|
|
68
69
|
function (cb) {q.size (function (err, size) {
|
|
69
70
|
size.should.equal (2);
|
|
70
|
-
cb();
|
|
71
|
+
cb(err);
|
|
71
72
|
})},
|
|
72
73
|
function (cb) {q.stats (function (err, res) {
|
|
73
74
|
res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
|
|
74
|
-
cb();
|
|
75
|
+
cb(err);
|
|
75
76
|
})},
|
|
76
77
|
function (cb) {q.next_t (function (err, res) {
|
|
77
78
|
res.getTime().should.be.approximately(new Date().getTime(), 2000);
|
|
78
|
-
cb();
|
|
79
|
+
cb(err);
|
|
79
80
|
})},
|
|
80
81
|
function (cb) {q.pop ('c1', function (err, ret) {
|
|
81
82
|
ret.payload.should.eql ({elem:1, pl:'twetrwte'});
|
|
@@ -83,11 +84,11 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
83
84
|
})},
|
|
84
85
|
function (cb) {q.size (function (err, size) {
|
|
85
86
|
size.should.equal (0);
|
|
86
|
-
cb();
|
|
87
|
+
cb(err);
|
|
87
88
|
})},
|
|
88
89
|
function (cb) {q.stats (function (err, res) {
|
|
89
90
|
res.should.eql ({get: 1, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
|
|
90
|
-
cb();
|
|
91
|
+
cb(err);
|
|
91
92
|
})},
|
|
92
93
|
function (cb) {q.pop ('c2', function (err, ret) {
|
|
93
94
|
ret.payload.should.eql ({elem:2, pl:'twetrwte'});
|
|
@@ -95,13 +96,14 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
95
96
|
})},
|
|
96
97
|
function (cb) {q.size (function (err, size) {
|
|
97
98
|
size.should.equal (0);
|
|
98
|
-
cb();
|
|
99
|
+
cb(err);
|
|
99
100
|
})},
|
|
100
101
|
function (cb) {q.stats (function (err, res) {
|
|
101
102
|
res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
|
|
102
|
-
cb();
|
|
103
|
+
cb(err);
|
|
103
104
|
})},
|
|
104
105
|
], function(err, results) {
|
|
106
|
+
if (err) return done (err);
|
|
105
107
|
q.drain();
|
|
106
108
|
done();
|
|
107
109
|
});
|
|
@@ -136,13 +138,14 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
136
138
|
})},
|
|
137
139
|
function (cb) {q.size (function (err, size) {
|
|
138
140
|
size.should.equal (0);
|
|
139
|
-
cb();
|
|
141
|
+
cb(err);
|
|
140
142
|
})},
|
|
141
143
|
function (cb) {q.stats (function (err, res) {
|
|
142
144
|
res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
|
|
143
|
-
cb();
|
|
145
|
+
cb(err);
|
|
144
146
|
})},
|
|
145
147
|
], function(err, results) {
|
|
148
|
+
if (err) return done (err);
|
|
146
149
|
q.drain();
|
|
147
150
|
done();
|
|
148
151
|
});
|
|
@@ -159,18 +162,18 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
159
162
|
(cb) => q.push ({elem:4, pl:'twetrwte'}, cb),
|
|
160
163
|
(cb) => setTimeout (cb, 666),
|
|
161
164
|
|
|
162
|
-
(cb) => q.size ((err, size) => {size.should.equal (4); cb(); }),
|
|
163
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 4, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
165
|
+
(cb) => q.size ((err, size) => {size.should.equal (4); cb(err); }),
|
|
166
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 4, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
164
167
|
|
|
165
168
|
(cb) => q.push ({elem:5, pl:'twetrwte'}, cb),
|
|
166
169
|
(cb) => q.push ({elem:6, pl:'twetrwte'}, cb),
|
|
167
170
|
(cb) => q.push ({elem:7, pl:'twetrwte'}, cb),
|
|
168
171
|
(cb) => setTimeout (cb, 666),
|
|
169
172
|
|
|
170
|
-
(cb) => q.size ((err, size) => {size.should.equal (7); cb(); }),
|
|
171
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
173
|
+
(cb) => q.size ((err, size) => {size.should.equal (7); cb(err); }),
|
|
174
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
172
175
|
|
|
173
|
-
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime(), 2000); cb(); }),
|
|
176
|
+
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime(), 2000); cb(err); }),
|
|
174
177
|
|
|
175
178
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:1, pl:'twetrwte'}); cb (err); })},
|
|
176
179
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:2, pl:'twetrwte'}); cb (err); })},
|
|
@@ -180,9 +183,10 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
180
183
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:6, pl:'twetrwte'}); cb (err); })},
|
|
181
184
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:7, pl:'twetrwte'}); cb (err); })},
|
|
182
185
|
|
|
183
|
-
(cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
|
|
184
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
186
|
+
(cb) => q.size ((err, size) => {size.should.equal (0); cb(err); }),
|
|
187
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
185
188
|
], function(err, results) {
|
|
189
|
+
if (err) return done (err);
|
|
186
190
|
q.drain();
|
|
187
191
|
done();
|
|
188
192
|
});
|
|
@@ -199,19 +203,19 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
199
203
|
(cb) => q.push ({elem:4, pl:'twetrwte'}, {delay: 4}, cb),
|
|
200
204
|
(cb) => setTimeout (cb, 700),
|
|
201
205
|
|
|
202
|
-
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 3300, 100); cb(); }),
|
|
206
|
+
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 3300, 100); cb(err); }),
|
|
203
207
|
|
|
204
208
|
(cb) => q.push ({elem:5, pl:'twetrwte'}, {delay: 2}, cb),
|
|
205
209
|
(cb) => q.push ({elem:6, pl:'twetrwte'}, {delay: 1}, cb),
|
|
206
210
|
(cb) => q.push ({elem:7, pl:'twetrwte'}, {delay: 2}, cb),
|
|
207
211
|
(cb) => setTimeout (cb, 700),
|
|
208
212
|
|
|
209
|
-
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 1300, 100); cb(); }),
|
|
213
|
+
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 1300, 100); cb(err); }),
|
|
210
214
|
|
|
211
|
-
(cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
|
|
212
|
-
(cb) => q.totalSize ((err, size) => {size.should.equal (7); cb(); }),
|
|
213
|
-
(cb) => q.schedSize ((err, size) => {size.should.equal (7); cb(); }),
|
|
214
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
215
|
+
(cb) => q.size ((err, size) => {size.should.equal (0); cb(err); }),
|
|
216
|
+
(cb) => q.totalSize ((err, size) => {size.should.equal (7); cb(err); }),
|
|
217
|
+
(cb) => q.schedSize ((err, size) => {size.should.equal (7); cb(err); }),
|
|
218
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
215
219
|
|
|
216
220
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:5, pl:'twetrwte'}); cb (err); })},
|
|
217
221
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:6, pl:'twetrwte'}); cb (err); })},
|
|
@@ -221,9 +225,10 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
221
225
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:3, pl:'twetrwte'}); cb (err); })},
|
|
222
226
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:4, pl:'twetrwte'}); cb (err); })},
|
|
223
227
|
|
|
224
|
-
(cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
|
|
225
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
228
|
+
(cb) => q.size ((err, size) => {size.should.equal (0); cb(err); }),
|
|
229
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
226
230
|
], function(err, results) {
|
|
231
|
+
if (err) return done (err);
|
|
227
232
|
q.drain();
|
|
228
233
|
done();
|
|
229
234
|
});
|
|
@@ -238,19 +243,20 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
238
243
|
(cb) => q.push ({elem:2, pl:'twetrwte'}, cb),
|
|
239
244
|
(cb) => setTimeout (cb, 700),
|
|
240
245
|
|
|
241
|
-
(cb) => q.size ((err, size) => {size.should.equal (2); cb(); }),
|
|
242
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
246
|
+
(cb) => q.size ((err, size) => {size.should.equal (2); cb(err); }),
|
|
247
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
243
248
|
|
|
244
249
|
(cb) => q.push ({elem:3, pl:'twetrwte'}, cb),
|
|
245
250
|
(cb) => setTimeout (cb, 700),
|
|
246
251
|
|
|
247
|
-
(cb) => q.size ((err, size) => {size.should.equal (3); cb(); }),
|
|
248
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 3, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
|
|
252
|
+
(cb) => q.size ((err, size) => {size.should.equal (3); cb(err); }),
|
|
253
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 3, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(err); }),
|
|
249
254
|
|
|
250
|
-
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() - 1400, 100); cb(); }),
|
|
255
|
+
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() - 1400, 100); cb(err); }),
|
|
251
256
|
|
|
252
257
|
(cb) => {
|
|
253
258
|
q.pop ('c1', {reserve: true}, (err, ret) => {
|
|
259
|
+
if (err) return cb (err);
|
|
254
260
|
ret.payload.should.eql ({elem:1, pl:'twetrwte'});
|
|
255
261
|
q.ko (ret._id, (new Date().getTime() + 5000 ), (err, res) => {
|
|
256
262
|
should (res).equal (true);
|
|
@@ -263,6 +269,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
263
269
|
|
|
264
270
|
(cb) => {
|
|
265
271
|
q.pop ('c1', {reserve: true}, (err, ret) => {
|
|
272
|
+
if (err) return cb (err);
|
|
266
273
|
ret.payload.should.eql ({elem:3, pl:'twetrwte'});
|
|
267
274
|
q.ko (ret._id, (new Date().getTime() + 3000 ), (err, res) => {
|
|
268
275
|
should (res).equal (true);
|
|
@@ -273,18 +280,19 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
|
|
|
273
280
|
|
|
274
281
|
(cb) => setTimeout (cb, 700),
|
|
275
282
|
|
|
276
|
-
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 2500, 500); cb(); }),
|
|
283
|
+
(cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() + 2500, 500); cb(err); }),
|
|
277
284
|
|
|
278
|
-
(cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
|
|
279
|
-
(cb) => q.totalSize ((err, size) => {size.should.equal (2); cb(); }),
|
|
280
|
-
(cb) => q.schedSize ((err, size) => {size.should.equal (2); cb(); }),
|
|
285
|
+
(cb) => q.size ((err, size) => {size.should.equal (0); cb(err); }),
|
|
286
|
+
(cb) => q.totalSize ((err, size) => {size.should.equal (2); cb(err); }),
|
|
287
|
+
(cb) => q.schedSize ((err, size) => {size.should.equal (2); cb(err); }),
|
|
281
288
|
|
|
282
289
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:3, pl:'twetrwte'}); cb (err); })},
|
|
283
290
|
(cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:1, pl:'twetrwte'}); cb (err); })},
|
|
284
291
|
|
|
285
|
-
(cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
|
|
286
|
-
(cb) => q.stats ((err, res) => {res.should.eql ({get: 3, put: 3, reserve: 2, commit: 0, rollback: 2, deadletter: 0}); cb(); }),
|
|
292
|
+
(cb) => q.size ((err, size) => {size.should.equal (0); cb(err); }),
|
|
293
|
+
(cb) => q.stats ((err, res) => {res.should.eql ({get: 3, put: 3, reserve: 2, commit: 0, rollback: 2, deadletter: 0}); cb(err); }),
|
|
287
294
|
], function(err, results) {
|
|
295
|
+
if (err) return done (err);
|
|
288
296
|
q.drain();
|
|
289
297
|
done();
|
|
290
298
|
});
|
|
@@ -111,6 +111,8 @@ function release_mq_factory (q, factory, cb) {
|
|
|
111
111
|
pl: 'twetrwte'
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
+
const hdrs = {aaa: 'qw', bbb: '666'};
|
|
115
|
+
|
|
114
116
|
async.waterfall ([
|
|
115
117
|
cb => get_mq_factory (MQ, factory_opts, cb),
|
|
116
118
|
(factory, cb) => {
|
|
@@ -120,7 +122,7 @@ function release_mq_factory (q, factory, cb) {
|
|
|
120
122
|
|
|
121
123
|
async.race ([
|
|
122
124
|
cb => async.series([
|
|
123
|
-
cb => q.push (pl, cb),
|
|
125
|
+
cb => q.push (pl, {hdrs}, cb),
|
|
124
126
|
cb => pop (q, stage, cb),
|
|
125
127
|
cb => reject (q, stage, (err) => {tries++;cb()}),
|
|
126
128
|
cb => pop (q, stage, cb),
|
|
@@ -139,6 +141,13 @@ function release_mq_factory (q, factory, cb) {
|
|
|
139
141
|
}),
|
|
140
142
|
cb => factory.deadletter_queue().pop('c2', (err, res) => {
|
|
141
143
|
res.payload.should.eql (pl);
|
|
144
|
+
res.hdrs.should.match ({
|
|
145
|
+
aaa: "qw",
|
|
146
|
+
bbb: "666",
|
|
147
|
+
'x-dl-from-queue': "test_queue_deadletter",
|
|
148
|
+
'x-dl-t': /.+/,
|
|
149
|
+
'x-dl-tries': 4
|
|
150
|
+
});
|
|
142
151
|
tries.should.equal (5);
|
|
143
152
|
cb (err);
|
|
144
153
|
})
|