keuss 1.6.9 → 1.6.12

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.
Files changed (203) hide show
  1. package/Pipeline/Queue.js +12 -2
  2. package/Queue.js +17 -7
  3. package/TODO +1 -0
  4. package/backends/bucket-mongo-safe.js +42 -44
  5. package/backends/bucket-mongo.js +6 -8
  6. package/package.json +8 -8
  7. package/test/backends_bucket-at-least-once.js +48 -40
  8. package/test/backends_deadletter.js +10 -1
  9. package/test/backends_remove.js +6 -6
  10. package/test/backends_reserve-commit-rollback.js +32 -16
  11. package/.nyc_output/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
  12. package/.nyc_output/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
  13. package/.nyc_output/processinfo/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
  14. package/.nyc_output/processinfo/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
  15. package/.nyc_output/processinfo/index.json +0 -1
  16. package/coverage/base.css +0 -224
  17. package/coverage/block-navigation.js +0 -79
  18. package/coverage/index.html +0 -162
  19. package/coverage/keuss/Pipeline/BaseLink.js.html +0 -636
  20. package/coverage/keuss/Pipeline/Builder.js.html +0 -615
  21. package/coverage/keuss/Pipeline/ChoiceLink.js.html +0 -294
  22. package/coverage/keuss/Pipeline/DirectLink.js.html +0 -231
  23. package/coverage/keuss/Pipeline/Pipeline.js.html +0 -258
  24. package/coverage/keuss/Pipeline/Queue.js.html +0 -939
  25. package/coverage/keuss/Pipeline/Sink.js.html +0 -147
  26. package/coverage/keuss/Pipeline/index.html +0 -175
  27. package/coverage/keuss/QFactory-MongoDB-defaults.js.html +0 -219
  28. package/coverage/keuss/QFactory.js.html +0 -459
  29. package/coverage/keuss/Queue.js.html +0 -2274
  30. package/coverage/keuss/Signal.js.html +0 -312
  31. package/coverage/keuss/Stats.js.html +0 -174
  32. package/coverage/keuss/backends/bucket-mongo-safe.js.html +0 -2952
  33. package/coverage/keuss/backends/bucket-mongo.js.html +0 -1167
  34. package/coverage/keuss/backends/index.html +0 -175
  35. package/coverage/keuss/backends/mongo.js.html +0 -897
  36. package/coverage/keuss/backends/pl-mongo.js.html +0 -723
  37. package/coverage/keuss/backends/ps-mongo.js.html +0 -1038
  38. package/coverage/keuss/backends/redis-list.js.html +0 -513
  39. package/coverage/keuss/backends/redis-oq.js.html +0 -543
  40. package/coverage/keuss/bench/all-mongo.js.html +0 -393
  41. package/coverage/keuss/bench/index.html +0 -149
  42. package/coverage/keuss/bench/multi-q.js.html +0 -324
  43. package/coverage/keuss/bench/redis-oq-consumer-producer.js.html +0 -225
  44. package/coverage/keuss/bench/redis-oq-consumer.js.html +0 -189
  45. package/coverage/keuss/bench/redis-oq-producer.js.html +0 -198
  46. package/coverage/keuss/docusaurus/.docusaurus/client-modules.js.html +0 -93
  47. package/coverage/keuss/docusaurus/.docusaurus/docusaurus.config.js.html +0 -402
  48. package/coverage/keuss/docusaurus/.docusaurus/index.html +0 -136
  49. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/01a85c17.4e57aa0a.js.html +0 -69
  50. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/09d5ad39.3009117f.js.html +0 -69
  51. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1.12cf3eb8.js.html +0 -69
  52. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/12559443.a244228c.js.html +0 -69
  53. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/17896441.5efb3558.js.html +0 -69
  54. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1be78505.f9c04817.js.html +0 -69
  55. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/2.4e2dc02c.js.html +0 -72
  56. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3.d549a05d.js.html +0 -69
  57. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/36.db0e809a.js.html +0 -69
  58. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/37637b3c.28c0900b.js.html +0 -69
  59. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3d8d21df.2228b429.js.html +0 -69
  60. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/45a5cd1f.951da354.js.html +0 -69
  61. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/52c38f7a.785707bc.js.html +0 -69
  62. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/57ffbe3d.04d3e53e.js.html +0 -69
  63. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/5f7c35e9.2fa77599.js.html +0 -69
  64. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6299bd84.ec197a3e.js.html +0 -69
  65. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6875c492.cdf3e939.js.html +0 -69
  66. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6beec1d2.6873e708.js.html +0 -69
  67. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/7b786ad4.bbce08e6.js.html +0 -69
  68. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8070e160.400a4e57.js.html +0 -69
  69. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/88c93c54.e868a433.js.html +0 -69
  70. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8d3e6f9e.aadf6d32.js.html +0 -69
  71. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9bc74468.516633c5.js.html +0 -69
  72. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9beb87c2.71e3744d.js.html +0 -69
  73. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a3732fac.b0f98dbf.js.html +0 -69
  74. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a6aa9e1f.6ac55e6c.js.html +0 -69
  75. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/baf0d4a2.b50efd2d.js.html +0 -69
  76. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/c4f5d8e4.e9dfd999.js.html +0 -69
  77. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/ccc49370.1831890b.js.html +0 -69
  78. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/d4942345.7d23b349.js.html +0 -69
  79. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e2244795.4ea3d168.js.html +0 -69
  80. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e64fe266.308265e8.js.html +0 -69
  81. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/f78725cc.5f3e115d.js.html +0 -69
  82. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/fa8d8063.2312a332.js.html +0 -69
  83. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/index.html +0 -565
  84. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/main.66f1008c.js.html +0 -72
  85. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/runtime~main.7d73b048.js.html +0 -69
  86. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/styles.b5ee3016.js.html +0 -69
  87. package/coverage/keuss/docusaurus/.docusaurus/registry.js.html +0 -165
  88. package/coverage/keuss/docusaurus/.docusaurus/routes.js.html +0 -447
  89. package/coverage/keuss/docusaurus/build/01a85c17.4e57aa0a.js.html +0 -69
  90. package/coverage/keuss/docusaurus/build/09d5ad39.3009117f.js.html +0 -69
  91. package/coverage/keuss/docusaurus/build/1.12cf3eb8.js.html +0 -69
  92. package/coverage/keuss/docusaurus/build/12559443.a244228c.js.html +0 -69
  93. package/coverage/keuss/docusaurus/build/17896441.5efb3558.js.html +0 -69
  94. package/coverage/keuss/docusaurus/build/1be78505.f9c04817.js.html +0 -69
  95. package/coverage/keuss/docusaurus/build/2.4e2dc02c.js.html +0 -72
  96. package/coverage/keuss/docusaurus/build/3.d549a05d.js.html +0 -69
  97. package/coverage/keuss/docusaurus/build/36.db0e809a.js.html +0 -69
  98. package/coverage/keuss/docusaurus/build/37637b3c.28c0900b.js.html +0 -69
  99. package/coverage/keuss/docusaurus/build/3d8d21df.2228b429.js.html +0 -69
  100. package/coverage/keuss/docusaurus/build/45a5cd1f.951da354.js.html +0 -69
  101. package/coverage/keuss/docusaurus/build/52c38f7a.785707bc.js.html +0 -69
  102. package/coverage/keuss/docusaurus/build/57ffbe3d.04d3e53e.js.html +0 -69
  103. package/coverage/keuss/docusaurus/build/5f7c35e9.2fa77599.js.html +0 -69
  104. package/coverage/keuss/docusaurus/build/6299bd84.ec197a3e.js.html +0 -69
  105. package/coverage/keuss/docusaurus/build/6875c492.cdf3e939.js.html +0 -69
  106. package/coverage/keuss/docusaurus/build/6beec1d2.6873e708.js.html +0 -69
  107. package/coverage/keuss/docusaurus/build/7b786ad4.bbce08e6.js.html +0 -69
  108. package/coverage/keuss/docusaurus/build/8070e160.400a4e57.js.html +0 -69
  109. package/coverage/keuss/docusaurus/build/88c93c54.e868a433.js.html +0 -69
  110. package/coverage/keuss/docusaurus/build/8d3e6f9e.aadf6d32.js.html +0 -69
  111. package/coverage/keuss/docusaurus/build/9bc74468.516633c5.js.html +0 -69
  112. package/coverage/keuss/docusaurus/build/9beb87c2.71e3744d.js.html +0 -69
  113. package/coverage/keuss/docusaurus/build/a3732fac.b0f98dbf.js.html +0 -69
  114. package/coverage/keuss/docusaurus/build/a6aa9e1f.6ac55e6c.js.html +0 -69
  115. package/coverage/keuss/docusaurus/build/baf0d4a2.b50efd2d.js.html +0 -69
  116. package/coverage/keuss/docusaurus/build/c4f5d8e4.e9dfd999.js.html +0 -69
  117. package/coverage/keuss/docusaurus/build/ccc49370.1831890b.js.html +0 -69
  118. package/coverage/keuss/docusaurus/build/d4942345.7d23b349.js.html +0 -69
  119. package/coverage/keuss/docusaurus/build/e2244795.4ea3d168.js.html +0 -69
  120. package/coverage/keuss/docusaurus/build/e64fe266.308265e8.js.html +0 -69
  121. package/coverage/keuss/docusaurus/build/f78725cc.5f3e115d.js.html +0 -69
  122. package/coverage/keuss/docusaurus/build/fa8d8063.2312a332.js.html +0 -69
  123. package/coverage/keuss/docusaurus/build/index.html +0 -565
  124. package/coverage/keuss/docusaurus/build/main.66f1008c.js.html +0 -72
  125. package/coverage/keuss/docusaurus/build/runtime~main.7d73b048.js.html +0 -69
  126. package/coverage/keuss/docusaurus/build/styles.b5ee3016.js.html +0 -69
  127. package/coverage/keuss/docusaurus/docusaurus.config.js.html +0 -360
  128. package/coverage/keuss/docusaurus/index.html +0 -110
  129. package/coverage/keuss/docusaurus/sidebars.js.html +0 -96
  130. package/coverage/keuss/docusaurus/src/pages/index.html +0 -97
  131. package/coverage/keuss/docusaurus/src/pages/index.js.html +0 -450
  132. package/coverage/keuss/examples/pipelines/builder/index.html +0 -97
  133. package/coverage/keuss/examples/pipelines/builder/index.js.html +0 -450
  134. package/coverage/keuss/examples/pipelines/simplest/index.html +0 -97
  135. package/coverage/keuss/examples/pipelines/simplest/index.js.html +0 -183
  136. package/coverage/keuss/examples/pipelines/simulation-fork/index.html +0 -97
  137. package/coverage/keuss/examples/pipelines/simulation-fork/index.js.html +0 -414
  138. package/coverage/keuss/examples/snippets/01-simplest-pop-push.js.html +0 -195
  139. package/coverage/keuss/examples/snippets/02-simplest-reserve-rollback-commit.js.html +0 -201
  140. package/coverage/keuss/examples/snippets/03-simplest-producer-consumer-loops.js.html +0 -300
  141. package/coverage/keuss/examples/snippets/04-bucket-mongo-safe-insert-reserve-commit.js.html +0 -303
  142. package/coverage/keuss/examples/snippets/05-insert-reserve-rollback-deadletter.js.html +0 -384
  143. package/coverage/keuss/examples/snippets/06-random-consumer-producer.js.html +0 -879
  144. package/coverage/keuss/examples/snippets/index.html +0 -188
  145. package/coverage/keuss/examples/snippets/redislabs-consumer-producer.js.html +0 -201
  146. package/coverage/keuss/examples/snippets/with-redis-stats-and-signaller-consumer-producer.js.html +0 -222
  147. package/coverage/keuss/examples/webhooks/app.js.html +0 -279
  148. package/coverage/keuss/examples/webhooks/consumer.js.html +0 -363
  149. package/coverage/keuss/examples/webhooks/index.html +0 -123
  150. package/coverage/keuss/examples/webhooks/index.js.html +0 -234
  151. package/coverage/keuss/index.html +0 -149
  152. package/coverage/keuss/playground/index.html +0 -136
  153. package/coverage/keuss/playground/pl-rollback.js.html +0 -234
  154. package/coverage/keuss/playground/pl1.js.html +0 -291
  155. package/coverage/keuss/playground/q1.js.html +0 -168
  156. package/coverage/keuss/playground/simple-pl.js.html +0 -195
  157. package/coverage/keuss/signal/index.html +0 -123
  158. package/coverage/keuss/signal/local.js.html +0 -306
  159. package/coverage/keuss/signal/mongo-capped.js.html +0 -378
  160. package/coverage/keuss/signal/redis-pubsub.js.html +0 -399
  161. package/coverage/keuss/stats/index.html +0 -123
  162. package/coverage/keuss/stats/mem.js.html +0 -519
  163. package/coverage/keuss/stats/mongo.js.html +0 -930
  164. package/coverage/keuss/stats/redis.js.html +0 -894
  165. package/coverage/keuss/utils/RedisConn.js.html +0 -150
  166. package/coverage/keuss/utils/RedisOrderedQueue.js.html +0 -864
  167. package/coverage/keuss/utils/index.html +0 -110
  168. package/coverage/prettify.css +0 -1
  169. package/coverage/prettify.js +0 -2
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +0 -170
  172. package/docusaurus/README.md +0 -33
  173. package/docusaurus/babel.config.js +0 -3
  174. package/docusaurus/blog/2020-08-04-welcome.md +0 -11
  175. package/docusaurus/docs/about.md +0 -13
  176. package/docusaurus/docs/api/factory.md +0 -102
  177. package/docusaurus/docs/api/queue.md +0 -247
  178. package/docusaurus/docs/api/signal.md +0 -38
  179. package/docusaurus/docs/api/stats.md +0 -37
  180. package/docusaurus/docs/changelog.md +0 -48
  181. package/docusaurus/docs/concepts.md +0 -116
  182. package/docusaurus/docs/examples.md +0 -10
  183. package/docusaurus/docs/quickstart.md +0 -195
  184. package/docusaurus/docs/style-guide.md +0 -202
  185. package/docusaurus/docs/usage/buckets.md +0 -43
  186. package/docusaurus/docs/usage/no-signaller.md +0 -16
  187. package/docusaurus/docs/usage/pipelines/about.md +0 -128
  188. package/docusaurus/docs/usage/pipelines/building.md +0 -158
  189. package/docusaurus/docs/usage/pipelines/examples.md +0 -10
  190. package/docusaurus/docs/usage/pipelines/processors.md +0 -187
  191. package/docusaurus/docs/usage/putting-all-together.md +0 -153
  192. package/docusaurus/docs/usage/redis-conns.md +0 -70
  193. package/docusaurus/docs/usage/shutdown.md +0 -11
  194. package/docusaurus/docusaurus.config.js +0 -97
  195. package/docusaurus/package.json +0 -33
  196. package/docusaurus/sidebars.js +0 -44
  197. package/docusaurus/src/css/custom.css +0 -25
  198. package/docusaurus/src/pages/index.js +0 -127
  199. package/docusaurus/src/pages/styles.module.css +0 -37
  200. package/docusaurus/static/.nojekyll +0 -0
  201. package/docusaurus/static/img/favicon.ico +0 -0
  202. package/docusaurus/static/img/logo.svg +0 -1
  203. 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
- // redefnition
281
+ // redefinition from Queue
278
282
  _move_to_deadletter (obj, cb) {
279
- this.pl_step (obj._id, this._factory.deadletter_queue (), {}, (err, res) => {
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
@@ -46,6 +46,7 @@ class Queue {
46
46
  this._stats.incr ('reserve', 0);
47
47
  this._stats.incr ('commit', 0);
48
48
  this._stats.incr ('rollback', 0);
49
+ this._stats.incr ('deadletter', 0);
49
50
  }
50
51
 
51
52
  // if true, queue is being drained just before shutdown
@@ -432,14 +433,14 @@ class Queue {
432
433
  let id = (obj._id ? obj._id : obj);
433
434
 
434
435
  if (
435
- (obj.tries) &&
436
- (this._factory.deadletter_queue ()) &&
437
- (this._factory.max_ko ()) &&
438
- (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
439
441
  ) {
440
442
  debug ('%s: too many retries (%d), moving to deadletter', obj._id, obj.tries);
441
443
  this._move_to_deadletter (obj, cb);
442
- // TODO add from-what-queue to deadletter elements
443
444
  }
444
445
  else {
445
446
  this.rollback (id, next_t, (err, res) => {
@@ -709,21 +710,30 @@ class Queue {
709
710
  /////////////////////////////////////////////
710
711
  _move_to_deadletter (obj, cb) {
711
712
  // commit and move to deadletter
712
- // ALSO NOT IN deadletter queue (to void loop)
713
713
  // commit element in origin queue, push in deadletter afterwards
714
+ const opts = {
715
+ hdrs: _.clone (obj.hdrs || {})
716
+ };
717
+
718
+ // add some extra x-dl-* headers
719
+ opts.hdrs['x-dl-from-queue'] = this.name ();
720
+ opts.hdrs['x-dl-t'] = new Date().toISOString ();
721
+ opts.hdrs['x-dl-tries'] = obj.tries;
722
+
714
723
  this.commit (obj._id, err => {
715
724
  if (err) {
716
725
  debug ('while committing %s prior to moving to deadletter: %j', obj._id, err);
717
726
  return cb (err);
718
727
  }
719
728
 
720
- this._factory.deadletter_queue ().push (obj.payload, (err, res) => {
729
+ this._factory.deadletter_queue ().push (obj.payload, opts, (err, res) => {
721
730
  if (err) {
722
731
  debug ('while moving %s to deadletter: %j', obj._id, err);
723
732
  return cb (err, 'deadletter');
724
733
  }
725
734
  else {
726
735
  debug ('moved %s to deadletter with _id %s', obj._id, res);
736
+ this._stats.incr ('deadletter');
727
737
  return cb (null, 'deadletter');
728
738
  }
729
739
  });
package/TODO CHANGED
@@ -1,5 +1,6 @@
1
1
  bugs
2
2
  -------------------------------------------------------------
3
+ * deadlettering on all backend but mongo-pipeline does not preserve hdrs
3
4
 
4
5
  prio 1
5
6
  -------------------------------------------------------------
@@ -133,11 +133,13 @@ class Bucket {
133
133
  q: q
134
134
  });
135
135
 
136
- if ((res && res.result && res.result.n) != 1) return cb({
137
- err: 'Bucket flush: exactly one must be deleted',
138
- e: err,
139
- q: q
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 ((res && res.result && res.result.nModified) != 1) return cb({
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
- ], (err, cursor) => {
656
- if (err) return callback (err);
657
+ ]);
657
658
 
658
- cursor.toArray ((err, res) => {
659
- debug ('calculating totalSize: aggregation pipeline returns %o', res);
660
- if (err) return callback (err);
661
- if (res.length == 0) return callback (null, 0);
662
- callback (null, res[0].v);
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
- ], (err, cursor) => {
675
- if (err) return callback (err);
674
+ ]);
676
675
 
677
- cursor.toArray ((err, res) => {
678
- debug ('calculating size: aggregation pipeline returns %o', res);
679
- if (err) return callback (err);
680
- if (res.length == 0) return callback (null, 0);
681
- callback (null, res[0].v);
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
- ], (err, cursor) => {
697
- if (err) return callback (err);
694
+ ]);
698
695
 
699
- cursor.toArray ((err, res) => {
700
- debug ('calculating schedSize: aggregation pipeline returns %o', res);
701
- if (err) return callback (err);
702
- if (res.length == 0) return callback (null, 0);
703
- callback (null, res[0].v);
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
- ], (err, cursor) => {
718
- if (err) return callback (err);
714
+ ]);
719
715
 
720
- cursor.toArray ((err, res) => {
721
- debug ('calculating resvSize: aggregation pipeline returns %o', res);
722
- if (err) return callback (err);
723
- if (res.length == 0) return callback (null, 0);
724
- callback (null, res[0].v);
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.find ({}).limit(1).sort ({mature:1}).project ({mature:1}).next ((err, result) => {
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) {
@@ -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
- ], (err, cursor) => {
211
- if (err) return callback (err);
210
+ ]);
212
211
 
213
- cursor.toArray ((err, res) => {
214
- if (err) return callback (err);
215
- if (res.length == 0) return callback (null, 0);
216
- callback (null, res[0].v);
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keuss",
3
- "version": "1.6.9",
3
+ "version": "1.6.12",
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.7.1",
30
- "async": "~3.2.1",
31
- "async-lock": "~1.3.0",
32
- "debug": "~4.3.2",
33
- "ioredis": "~4.27.10",
29
+ "@nodebb/mubsub": "~1.8.0",
30
+ "async": "~3.2.3",
31
+ "async-lock": "~1.3.1",
32
+ "debug": "~4.3.4",
33
+ "ioredis": "~5.0.4",
34
34
  "lodash": "~4.17.21",
35
35
  "mitt": "~3.0.0",
36
- "mongodb": "~3.6.12",
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.1.2",
41
+ "mocha": "~9.2.2",
42
42
  "should": "~13.2.3"
43
43
  },
44
44
  "scripts": {
@@ -52,7 +52,8 @@ 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
- results.should.eql ([{get: 0, put: 0, reserve: 0, commit: 0, rollback: 0}, 0, 0, null])
55
+ if (err) return done (err);
56
+ results.should.eql ([{get: 0, put: 0, reserve: 0, commit: 0, rollback: 0, deadletter: 0}, 0, 0, null])
56
57
  done();
57
58
  });
58
59
  });
@@ -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
- res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0});
74
- cb();
74
+ res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
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
- res.should.eql ({get: 1, put: 2, reserve: 0, commit: 0, rollback: 0});
90
- cb();
90
+ res.should.eql ({get: 1, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
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
- res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0});
102
- cb();
102
+ res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
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
- res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0});
143
- cb();
144
+ res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
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}); 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}); 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}); 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}); 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}); 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}); 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}); 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}); 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
  })
@@ -130,7 +130,7 @@ function release_mq_factory (q, factory, cb) {
130
130
  ctx.id = res[0];
131
131
  ctx.id.should.not.be.null();
132
132
  res[2].should.eql ({
133
- stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0 },
133
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
134
134
  tsize: 1,
135
135
  rsize: is_redis ? null : 0
136
136
  })
@@ -148,7 +148,7 @@ function release_mq_factory (q, factory, cb) {
148
148
  cb => setTimeout (cb, 1000),
149
149
  ], (err, res) => {
150
150
  res[0].should.eql ({
151
- stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0 },
151
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
152
152
  tsize: 0,
153
153
  rsize: is_redis ? null : 0
154
154
  });
@@ -195,7 +195,7 @@ function release_mq_factory (q, factory, cb) {
195
195
  cb => setTimeout (cb, 1000),
196
196
  ], (err, res) => {
197
197
  res[0].should.eql ({
198
- stats: { get: 0, put: 1, reserve: 1, commit: 0, rollback: 0 },
198
+ stats: { get: 0, put: 1, reserve: 1, commit: 0, rollback: 0, deadletter: 0 },
199
199
  tsize: 1,
200
200
  rsize: is_redis ? null : 1
201
201
  });
@@ -249,7 +249,7 @@ function release_mq_factory (q, factory, cb) {
249
249
  cb => setTimeout (cb, 1000),
250
250
  ], (err, res) => {
251
251
  res[0].should.eql ({
252
- stats: { get: 0, put: 1, reserve: 1, commit: 0, rollback: 1 },
252
+ stats: { get: 0, put: 1, reserve: 1, commit: 0, rollback: 1, deadletter: 0 },
253
253
  tsize: 0,
254
254
  rsize: is_redis ? null : 0
255
255
  });
@@ -278,7 +278,7 @@ function release_mq_factory (q, factory, cb) {
278
278
  ctx.id = res[0];
279
279
  ctx.id.should.not.be.null();
280
280
  res[2].should.eql ({
281
- stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0 },
281
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
282
282
  tsize: 1,
283
283
  rsize: is_redis ? null : 0
284
284
  })
@@ -303,7 +303,7 @@ function release_mq_factory (q, factory, cb) {
303
303
  cb => setTimeout (cb, 1000),
304
304
  ], (err, res) => {
305
305
  res[0].should.eql ({
306
- stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0 },
306
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
307
307
  tsize: 0,
308
308
  rsize: is_redis ? null : 0
309
309
  });