keuss 1.6.8 → 1.6.11

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/ps-mongo.js +1 -0
  5. package/package.json +6 -6
  6. package/test/backends_bucket-at-least-once.js +13 -13
  7. package/test/backends_deadletter.js +10 -1
  8. package/test/backends_remove.js +58 -37
  9. package/test/backends_reserve-commit-rollback.js +32 -16
  10. package/.nyc_output/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
  11. package/.nyc_output/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
  12. package/.nyc_output/processinfo/ad035de4-a3d3-451b-b2ad-402e8ed517b8.json +0 -1
  13. package/.nyc_output/processinfo/c8683d6c-e7e6-496b-ab0d-1ff730837d08.json +0 -1
  14. package/.nyc_output/processinfo/index.json +0 -1
  15. package/coverage/base.css +0 -224
  16. package/coverage/block-navigation.js +0 -79
  17. package/coverage/index.html +0 -162
  18. package/coverage/keuss/Pipeline/BaseLink.js.html +0 -636
  19. package/coverage/keuss/Pipeline/Builder.js.html +0 -615
  20. package/coverage/keuss/Pipeline/ChoiceLink.js.html +0 -294
  21. package/coverage/keuss/Pipeline/DirectLink.js.html +0 -231
  22. package/coverage/keuss/Pipeline/Pipeline.js.html +0 -258
  23. package/coverage/keuss/Pipeline/Queue.js.html +0 -939
  24. package/coverage/keuss/Pipeline/Sink.js.html +0 -147
  25. package/coverage/keuss/Pipeline/index.html +0 -175
  26. package/coverage/keuss/QFactory-MongoDB-defaults.js.html +0 -219
  27. package/coverage/keuss/QFactory.js.html +0 -459
  28. package/coverage/keuss/Queue.js.html +0 -2274
  29. package/coverage/keuss/Signal.js.html +0 -312
  30. package/coverage/keuss/Stats.js.html +0 -174
  31. package/coverage/keuss/backends/bucket-mongo-safe.js.html +0 -2952
  32. package/coverage/keuss/backends/bucket-mongo.js.html +0 -1167
  33. package/coverage/keuss/backends/index.html +0 -175
  34. package/coverage/keuss/backends/mongo.js.html +0 -897
  35. package/coverage/keuss/backends/pl-mongo.js.html +0 -723
  36. package/coverage/keuss/backends/ps-mongo.js.html +0 -1038
  37. package/coverage/keuss/backends/redis-list.js.html +0 -513
  38. package/coverage/keuss/backends/redis-oq.js.html +0 -543
  39. package/coverage/keuss/bench/all-mongo.js.html +0 -393
  40. package/coverage/keuss/bench/index.html +0 -149
  41. package/coverage/keuss/bench/multi-q.js.html +0 -324
  42. package/coverage/keuss/bench/redis-oq-consumer-producer.js.html +0 -225
  43. package/coverage/keuss/bench/redis-oq-consumer.js.html +0 -189
  44. package/coverage/keuss/bench/redis-oq-producer.js.html +0 -198
  45. package/coverage/keuss/docusaurus/.docusaurus/client-modules.js.html +0 -93
  46. package/coverage/keuss/docusaurus/.docusaurus/docusaurus.config.js.html +0 -402
  47. package/coverage/keuss/docusaurus/.docusaurus/index.html +0 -136
  48. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/01a85c17.4e57aa0a.js.html +0 -69
  49. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/09d5ad39.3009117f.js.html +0 -69
  50. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1.12cf3eb8.js.html +0 -69
  51. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/12559443.a244228c.js.html +0 -69
  52. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/17896441.5efb3558.js.html +0 -69
  53. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/1be78505.f9c04817.js.html +0 -69
  54. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/2.4e2dc02c.js.html +0 -72
  55. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3.d549a05d.js.html +0 -69
  56. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/36.db0e809a.js.html +0 -69
  57. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/37637b3c.28c0900b.js.html +0 -69
  58. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/3d8d21df.2228b429.js.html +0 -69
  59. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/45a5cd1f.951da354.js.html +0 -69
  60. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/52c38f7a.785707bc.js.html +0 -69
  61. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/57ffbe3d.04d3e53e.js.html +0 -69
  62. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/5f7c35e9.2fa77599.js.html +0 -69
  63. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6299bd84.ec197a3e.js.html +0 -69
  64. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6875c492.cdf3e939.js.html +0 -69
  65. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/6beec1d2.6873e708.js.html +0 -69
  66. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/7b786ad4.bbce08e6.js.html +0 -69
  67. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8070e160.400a4e57.js.html +0 -69
  68. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/88c93c54.e868a433.js.html +0 -69
  69. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/8d3e6f9e.aadf6d32.js.html +0 -69
  70. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9bc74468.516633c5.js.html +0 -69
  71. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/9beb87c2.71e3744d.js.html +0 -69
  72. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a3732fac.b0f98dbf.js.html +0 -69
  73. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/a6aa9e1f.6ac55e6c.js.html +0 -69
  74. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/baf0d4a2.b50efd2d.js.html +0 -69
  75. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/c4f5d8e4.e9dfd999.js.html +0 -69
  76. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/ccc49370.1831890b.js.html +0 -69
  77. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/d4942345.7d23b349.js.html +0 -69
  78. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e2244795.4ea3d168.js.html +0 -69
  79. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/e64fe266.308265e8.js.html +0 -69
  80. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/f78725cc.5f3e115d.js.html +0 -69
  81. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/fa8d8063.2312a332.js.html +0 -69
  82. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/index.html +0 -565
  83. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/main.66f1008c.js.html +0 -72
  84. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/runtime~main.7d73b048.js.html +0 -69
  85. package/coverage/keuss/docusaurus/.docusaurus/keuss-gh-pages/styles.b5ee3016.js.html +0 -69
  86. package/coverage/keuss/docusaurus/.docusaurus/registry.js.html +0 -165
  87. package/coverage/keuss/docusaurus/.docusaurus/routes.js.html +0 -447
  88. package/coverage/keuss/docusaurus/build/01a85c17.4e57aa0a.js.html +0 -69
  89. package/coverage/keuss/docusaurus/build/09d5ad39.3009117f.js.html +0 -69
  90. package/coverage/keuss/docusaurus/build/1.12cf3eb8.js.html +0 -69
  91. package/coverage/keuss/docusaurus/build/12559443.a244228c.js.html +0 -69
  92. package/coverage/keuss/docusaurus/build/17896441.5efb3558.js.html +0 -69
  93. package/coverage/keuss/docusaurus/build/1be78505.f9c04817.js.html +0 -69
  94. package/coverage/keuss/docusaurus/build/2.4e2dc02c.js.html +0 -72
  95. package/coverage/keuss/docusaurus/build/3.d549a05d.js.html +0 -69
  96. package/coverage/keuss/docusaurus/build/36.db0e809a.js.html +0 -69
  97. package/coverage/keuss/docusaurus/build/37637b3c.28c0900b.js.html +0 -69
  98. package/coverage/keuss/docusaurus/build/3d8d21df.2228b429.js.html +0 -69
  99. package/coverage/keuss/docusaurus/build/45a5cd1f.951da354.js.html +0 -69
  100. package/coverage/keuss/docusaurus/build/52c38f7a.785707bc.js.html +0 -69
  101. package/coverage/keuss/docusaurus/build/57ffbe3d.04d3e53e.js.html +0 -69
  102. package/coverage/keuss/docusaurus/build/5f7c35e9.2fa77599.js.html +0 -69
  103. package/coverage/keuss/docusaurus/build/6299bd84.ec197a3e.js.html +0 -69
  104. package/coverage/keuss/docusaurus/build/6875c492.cdf3e939.js.html +0 -69
  105. package/coverage/keuss/docusaurus/build/6beec1d2.6873e708.js.html +0 -69
  106. package/coverage/keuss/docusaurus/build/7b786ad4.bbce08e6.js.html +0 -69
  107. package/coverage/keuss/docusaurus/build/8070e160.400a4e57.js.html +0 -69
  108. package/coverage/keuss/docusaurus/build/88c93c54.e868a433.js.html +0 -69
  109. package/coverage/keuss/docusaurus/build/8d3e6f9e.aadf6d32.js.html +0 -69
  110. package/coverage/keuss/docusaurus/build/9bc74468.516633c5.js.html +0 -69
  111. package/coverage/keuss/docusaurus/build/9beb87c2.71e3744d.js.html +0 -69
  112. package/coverage/keuss/docusaurus/build/a3732fac.b0f98dbf.js.html +0 -69
  113. package/coverage/keuss/docusaurus/build/a6aa9e1f.6ac55e6c.js.html +0 -69
  114. package/coverage/keuss/docusaurus/build/baf0d4a2.b50efd2d.js.html +0 -69
  115. package/coverage/keuss/docusaurus/build/c4f5d8e4.e9dfd999.js.html +0 -69
  116. package/coverage/keuss/docusaurus/build/ccc49370.1831890b.js.html +0 -69
  117. package/coverage/keuss/docusaurus/build/d4942345.7d23b349.js.html +0 -69
  118. package/coverage/keuss/docusaurus/build/e2244795.4ea3d168.js.html +0 -69
  119. package/coverage/keuss/docusaurus/build/e64fe266.308265e8.js.html +0 -69
  120. package/coverage/keuss/docusaurus/build/f78725cc.5f3e115d.js.html +0 -69
  121. package/coverage/keuss/docusaurus/build/fa8d8063.2312a332.js.html +0 -69
  122. package/coverage/keuss/docusaurus/build/index.html +0 -565
  123. package/coverage/keuss/docusaurus/build/main.66f1008c.js.html +0 -72
  124. package/coverage/keuss/docusaurus/build/runtime~main.7d73b048.js.html +0 -69
  125. package/coverage/keuss/docusaurus/build/styles.b5ee3016.js.html +0 -69
  126. package/coverage/keuss/docusaurus/docusaurus.config.js.html +0 -360
  127. package/coverage/keuss/docusaurus/index.html +0 -110
  128. package/coverage/keuss/docusaurus/sidebars.js.html +0 -96
  129. package/coverage/keuss/docusaurus/src/pages/index.html +0 -97
  130. package/coverage/keuss/docusaurus/src/pages/index.js.html +0 -450
  131. package/coverage/keuss/examples/pipelines/builder/index.html +0 -97
  132. package/coverage/keuss/examples/pipelines/builder/index.js.html +0 -450
  133. package/coverage/keuss/examples/pipelines/simplest/index.html +0 -97
  134. package/coverage/keuss/examples/pipelines/simplest/index.js.html +0 -183
  135. package/coverage/keuss/examples/pipelines/simulation-fork/index.html +0 -97
  136. package/coverage/keuss/examples/pipelines/simulation-fork/index.js.html +0 -414
  137. package/coverage/keuss/examples/snippets/01-simplest-pop-push.js.html +0 -195
  138. package/coverage/keuss/examples/snippets/02-simplest-reserve-rollback-commit.js.html +0 -201
  139. package/coverage/keuss/examples/snippets/03-simplest-producer-consumer-loops.js.html +0 -300
  140. package/coverage/keuss/examples/snippets/04-bucket-mongo-safe-insert-reserve-commit.js.html +0 -303
  141. package/coverage/keuss/examples/snippets/05-insert-reserve-rollback-deadletter.js.html +0 -384
  142. package/coverage/keuss/examples/snippets/06-random-consumer-producer.js.html +0 -879
  143. package/coverage/keuss/examples/snippets/index.html +0 -188
  144. package/coverage/keuss/examples/snippets/redislabs-consumer-producer.js.html +0 -201
  145. package/coverage/keuss/examples/snippets/with-redis-stats-and-signaller-consumer-producer.js.html +0 -222
  146. package/coverage/keuss/examples/webhooks/app.js.html +0 -279
  147. package/coverage/keuss/examples/webhooks/consumer.js.html +0 -363
  148. package/coverage/keuss/examples/webhooks/index.html +0 -123
  149. package/coverage/keuss/examples/webhooks/index.js.html +0 -234
  150. package/coverage/keuss/index.html +0 -149
  151. package/coverage/keuss/playground/index.html +0 -136
  152. package/coverage/keuss/playground/pl-rollback.js.html +0 -234
  153. package/coverage/keuss/playground/pl1.js.html +0 -291
  154. package/coverage/keuss/playground/q1.js.html +0 -168
  155. package/coverage/keuss/playground/simple-pl.js.html +0 -195
  156. package/coverage/keuss/signal/index.html +0 -123
  157. package/coverage/keuss/signal/local.js.html +0 -306
  158. package/coverage/keuss/signal/mongo-capped.js.html +0 -378
  159. package/coverage/keuss/signal/redis-pubsub.js.html +0 -399
  160. package/coverage/keuss/stats/index.html +0 -123
  161. package/coverage/keuss/stats/mem.js.html +0 -519
  162. package/coverage/keuss/stats/mongo.js.html +0 -930
  163. package/coverage/keuss/stats/redis.js.html +0 -894
  164. package/coverage/keuss/utils/RedisConn.js.html +0 -150
  165. package/coverage/keuss/utils/RedisOrderedQueue.js.html +0 -864
  166. package/coverage/keuss/utils/index.html +0 -110
  167. package/coverage/prettify.css +0 -1
  168. package/coverage/prettify.js +0 -2
  169. package/coverage/sort-arrow-sprite.png +0 -0
  170. package/coverage/sorter.js +0 -170
  171. package/docusaurus/README.md +0 -33
  172. package/docusaurus/babel.config.js +0 -3
  173. package/docusaurus/blog/2020-08-04-welcome.md +0 -11
  174. package/docusaurus/docs/about.md +0 -13
  175. package/docusaurus/docs/api/factory.md +0 -102
  176. package/docusaurus/docs/api/queue.md +0 -247
  177. package/docusaurus/docs/api/signal.md +0 -38
  178. package/docusaurus/docs/api/stats.md +0 -37
  179. package/docusaurus/docs/changelog.md +0 -46
  180. package/docusaurus/docs/concepts.md +0 -116
  181. package/docusaurus/docs/examples.md +0 -10
  182. package/docusaurus/docs/quickstart.md +0 -195
  183. package/docusaurus/docs/style-guide.md +0 -202
  184. package/docusaurus/docs/usage/buckets.md +0 -43
  185. package/docusaurus/docs/usage/no-signaller.md +0 -16
  186. package/docusaurus/docs/usage/pipelines/about.md +0 -128
  187. package/docusaurus/docs/usage/pipelines/building.md +0 -158
  188. package/docusaurus/docs/usage/pipelines/examples.md +0 -10
  189. package/docusaurus/docs/usage/pipelines/processors.md +0 -187
  190. package/docusaurus/docs/usage/putting-all-together.md +0 -153
  191. package/docusaurus/docs/usage/redis-conns.md +0 -70
  192. package/docusaurus/docs/usage/shutdown.md +0 -11
  193. package/docusaurus/docusaurus.config.js +0 -97
  194. package/docusaurus/package-lock.json +0 -10964
  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 -8864
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
  -------------------------------------------------------------
@@ -217,6 +217,7 @@ class PersistentMongoQueue extends Queue {
217
217
  try {
218
218
  query = {
219
219
  _id: (_.isString(id) ? new mongo.ObjectID (id) : id),
220
+ processed: {$exists: false},
220
221
  reserved: {$exists: false}
221
222
  };
222
223
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keuss",
3
- "version": "1.6.8",
3
+ "version": "1.6.11",
4
4
  "keywords": [
5
5
  "queue",
6
6
  "persistent",
@@ -27,10 +27,10 @@
27
27
  "license": "GPL-3.0",
28
28
  "dependencies": {
29
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",
30
+ "async": "~3.2.3",
31
+ "async-lock": "~1.3.1",
32
+ "debug": "~4.3.3",
33
+ "ioredis": "~4.28.5",
34
34
  "lodash": "~4.17.21",
35
35
  "mitt": "~3.0.0",
36
36
  "mongodb": "~3.6.12",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "chance": "~1.1.8",
41
- "mocha": "~9.1.2",
41
+ "mocha": "~9.2.1",
42
42
  "should": "~13.2.3"
43
43
  },
44
44
  "scripts": {
@@ -52,7 +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
- results.should.eql ([{get: 0, put: 0, reserve: 0, commit: 0, rollback: 0}, 0, 0, null])
55
+ results.should.eql ([{get: 0, put: 0, reserve: 0, commit: 0, rollback: 0, deadletter: 0}, 0, 0, null])
56
56
  done();
57
57
  });
58
58
  });
@@ -70,7 +70,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
70
70
  cb();
71
71
  })},
72
72
  function (cb) {q.stats (function (err, res) {
73
- res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0});
73
+ res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
74
74
  cb();
75
75
  })},
76
76
  function (cb) {q.next_t (function (err, res) {
@@ -86,7 +86,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
86
86
  cb();
87
87
  })},
88
88
  function (cb) {q.stats (function (err, res) {
89
- res.should.eql ({get: 1, put: 2, reserve: 0, commit: 0, rollback: 0});
89
+ res.should.eql ({get: 1, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
90
90
  cb();
91
91
  })},
92
92
  function (cb) {q.pop ('c2', function (err, ret) {
@@ -98,7 +98,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
98
98
  cb();
99
99
  })},
100
100
  function (cb) {q.stats (function (err, res) {
101
- res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0});
101
+ res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
102
102
  cb();
103
103
  })},
104
104
  ], function(err, results) {
@@ -139,7 +139,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
139
139
  cb();
140
140
  })},
141
141
  function (cb) {q.stats (function (err, res) {
142
- res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0});
142
+ res.should.eql ({get: 2, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0});
143
143
  cb();
144
144
  })},
145
145
  ], function(err, results) {
@@ -160,7 +160,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
160
160
  (cb) => setTimeout (cb, 666),
161
161
 
162
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(); }),
163
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 4, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
164
164
 
165
165
  (cb) => q.push ({elem:5, pl:'twetrwte'}, cb),
166
166
  (cb) => q.push ({elem:6, pl:'twetrwte'}, cb),
@@ -168,7 +168,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
168
168
  (cb) => setTimeout (cb, 666),
169
169
 
170
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(); }),
171
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
172
172
 
173
173
  (cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime(), 2000); cb(); }),
174
174
 
@@ -181,7 +181,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
181
181
  (cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:7, pl:'twetrwte'}); cb (err); })},
182
182
 
183
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(); }),
184
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
185
185
  ], function(err, results) {
186
186
  q.drain();
187
187
  done();
@@ -211,7 +211,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
211
211
  (cb) => q.size ((err, size) => {size.should.equal (0); cb(); }),
212
212
  (cb) => q.totalSize ((err, size) => {size.should.equal (7); cb(); }),
213
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(); }),
214
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
215
215
 
216
216
  (cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:5, pl:'twetrwte'}); cb (err); })},
217
217
  (cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:6, pl:'twetrwte'}); cb (err); })},
@@ -222,7 +222,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
222
222
  (cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:4, pl:'twetrwte'}); cb (err); })},
223
223
 
224
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(); }),
225
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 7, put: 7, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
226
226
  ], function(err, results) {
227
227
  q.drain();
228
228
  done();
@@ -239,13 +239,13 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
239
239
  (cb) => setTimeout (cb, 700),
240
240
 
241
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(); }),
242
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 2, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
243
243
 
244
244
  (cb) => q.push ({elem:3, pl:'twetrwte'}, cb),
245
245
  (cb) => setTimeout (cb, 700),
246
246
 
247
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(); }),
248
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 0, put: 3, reserve: 0, commit: 0, rollback: 0, deadletter: 0}); cb(); }),
249
249
 
250
250
  (cb) => q.next_t ((err, res) => {res.getTime().should.be.approximately(new Date().getTime() - 1400, 100); cb(); }),
251
251
 
@@ -283,7 +283,7 @@ describe ('bucket-at-least-once with ' + MQ_item.label + ' queue backend', funct
283
283
  (cb) => {q.pop ('c1', (err, ret) => {ret.payload.should.eql ({elem:1, pl:'twetrwte'}); cb (err); })},
284
284
 
285
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(); }),
286
+ (cb) => q.stats ((err, res) => {res.should.eql ({get: 3, put: 3, reserve: 2, commit: 0, rollback: 2, deadletter: 0}); cb(); }),
287
287
  ], function(err, results) {
288
288
  q.drain();
289
289
  done();
@@ -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
  })
@@ -19,39 +19,6 @@ function stats (q, cb) {
19
19
  });
20
20
  }
21
21
 
22
- function pop (q, stage, cb) {
23
- q.pop('c1', { reserve: true }, (err, res) => {
24
- stage.obj = res;
25
- // console.log('reserved element %o', res);
26
- cb(err);
27
- });
28
- }
29
-
30
- function reject (q, stage, cb) {
31
- var next_t = new Date().getTime() + 2000;
32
-
33
- q.ko (stage.obj, next_t, (err, res) => {
34
- if (err) {
35
- // console.error ('error in rollback of %s: %j', stage.obj._id, err);
36
- return cb (err);
37
- }
38
-
39
- // console.log('rolled back element %s: %o', stage.obj._id, res);
40
- cb();
41
- });
42
- }
43
-
44
- function accept (q, stage, cb) {
45
- q.ok (stage.obj, (err, res) => {
46
- if (err) {
47
- // console.error ('error in rollback of %s: %j', stage.obj._id, err);
48
- return cb (err);
49
- }
50
-
51
- // console.log('commited element %s: %j', stage.obj._id, res);
52
- cb();
53
- });
54
- }
55
22
 
56
23
  function get_mq_factory (MQ, opts, cb) {
57
24
  const common_opts = {
@@ -163,7 +130,7 @@ function release_mq_factory (q, factory, cb) {
163
130
  ctx.id = res[0];
164
131
  ctx.id.should.not.be.null();
165
132
  res[2].should.eql ({
166
- 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 },
167
134
  tsize: 1,
168
135
  rsize: is_redis ? null : 0
169
136
  })
@@ -181,7 +148,7 @@ function release_mq_factory (q, factory, cb) {
181
148
  cb => setTimeout (cb, 1000),
182
149
  ], (err, res) => {
183
150
  res[0].should.eql ({
184
- 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 },
185
152
  tsize: 0,
186
153
  rsize: is_redis ? null : 0
187
154
  });
@@ -228,7 +195,7 @@ function release_mq_factory (q, factory, cb) {
228
195
  cb => setTimeout (cb, 1000),
229
196
  ], (err, res) => {
230
197
  res[0].should.eql ({
231
- 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 },
232
199
  tsize: 1,
233
200
  rsize: is_redis ? null : 1
234
201
  });
@@ -282,7 +249,61 @@ function release_mq_factory (q, factory, cb) {
282
249
  cb => setTimeout (cb, 1000),
283
250
  ], (err, res) => {
284
251
  res[0].should.eql ({
285
- 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
+ tsize: 0,
254
+ rsize: is_redis ? null : 0
255
+ });
256
+ cb (err, q, factory);
257
+ }),
258
+ (q, factory, cb) => {
259
+ release_mq_factory (q, factory, cb);
260
+ }
261
+ ], done);
262
+ });
263
+
264
+
265
+ it('does fail trying to delete an already-deleted element', done => {
266
+ const ctx = {};
267
+ async.waterfall ([
268
+ cb => get_mq_factory (MQ, {}, cb),
269
+ (factory, cb) => {
270
+ const q = factory.queue('test_queue_remove', {});
271
+ cb (null, q, factory);
272
+ },
273
+ (q, factory, cb) => async.series ([
274
+ cb => q.push ({a: 1, b: 'oo'}, cb),
275
+ cb => setTimeout (cb, 1000),
276
+ cb => stats (q, cb)
277
+ ], (err, res) => {
278
+ ctx.id = res[0];
279
+ ctx.id.should.not.be.null();
280
+ res[2].should.eql ({
281
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
282
+ tsize: 1,
283
+ rsize: is_redis ? null : 0
284
+ })
285
+ cb (err, q, factory);
286
+ }),
287
+ (q, factory, cb) => {
288
+ q.remove (ctx.id, (err, res) => {
289
+ should (err).be.null();
290
+ res.should.be.true();
291
+ cb (err, q, factory);
292
+ });
293
+ },
294
+ (q, factory, cb) => {
295
+ q.remove (ctx.id, (err, res) => {
296
+ should (err).be.null();
297
+ res.should.be.false();
298
+ cb (err, q, factory);
299
+ });
300
+ },
301
+ (q, factory, cb) => async.series ([
302
+ cb => stats (q, cb),
303
+ cb => setTimeout (cb, 1000),
304
+ ], (err, res) => {
305
+ res[0].should.eql ({
306
+ stats: { get: 0, put: 1, reserve: 0, commit: 0, rollback: 0, deadletter: 0 },
286
307
  tsize: 0,
287
308
  rsize: is_redis ? null : 0
288
309
  });
@@ -59,7 +59,8 @@ var factory = null;
59
59
  put: 0,
60
60
  reserve: 0,
61
61
  commit: 0,
62
- rollback: 0
62
+ rollback: 0,
63
+ deadletter: 0
63
64
  }, 0, 0, 0, null]);
64
65
  done();
65
66
  });
@@ -83,7 +84,8 @@ var factory = null;
83
84
  put: 2,
84
85
  reserve: 0,
85
86
  commit: 0,
86
- rollback: 0
87
+ rollback: 0,
88
+ deadletter: 0
87
89
  });
88
90
  cb();
89
91
  }),
@@ -102,7 +104,8 @@ var factory = null;
102
104
  put: 2,
103
105
  reserve: 0,
104
106
  commit: 0,
105
- rollback: 0
107
+ rollback: 0,
108
+ deadletter: 0
106
109
  });
107
110
  cb();
108
111
  }),
@@ -120,7 +123,8 @@ var factory = null;
120
123
  put: 2,
121
124
  reserve: 0,
122
125
  commit: 0,
123
- rollback: 0
126
+ rollback: 0,
127
+ deadletter: 0
124
128
  });
125
129
  cb();
126
130
  }),
@@ -171,7 +175,8 @@ var factory = null;
171
175
  put: 2,
172
176
  reserve: 0,
173
177
  commit: 0,
174
- rollback: 0
178
+ rollback: 0,
179
+ deadletter: 0
175
180
  });
176
181
  cb();
177
182
  })
@@ -204,7 +209,8 @@ var factory = null;
204
209
  put: 2,
205
210
  reserve: 0,
206
211
  commit: 0,
207
- rollback: 0
212
+ rollback: 0,
213
+ deadletter: 0
208
214
  });
209
215
  cb();
210
216
  });
@@ -237,7 +243,8 @@ var factory = null;
237
243
  put: 2,
238
244
  reserve: 0,
239
245
  commit: 0,
240
- rollback: 0
246
+ rollback: 0,
247
+ deadletter: 0
241
248
  });
242
249
  cb();
243
250
  })
@@ -291,7 +298,8 @@ var factory = null;
291
298
  put: 2,
292
299
  reserve: 0,
293
300
  commit: 0,
294
- rollback: 0
301
+ rollback: 0,
302
+ deadletter: 0
295
303
  });
296
304
  cb();
297
305
  })
@@ -317,7 +325,8 @@ var factory = null;
317
325
  put: 2,
318
326
  reserve: 0,
319
327
  commit: 0,
320
- rollback: 0
328
+ rollback: 0,
329
+ deadletter: 0
321
330
  });
322
331
  cb();
323
332
  })
@@ -343,7 +352,8 @@ var factory = null;
343
352
  put: 2,
344
353
  reserve: 0,
345
354
  commit: 0,
346
- rollback: 0
355
+ rollback: 0,
356
+ deadletter: 0
347
357
  });
348
358
  cb();
349
359
  })
@@ -383,7 +393,8 @@ var factory = null;
383
393
  put: 2,
384
394
  reserve: 0,
385
395
  commit: 0,
386
- rollback: 0
396
+ rollback: 0,
397
+ deadletter: 0
387
398
  });
388
399
  cb();
389
400
  })
@@ -463,7 +474,8 @@ var factory = null;
463
474
  put: 2,
464
475
  reserve: 0,
465
476
  commit: 0,
466
- rollback: 0
477
+ rollback: 0,
478
+ deadletter: 0
467
479
  });
468
480
  cb();
469
481
  })
@@ -519,7 +531,8 @@ var factory = null;
519
531
  put: 3,
520
532
  reserve: 0,
521
533
  commit: 0,
522
- rollback: 0
534
+ rollback: 0,
535
+ deadletter: 0
523
536
  });
524
537
  cb();
525
538
  })
@@ -576,7 +589,8 @@ var factory = null;
576
589
  put: 3,
577
590
  reserve: 0,
578
591
  commit: 0,
579
- rollback: 0
592
+ rollback: 0,
593
+ deadletter: 0
580
594
  });
581
595
  cb();
582
596
  })
@@ -849,7 +863,8 @@ var factory = null;
849
863
  put: 1,
850
864
  reserve: 1,
851
865
  commit: 1,
852
- rollback: 0
866
+ rollback: 0,
867
+ deadletter: 0
853
868
  });
854
869
  cb();
855
870
  }),
@@ -986,7 +1001,8 @@ var factory = null;
986
1001
  put: 1,
987
1002
  reserve: 3,
988
1003
  commit: 1,
989
- rollback: 2
1004
+ rollback: 2,
1005
+ deadletter: 0
990
1006
  });
991
1007
  cb();
992
1008
  }),