pg-boss 12.33.6 → 12.34.0
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/dist/attorney.d.ts +1 -1
- package/dist/attorney.d.ts.map +1 -1
- package/dist/attorney.js +7 -2
- package/dist/cli.js +3 -3
- package/dist/clock.d.ts +7 -1
- package/dist/clock.d.ts.map +1 -1
- package/dist/clock.js +18 -2
- package/dist/contractor.d.ts +3 -0
- package/dist/contractor.d.ts.map +1 -1
- package/dist/contractor.js +22 -8
- package/dist/drifter.d.ts +2 -0
- package/dist/drifter.d.ts.map +1 -1
- package/dist/drifter.js +5 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/manager.d.ts +1 -0
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +93 -31
- package/dist/plans.d.ts +6 -0
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +175 -28
- package/dist/timekeeper.d.ts +7 -3
- package/dist/timekeeper.d.ts.map +1 -1
- package/dist/timekeeper.js +32 -33
- package/dist/types.d.ts +31 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/plans.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AASpG,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAIxE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,eAAO,MAAM,QAAQ;;CAEpB,CAAA;AAED,eAAO,MAAM,cAAc,WAAW,CAAA;AACtC,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AACtD,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AACnD,eAAO,MAAM,kBAAkB,QAAO,CAAA;AAqBtC,eAAO,MAAM,UAAU;;;;;;;EAOrB,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;EAOzB,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;EAGhB,CAAA;AAEX,2FAA2F;AAC3F,eAAO,MAAM,mBAAmB,QAAkE,CAAA;AAElG;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB;;;EAG1B,CAAA;AAiBX,eAAO,MAAM,cAAc,QAAQ,CAAA;AACnC,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAE5C,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAOD,eAAO,MAAM,cAAc,gCAAgC,CAAA;AAE3D,wBAAgB,qBAAqB,CAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAyBxF;AAED,wBAAgB,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,UAoD/E;AA6DD,eAAO,MAAM,mBAAmB,6BAA6B,CAAA;AAI7D,eAAO,MAAM,sBAAsB,sBAAsB,CAAA;AAIzD,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,UAEzC;AAID,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,UAEhD;AAED,wBAAgB,mBAAmB,WAElC;AAED,wBAAgB,oBAAoB,WAEnC;AAOD,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,MAAM,UAQrD;AAMD,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,WAE3E;AAID,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,MAAM,UAKnD;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,UAUtG;AAuID,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,UAUjD;AAED,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,UAEjD;AAID,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,MAAM,UAUvD;AAED,wBAAgB,8BAA8B,CAAE,MAAM,EAAE,MAAM,UAE7D;AAOD,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,MAAM,UAerD;AAyXD,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,UAGrG;AAiBD,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAID,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,UAGnF;AA2ID,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAWnG;AA4CD,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,QAAQ,CA4BnF;AAED,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEpG;AAiBD,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAS9D;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAE7D;AAED,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAE9D;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEjE;AAsCD,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,UAyB1C;AAED,wBAAgB,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAkCrE;AAED,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAU5D;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAE9D;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAE9D;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAE3D;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAE3D;AAuBD,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,UAE3C;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,UAElD;AAED,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,MAAM,UAExD;AAYD,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,UAQpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,UAQ/C;AAED,wBAAgB,QAAQ,CAAE,MAAM,EAAE,MAAM,UAYvC;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,UAMzC;AAED,wBAAgB,SAAS,CAAE,MAAM,EAAE,MAAM,UASxC;AAED,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,UAK1C;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,UAKhD;AAED,wBAAgB,OAAO,CAAE,MAAM,EAAE,MAAM,UAEtC;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,UAK5C;AAED,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAanD;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvE;AAGD,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,MAAM,CAerF;AAGD,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,MAAM,CAMtF;AASD,wBAAgB,0BAA0B,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA2BlE;AAED,wBAAgB,2BAA2B,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BjF;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CASrG;AAcD,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiB1D;AAED,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAwBD,wBAAgB,4BAA4B,CAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CA6C/H;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,UAEzC;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAE1D;AAED,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,UAEjD;AAOD,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,MAAM,UAExD;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAE7D;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAAA;IAClD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA6ED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAE,OAAO,EAAE,eAAe,EAAE,YAAY,UAAQ,GAAG,QAAQ,CAgNtF;AA+CD,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,UAQnF;AAKD,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAkBrE;AAKD,wBAAgB,kCAAkC,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAehF;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAaxD;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAaxD;AAED,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UASzD;AAuBD,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAIhB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAe,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE,iBAAiB,UA6H7H;AAOD,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAUzH;AAED,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAK1D;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAQrH;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CASvH;AAED,wBAAgB,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAYvD;AA8OD,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAcrE;AAID,wBAAgB,6BAA6B,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAW3E;AAiBD,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAM7E;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAKzE;AAMD,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CASpG;AAED,wBAAgB,2BAA2B,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAUtG;AAED,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAID,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAKvG;AAMD,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAY3D;AAKD,eAAO,MAAM,eAAe,OAAO,CAAA;AAQnC,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAqCzF;AAMD,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAcvH;AAID,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAerE;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS3D;AAiCD,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgClE;AAWD,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAU9E;AAGD,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBzE;AAKD,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUrE;AAED,wBAAgB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAa5G;AAED,wBAAgB,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAcvD;AAqBD,wBAAgB,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAQ,UA+DzI;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CA4BxF;AAMD,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAMpC,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAoEnH;AAyBD,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAgC3J;AAGD,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG7D;AAGD,wBAAgB,kBAAkB,CAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,wBAAgB,WAAW,CAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAU7D;AAED,wBAAgB,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAGjH;AA8CD,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAG/D;AAED,wBAAgB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,UA+BpI;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAOxD;AAID,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,UAcnE;AAED,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,UAM9C;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,UAM5C;AAED,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAgBvH;AAED,wBAAgB,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAQ5D;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,WAAmB,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,UAuHzG;AAQD,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3E;AAUD,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU5E;AAQD,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,UAoB1I;AAED,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAS1D;AAED,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAOtE;AAED,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,UAM3C;AAED,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,UAO5C;AAUD,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,UAE9C;AAGD,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,MAAM,UAExD;AAID,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,MAAM,UAEvD;AAID,wBAAgB,mBAAmB,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAUD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAkCD,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAoC,CAAA;AAIrF,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAE,cAAc,EAAO,GAAG,MAAM,EAAE,CAIxH;AAQD,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAE,cAAc,EAAO,GAAG,eAAe,EAAE,CAuBlI;AAMD,wBAAgB,0BAA0B,CAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,mBAAmB,EAAE,CASvG;AAOD,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,eAAe,EAAE,CAY5I;AAQD,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAE,cAAc,EAAO,GAAG,YAAY,EAAE,CA6B/H;AAcD,eAAO,MAAM,gBAAgB;;;;;CAqB5B,CAAA;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAmCzG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAkBxE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,UAAQ,EAAE,QAAQ,UAAQ,GAAG,MAAM,CAkC7H;AASD;;;;;;;;GAQG;AAEH,eAAO,MAAM,oBAAoB;;;;;;CAqBvB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,oBAAoB,CAAA;AAEjE,eAAO,MAAM,0BAA0B,EAAwC,SAAS,iBAAiB,EAAE,CAAA;AAE3G;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAE,SAAS,iBAAiB,EAA+B,GAAG,QAAQ,CAoE9H;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAsB7E;AAGD,wBAAgB,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAO1H"}
|
package/dist/plans.js
CHANGED
|
@@ -96,11 +96,45 @@ const QUEUE_DEFAULTS = {
|
|
|
96
96
|
// partition is cloned from (CREATE TABLE ... LIKE).
|
|
97
97
|
export const BASE_JOB_TABLE = 'job';
|
|
98
98
|
export const COMMON_JOB_TABLE = 'job_common';
|
|
99
|
+
// Folds the statements that follow a CREATE TABLE (ADD PRIMARY KEY, ADD CONSTRAINT, CREATE
|
|
100
|
+
// [UNIQUE] INDEX on that table) into the CREATE TABLE itself, in CockroachDB's inline syntax. See
|
|
101
|
+
// inlineTableIndexes. It rewrites the same statements the standalone path runs rather than keeping
|
|
102
|
+
// a second copy of every definition, so the two paths cannot drift apart. Anything it does not
|
|
103
|
+
// recognise throws: silently dropping an index is the failure this must never have.
|
|
104
|
+
export const SERVER_VERSION = 'SELECT version() AS version';
|
|
105
|
+
export function inlineIntoCreateTable(createTable, statements) {
|
|
106
|
+
const clauses = statements
|
|
107
|
+
.flatMap(statement => statement.split(';'))
|
|
108
|
+
.map(statement => statement.trim().replace(/\s+/g, ' '))
|
|
109
|
+
.filter(Boolean)
|
|
110
|
+
.map(statement => {
|
|
111
|
+
let m = statement.match(/^ALTER TABLE \S+ ADD PRIMARY KEY (\(.+\))$/i);
|
|
112
|
+
if (m)
|
|
113
|
+
return `PRIMARY KEY ${m[1]}`;
|
|
114
|
+
m = statement.match(/^ALTER TABLE \S+ ADD CONSTRAINT (\S+) (.+)$/i);
|
|
115
|
+
if (m)
|
|
116
|
+
return `CONSTRAINT ${m[1]} ${m[2]}`;
|
|
117
|
+
m = statement.match(/^CREATE (UNIQUE )?INDEX (?:IF NOT EXISTS )?(\S+) ON \S+ (\(.+)$/i);
|
|
118
|
+
if (m) {
|
|
119
|
+
assert(!/\bINCLUDE\s*\(/i.test(m[3]), `inlineIntoCreateTable: covering index ${m[2]} has no inline form`);
|
|
120
|
+
return `${m[1] ?? ''}INDEX ${m[2]} ${m[3]}`;
|
|
121
|
+
}
|
|
122
|
+
throw new Error(`inlineIntoCreateTable: cannot inline: ${statement}`);
|
|
123
|
+
});
|
|
124
|
+
const close = createTable.lastIndexOf(')');
|
|
125
|
+
assert(close > 0, 'inlineIntoCreateTable: no column list to extend');
|
|
126
|
+
return `${createTable.slice(0, close).trimEnd()},\n ${clauses.join(',\n ')}\n ${createTable.slice(close)}`;
|
|
127
|
+
}
|
|
99
128
|
export function create(schema, version, options) {
|
|
100
129
|
const noPartitioning = options?.noTablePartitioning ?? false;
|
|
101
130
|
const noDeferrable = options?.noDeferrableConstraints ?? false;
|
|
102
131
|
const noLocks = options?.noAdvisoryLocks ?? false;
|
|
103
132
|
const noCovering = options?.noCoveringIndexes ?? false;
|
|
133
|
+
// Only meaningful without partitioning: a partitioned job table's indexes live on the partitions.
|
|
134
|
+
const inline = (options?.inlineTableIndexes ?? false) && noPartitioning;
|
|
135
|
+
if (inline) {
|
|
136
|
+
return locked(schema, createInline(schema, version, { createSchema: options?.createSchema, noDeferrable, noCovering }), undefined, noLocks);
|
|
137
|
+
}
|
|
104
138
|
const commands = [
|
|
105
139
|
options?.createSchema ? createSchema(schema) : '',
|
|
106
140
|
createEnumJobState(schema),
|
|
@@ -133,6 +167,30 @@ export function create(schema, version, options) {
|
|
|
133
167
|
];
|
|
134
168
|
return locked(schema, commands, undefined, noLocks);
|
|
135
169
|
}
|
|
170
|
+
// The install for inlineTableIndexes (CockroachDB): the same objects as create(), non-partitioned,
|
|
171
|
+
// with every table's indexes and constraints declared inside its CREATE TABLE.
|
|
172
|
+
function createInline(schema, version, options) {
|
|
173
|
+
return [
|
|
174
|
+
options.createSchema ? createSchema(schema) : '',
|
|
175
|
+
createEnumJobState(schema),
|
|
176
|
+
createClockFunction(schema),
|
|
177
|
+
createTableVersion(schema),
|
|
178
|
+
createTableQueue(schema),
|
|
179
|
+
createTableSchedule(schema),
|
|
180
|
+
createTableSubscription(schema),
|
|
181
|
+
createTableBam(schema),
|
|
182
|
+
inlineIntoCreateTable(createTableJob(schema, true), [
|
|
183
|
+
createPrimaryKeyJob(schema),
|
|
184
|
+
createTableJobIndexes(schema, options.noDeferrable, options.noCovering)
|
|
185
|
+
]),
|
|
186
|
+
inlineIntoCreateTable(createTableWarning(schema), [createIndexWarning(schema)]),
|
|
187
|
+
inlineIntoCreateTable(createTableQueueStats(schema, true), [createIndexQueueStats(schema, options.noCovering)]),
|
|
188
|
+
inlineIntoCreateTable(createTableJobDependency(schema), [createIndexJobDependencyParent(schema)]),
|
|
189
|
+
createQueueFunction(schema, true),
|
|
190
|
+
deleteQueueFunction(schema, true),
|
|
191
|
+
insertVersion(schema, version)
|
|
192
|
+
];
|
|
193
|
+
}
|
|
136
194
|
function createSchema(schema) {
|
|
137
195
|
return `CREATE SCHEMA IF NOT EXISTS ${schema}`;
|
|
138
196
|
}
|
|
@@ -1071,18 +1129,18 @@ export function updateQueue(schema) {
|
|
|
1071
1129
|
retry_limit = COALESCE((o.data->>'retryLimit')::int, retry_limit),
|
|
1072
1130
|
retry_delay = COALESCE((o.data->>'retryDelay')::int, retry_delay),
|
|
1073
1131
|
retry_backoff = COALESCE((o.data->>'retryBackoff')::bool, retry_backoff),
|
|
1074
|
-
retry_delay_max = CASE WHEN
|
|
1132
|
+
retry_delay_max = CASE WHEN (o.data -> 'retryDelayMax') IS NOT NULL
|
|
1075
1133
|
THEN (o.data->>'retryDelayMax')::int
|
|
1076
1134
|
ELSE retry_delay_max END,
|
|
1077
1135
|
expire_seconds = COALESCE((o.data->>'expireInSeconds')::int, expire_seconds),
|
|
1078
1136
|
retention_seconds = COALESCE((o.data->>'retentionSeconds')::int, retention_seconds),
|
|
1079
1137
|
deletion_seconds = COALESCE((o.data->>'deleteAfterSeconds')::int, deletion_seconds),
|
|
1080
1138
|
warning_queued = COALESCE((o.data->>'warningQueueSize')::int, warning_queued),
|
|
1081
|
-
heartbeat_seconds = CASE WHEN
|
|
1139
|
+
heartbeat_seconds = CASE WHEN (o.data -> 'heartbeatSeconds') IS NOT NULL
|
|
1082
1140
|
THEN (o.data->>'heartbeatSeconds')::int
|
|
1083
1141
|
ELSE heartbeat_seconds END,
|
|
1084
1142
|
notify = COALESCE((o.data->>'notify')::bool, notify),
|
|
1085
|
-
dead_letter = CASE WHEN
|
|
1143
|
+
dead_letter = CASE WHEN (o.data -> 'deadLetter') IS NOT NULL
|
|
1086
1144
|
THEN o.data->>'deadLetter'
|
|
1087
1145
|
ELSE dead_letter END,
|
|
1088
1146
|
updated_on = ${schema}.job_now()
|
|
@@ -1961,8 +2019,8 @@ export function insertJobs(schema, { table, name, returnId = true, notify = fals
|
|
|
1961
2019
|
// When notify is enabled we always RETURN start_after so the wrapper below can gate
|
|
1962
2020
|
// the NOTIFY on immediate availability, regardless of whether the caller wants ids.
|
|
1963
2021
|
const returning = notify ? 'RETURNING id, start_after' : returnId ? 'RETURNING id' : '';
|
|
1964
|
-
// A caller that knows the slot names it outright: the cron pass files
|
|
1965
|
-
//
|
|
2022
|
+
// A caller that knows the slot names it outright: the cron pass files an occurrence in the slot
|
|
2023
|
+
// the occurrence falls in, and an offset off now() cannot pin that, since now() here is
|
|
1966
2024
|
// insert time. Only in the statement the pass asks for, because insert() stringifies caller
|
|
1967
2025
|
// objects straight into the recordset below, so a column declared for everyone would be a live,
|
|
1968
2026
|
// undeclared and unvalidated option on the public path, where a bad value surfaces as a raw
|
|
@@ -2148,6 +2206,10 @@ function settledCountAndIds() {
|
|
|
2148
2206
|
// When `forceTerminal` is set, every re-inserted job goes straight to the terminal `failed` state
|
|
2149
2207
|
// regardless of remaining retries, so the dlq_jobs CTE routes it to the dead letter queue (if any)
|
|
2150
2208
|
// immediately. This backs the perJobResults `deadletter` disposition.
|
|
2209
|
+
//
|
|
2210
|
+
// Both re-inserts carry the source_* provenance columns. A job in a dead letter queue that its
|
|
2211
|
+
// own worker fails is deleted and re-inserted here like any other, and without them it would
|
|
2212
|
+
// forget which queue it came from and become unroutable for redrive.
|
|
2151
2213
|
function failJobsBody(schema, table, where, output, forceTerminal = false) {
|
|
2152
2214
|
const state = forceTerminal
|
|
2153
2215
|
? `'${JOB_STATES.failed}'::${schema}.job_state`
|
|
@@ -2193,7 +2255,11 @@ function failJobsBody(schema, table, where, output, forceTerminal = false) {
|
|
|
2193
2255
|
heartbeat_seconds,
|
|
2194
2256
|
blocked,
|
|
2195
2257
|
blocking,
|
|
2196
|
-
pending_dependencies
|
|
2258
|
+
pending_dependencies,
|
|
2259
|
+
source_name,
|
|
2260
|
+
source_id,
|
|
2261
|
+
source_created_on,
|
|
2262
|
+
source_retry_count
|
|
2197
2263
|
)
|
|
2198
2264
|
SELECT
|
|
2199
2265
|
id,
|
|
@@ -2233,7 +2299,11 @@ function failJobsBody(schema, table, where, output, forceTerminal = false) {
|
|
|
2233
2299
|
heartbeat_seconds,
|
|
2234
2300
|
blocked,
|
|
2235
2301
|
blocking,
|
|
2236
|
-
pending_dependencies
|
|
2302
|
+
pending_dependencies,
|
|
2303
|
+
source_name,
|
|
2304
|
+
source_id,
|
|
2305
|
+
source_created_on,
|
|
2306
|
+
source_retry_count
|
|
2237
2307
|
FROM deleted_jobs
|
|
2238
2308
|
ON CONFLICT DO NOTHING
|
|
2239
2309
|
RETURNING *
|
|
@@ -2268,7 +2338,11 @@ function failJobsBody(schema, table, where, output, forceTerminal = false) {
|
|
|
2268
2338
|
heartbeat_seconds,
|
|
2269
2339
|
blocked,
|
|
2270
2340
|
blocking,
|
|
2271
|
-
pending_dependencies
|
|
2341
|
+
pending_dependencies,
|
|
2342
|
+
source_name,
|
|
2343
|
+
source_id,
|
|
2344
|
+
source_created_on,
|
|
2345
|
+
source_retry_count
|
|
2272
2346
|
)
|
|
2273
2347
|
SELECT
|
|
2274
2348
|
id,
|
|
@@ -2299,7 +2373,11 @@ function failJobsBody(schema, table, where, output, forceTerminal = false) {
|
|
|
2299
2373
|
heartbeat_seconds,
|
|
2300
2374
|
blocked,
|
|
2301
2375
|
blocking,
|
|
2302
|
-
pending_dependencies
|
|
2376
|
+
pending_dependencies,
|
|
2377
|
+
source_name,
|
|
2378
|
+
source_id,
|
|
2379
|
+
source_created_on,
|
|
2380
|
+
source_retry_count
|
|
2303
2381
|
FROM deleted_jobs
|
|
2304
2382
|
WHERE id NOT IN (SELECT id from retried_jobs)
|
|
2305
2383
|
RETURNING *
|
|
@@ -2377,7 +2455,8 @@ const REBOUND_TIMESTAMPS_AS_TEXT = `started_on::text as started_on_text,
|
|
|
2377
2455
|
singleton_on::text as singleton_on_text,
|
|
2378
2456
|
created_on::text as created_on_text,
|
|
2379
2457
|
keep_until::text as keep_until_text,
|
|
2380
|
-
start_after::text as start_after_text
|
|
2458
|
+
start_after::text as start_after_text,
|
|
2459
|
+
source_created_on::text as source_created_on_text`;
|
|
2381
2460
|
export function selectJobsToFailById(schema, table) {
|
|
2382
2461
|
return {
|
|
2383
2462
|
text: `SELECT *, ${REBOUND_TIMESTAMPS_AS_TEXT}
|
|
@@ -2531,10 +2610,11 @@ export function insertRetryJob(schema, table) {
|
|
|
2531
2610
|
retry_backoff, retry_delay_max, start_after, started_on, singleton_key, singleton_on,
|
|
2532
2611
|
group_id, group_tier, expire_seconds, deletion_seconds, created_on, completed_on,
|
|
2533
2612
|
keep_until, policy, output, dead_letter,
|
|
2534
|
-
heartbeat_on, heartbeat_seconds, blocked, blocking, pending_dependencies
|
|
2613
|
+
heartbeat_on, heartbeat_seconds, blocked, blocking, pending_dependencies,
|
|
2614
|
+
source_name, source_id, source_created_on, source_retry_count
|
|
2535
2615
|
) VALUES (
|
|
2536
2616
|
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24,
|
|
2537
|
-
$25, $26, $27, $28, $29
|
|
2617
|
+
$25, $26, $27, $28, $29, $30, $31, $32, $33
|
|
2538
2618
|
) ON CONFLICT DO NOTHING
|
|
2539
2619
|
RETURNING id
|
|
2540
2620
|
`;
|
|
@@ -2549,10 +2629,24 @@ export function insertDeadLetterJob(schema) {
|
|
|
2549
2629
|
FROM ${schema}.queue q WHERE q.name = $1
|
|
2550
2630
|
`;
|
|
2551
2631
|
}
|
|
2632
|
+
// The candidate predicate shared by redriveJobs and previewRedrive, so a preview can never count
|
|
2633
|
+
// a job the redrive would skip or skip one it would move. Parameters: $1 dead letter queue,
|
|
2634
|
+
// $2 destination override, $3 sourceName, $4 data (jsonb containment), $5 createdBefore,
|
|
2635
|
+
// $6 ids. Each filter is off when its parameter is null. Only jobs not yet active are
|
|
2636
|
+
// candidates: a job the dead letter queue's own workers failed stays where it is.
|
|
2637
|
+
function redriveWhere() {
|
|
2638
|
+
return `j.name = $1
|
|
2639
|
+
AND j.state < '${JOB_STATES.active}'
|
|
2640
|
+
AND ($3::text IS NULL OR j.source_name = $3)
|
|
2641
|
+
AND ($4::jsonb IS NULL OR j.data @> $4::jsonb)
|
|
2642
|
+
AND ($5::timestamptz IS NULL OR j.created_on < $5)
|
|
2643
|
+
AND ($6::uuid[] IS NULL OR j.id = ANY($6::uuid[]))`;
|
|
2644
|
+
}
|
|
2552
2645
|
// Dead-letter redrive. Moves un-started jobs out of a dead-letter queue and
|
|
2553
2646
|
// re-creates them as fresh jobs on their original source queue (or $2 destination override),
|
|
2554
|
-
// oldest-first, capped at $
|
|
2555
|
-
//
|
|
2647
|
+
// oldest-first, capped at $7 and narrowed by the filters in redriveWhere. The JOIN in
|
|
2648
|
+
// `candidates` only matches jobs whose destination queue exists, so legacy/orphaned jobs
|
|
2649
|
+
// (NULL source_name, no override) are never deleted. They stay
|
|
2556
2650
|
// in the DLQ rather than being lost. Re-created jobs get a new id, `created` state, retry_count 0,
|
|
2557
2651
|
// cleared output, NULL source_*, and every queue-config column (retry/retention/policy/expiry/
|
|
2558
2652
|
// heartbeat/dead_letter) from the destination queue as it is configured now, per-job overrides
|
|
@@ -2571,11 +2665,9 @@ export function redriveJobs(schema, table) {
|
|
|
2571
2665
|
SELECT j.id
|
|
2572
2666
|
FROM ${schema}.${table} j
|
|
2573
2667
|
JOIN ${schema}.queue q ON q.name = COALESCE($2, j.source_name)
|
|
2574
|
-
WHERE
|
|
2575
|
-
AND j.state < '${JOB_STATES.active}'
|
|
2576
|
-
AND ($3::text IS NULL OR j.source_name = $3)
|
|
2668
|
+
WHERE ${redriveWhere()}
|
|
2577
2669
|
ORDER BY j.created_on
|
|
2578
|
-
LIMIT $
|
|
2670
|
+
LIMIT $7
|
|
2579
2671
|
FOR UPDATE OF j SKIP LOCKED
|
|
2580
2672
|
),
|
|
2581
2673
|
moved AS (
|
|
@@ -2593,12 +2685,65 @@ export function redriveJobs(schema, table) {
|
|
|
2593
2685
|
${schema}.job_now() + q.retention_seconds * interval '1s', q.deletion_seconds, q.policy,
|
|
2594
2686
|
m.singleton_key, m.group_id, m.group_tier, q.heartbeat_seconds, q.dead_letter
|
|
2595
2687
|
FROM moved m JOIN ${schema}.queue q ON q.name = COALESCE($2, m.source_name)
|
|
2688
|
+
ORDER BY m.created_on
|
|
2596
2689
|
ON CONFLICT DO NOTHING
|
|
2597
2690
|
RETURNING 1
|
|
2598
2691
|
)
|
|
2599
2692
|
SELECT count(*)::int AS moved FROM ins
|
|
2600
2693
|
`;
|
|
2601
2694
|
}
|
|
2695
|
+
// Distributed redrive (noMultiMutationCte). CockroachDB refuses redriveJobs' DELETE and INSERT on
|
|
2696
|
+
// one table in one statement, so the manager runs the three steps below in a transaction instead:
|
|
2697
|
+
// lock the candidates, re-create them, delete the originals. Same predicate, same order, same
|
|
2698
|
+
// limit, so the two paths move the same jobs. Insert-then-delete rather than the reverse keeps the
|
|
2699
|
+
// rows readable for the INSERT ... SELECT, and the new rows can never match the delete: they get
|
|
2700
|
+
// fresh ids. A job whose re-insert hits ON CONFLICT is still deleted, exactly as redriveJobs drops it.
|
|
2701
|
+
// Both inserts run oldest-first, so on Postgres the older of two colliding jobs is the one kept, on
|
|
2702
|
+
// either path. CockroachDB does not honor that ORDER BY when it resolves ON CONFLICT, so which one it
|
|
2703
|
+
// keeps is arbitrary; only the counts are the same there.
|
|
2704
|
+
export function selectRedriveCandidates(schema, table) {
|
|
2705
|
+
return `
|
|
2706
|
+
SELECT j.id
|
|
2707
|
+
FROM ${schema}.${table} j
|
|
2708
|
+
WHERE ${redriveWhere()}
|
|
2709
|
+
AND EXISTS (SELECT 1 FROM ${schema}.queue q WHERE q.name = COALESCE($2, j.source_name))
|
|
2710
|
+
ORDER BY j.created_on
|
|
2711
|
+
LIMIT $7
|
|
2712
|
+
FOR UPDATE
|
|
2713
|
+
`;
|
|
2714
|
+
}
|
|
2715
|
+
// $1 candidate ids, $2 destination override.
|
|
2716
|
+
export function insertRedrivenJobs(schema, table) {
|
|
2717
|
+
return `
|
|
2718
|
+
INSERT INTO ${schema}.job
|
|
2719
|
+
(name, data, priority, retry_limit, retry_backoff, retry_delay, retry_delay_max,
|
|
2720
|
+
expire_seconds, start_after, created_on, keep_until, deletion_seconds, policy, singleton_key, group_id, group_tier,
|
|
2721
|
+
heartbeat_seconds, dead_letter)
|
|
2722
|
+
SELECT COALESCE($2, m.source_name), m.data, m.priority, q.retry_limit, q.retry_backoff,
|
|
2723
|
+
q.retry_delay, q.retry_delay_max, q.expire_seconds, ${schema}.job_now(), ${schema}.job_now(),
|
|
2724
|
+
${schema}.job_now() + q.retention_seconds * interval '1s', q.deletion_seconds, q.policy,
|
|
2725
|
+
m.singleton_key, m.group_id, m.group_tier, q.heartbeat_seconds, q.dead_letter
|
|
2726
|
+
FROM ${schema}.${table} m JOIN ${schema}.queue q ON q.name = COALESCE($2, m.source_name)
|
|
2727
|
+
WHERE m.id = ANY($1::uuid[])
|
|
2728
|
+
ORDER BY m.created_on
|
|
2729
|
+
ON CONFLICT DO NOTHING
|
|
2730
|
+
RETURNING 1
|
|
2731
|
+
`;
|
|
2732
|
+
}
|
|
2733
|
+
// What a redrive with the same filter would do, without doing it: matching jobs grouped by the
|
|
2734
|
+
// queue each would land in. The LEFT JOIN keeps jobs the redrive would leave behind (no source
|
|
2735
|
+
// and no override, or a source queue since deleted) so they can be reported rather than vanish.
|
|
2736
|
+
export function previewRedrive(schema, table) {
|
|
2737
|
+
return `
|
|
2738
|
+
SELECT COALESCE($2, j.source_name) AS destination,
|
|
2739
|
+
(q.name IS NOT NULL) AS routable,
|
|
2740
|
+
count(*)::int AS count
|
|
2741
|
+
FROM ${schema}.${table} j
|
|
2742
|
+
LEFT JOIN ${schema}.queue q ON q.name = COALESCE($2, j.source_name)
|
|
2743
|
+
WHERE ${redriveWhere()}
|
|
2744
|
+
GROUP BY 1, 2
|
|
2745
|
+
`;
|
|
2746
|
+
}
|
|
2602
2747
|
export function deletion(schema, table, queues, noAdvisoryLocks) {
|
|
2603
2748
|
const sql = `
|
|
2604
2749
|
DELETE FROM ${schema}.${table}
|
|
@@ -2629,7 +2774,9 @@ export function retryJobs(schema, table) {
|
|
|
2629
2774
|
}
|
|
2630
2775
|
// Partial in-place edit of not-yet-active jobs, preserving id/state/singleton identity.
|
|
2631
2776
|
// The payload ($1) is a jsonb object of ONLY the fields the caller supplied; each column is
|
|
2632
|
-
// left untouched unless its key is present (`
|
|
2777
|
+
// left untouched unless its key is present (`(o.data -> 'key') IS NOT NULL`, which is true for a
|
|
2778
|
+
// key carrying JSON null and false only for an absent key, the same answer as jsonb_exists(); that
|
|
2779
|
+
// function does not exist on CockroachDB), so an update that carries just
|
|
2633
2780
|
// `data` never clobbers an existing start_after/priority/etc. Targeting is by id or
|
|
2634
2781
|
// singleton_key; when by key, `match` picks which of several pre-active matches to edit
|
|
2635
2782
|
// (newest/oldest = one row via ORDER BY + LIMIT; all = every match). When `notify` is set the
|
|
@@ -2654,7 +2801,7 @@ export function updateJob(schema, table, name, by, match, notify = false) {
|
|
|
2654
2801
|
// Resolve the incoming startAfter the same way insertJobs does (absolute date time vs.
|
|
2655
2802
|
// relative interval), falling back to the row's current start_after when not supplied.
|
|
2656
2803
|
const resolvedStartAfter = `
|
|
2657
|
-
CASE WHEN
|
|
2804
|
+
CASE WHEN (o.data -> 'startAfter') IS NOT NULL
|
|
2658
2805
|
THEN CASE WHEN ${isDateTimeString("o.data->>'startAfter'")}
|
|
2659
2806
|
THEN (o.data->>'startAfter')::timestamptz
|
|
2660
2807
|
ELSE ${schema}.job_now() + CAST(o.data->>'startAfter' AS interval) END
|
|
@@ -2679,13 +2826,13 @@ export function updateJob(schema, table, name, by, match, notify = false) {
|
|
|
2679
2826
|
),
|
|
2680
2827
|
upd AS (
|
|
2681
2828
|
UPDATE ${schema}.${table} job
|
|
2682
|
-
SET data = CASE WHEN
|
|
2829
|
+
SET data = CASE WHEN (o.data -> 'data') IS NOT NULL THEN o.data->'data' ELSE job.data END,
|
|
2683
2830
|
priority = COALESCE((o.data->>'priority')::int, job.priority),
|
|
2684
2831
|
start_after = ${resolvedStartAfter},
|
|
2685
2832
|
keep_until = CASE
|
|
2686
|
-
WHEN
|
|
2833
|
+
WHEN (o.data -> 'retentionSeconds') IS NOT NULL
|
|
2687
2834
|
THEN (${resolvedStartAfter}) + ((o.data->>'retentionSeconds')::int * interval '1s')
|
|
2688
|
-
WHEN
|
|
2835
|
+
WHEN (o.data -> 'startAfter') IS NOT NULL
|
|
2689
2836
|
THEN (${resolvedStartAfter}) + (job.keep_until - job.start_after)
|
|
2690
2837
|
ELSE job.keep_until END,
|
|
2691
2838
|
expire_seconds = COALESCE((o.data->>'expireInSeconds')::int, job.expire_seconds),
|
|
@@ -2693,11 +2840,11 @@ export function updateJob(schema, table, name, by, match, notify = false) {
|
|
|
2693
2840
|
retry_limit = COALESCE((o.data->>'retryLimit')::int, job.retry_limit),
|
|
2694
2841
|
retry_delay = COALESCE((o.data->>'retryDelay')::int, job.retry_delay),
|
|
2695
2842
|
retry_backoff = COALESCE((o.data->>'retryBackoff')::bool, job.retry_backoff),
|
|
2696
|
-
retry_delay_max = CASE WHEN
|
|
2697
|
-
dead_letter = CASE WHEN
|
|
2698
|
-
heartbeat_seconds = CASE WHEN
|
|
2699
|
-
group_id = CASE WHEN
|
|
2700
|
-
group_tier = CASE WHEN
|
|
2843
|
+
retry_delay_max = CASE WHEN (o.data -> 'retryDelayMax') IS NOT NULL THEN (o.data->>'retryDelayMax')::int ELSE job.retry_delay_max END,
|
|
2844
|
+
dead_letter = CASE WHEN (o.data -> 'deadLetter') IS NOT NULL THEN o.data->>'deadLetter' ELSE job.dead_letter END,
|
|
2845
|
+
heartbeat_seconds = CASE WHEN (o.data -> 'heartbeatSeconds') IS NOT NULL THEN (o.data->>'heartbeatSeconds')::int ELSE job.heartbeat_seconds END,
|
|
2846
|
+
group_id = CASE WHEN (o.data -> 'groupId') IS NOT NULL THEN o.data->>'groupId' ELSE job.group_id END,
|
|
2847
|
+
group_tier = CASE WHEN (o.data -> 'groupTier') IS NOT NULL THEN o.data->>'groupTier' ELSE job.group_tier END
|
|
2701
2848
|
FROM o
|
|
2702
2849
|
WHERE job.id IN (SELECT id FROM target)
|
|
2703
2850
|
AND job.state < '${JOB_STATES.active}'
|
package/dist/timekeeper.d.ts
CHANGED
|
@@ -127,9 +127,13 @@ declare class Timekeeper extends EventEmitter implements types.EventsMixin {
|
|
|
127
127
|
* job is what keeps the passes that follow from sending it a second time.
|
|
128
128
|
*
|
|
129
129
|
* The window rather than its most recent point, since a rule can put two occurrences inside it
|
|
130
|
-
* and a read that answers with one of them drops the other. A cron expression
|
|
131
|
-
*
|
|
132
|
-
*
|
|
130
|
+
* and a read that answers with one of them drops the other. A cron expression needs only the
|
|
131
|
+
* most recent one, although two of its occurrences either side of a minute fall in slots of
|
|
132
|
+
* their own: the minutes an expression matches are a minute apart at the closest, and passes run
|
|
133
|
+
* closer together than the window is wide, so one lands while a matching minute's first
|
|
134
|
+
* occurrence is still due and before any later minute has come round. It reads an occurrence of
|
|
135
|
+
* that minute and files the job under it. An occurrence this read passes over falls in a minute
|
|
136
|
+
* a pass before it answered for.
|
|
133
137
|
*/
|
|
134
138
|
private readOccurrences;
|
|
135
139
|
private reportSendItError;
|
package/dist/timekeeper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timekeeper.d.ts","sourceRoot":"","sources":["../src/timekeeper.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,aAAa,CAAA;AAItC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAKvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAGnC,eAAO,MAAM,MAAM;;CAElB,CAAA;AAwBD,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"timekeeper.d.ts","sourceRoot":"","sources":["../src/timekeeper.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,aAAa,CAAA;AAItC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAKvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAGnC,eAAO,MAAM,MAAM;;CAElB,CAAA;AAwBD,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,OAAO,CAAA;AA8MrC,cAAM,UAAW,SAAQ,YAAa,YAAW,KAAK,CAAC,WAAW;IAChE,EAAE,EAAE,KAAK,CAAC,SAAS,CAAA;IACnB,MAAM,EAAE,KAAK,CAAC,0BAA0B,CAAA;IACxC,OAAO,EAAE,OAAO,CAAA;IAEhB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,aAAa,CAAQ;IAS7B,OAAO,CAAC,eAAe,CAAoB;IAE3C,SAAS,SAAI;IACb,MAAM;;;;MAAS;gBAEF,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAQ5F,IAAI,YAAY,IAAK,OAAO,CAE3B;IAMD,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,cAAc,GASzB;IAEK,KAAK;IA4BL,IAAI;IAmCV,OAAO,CAAC,mBAAmB;IAUrB,cAAc;IA8Cd,MAAM;IAgDZ;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACG,IAAI,CAAE,WAAW,GAAE,OAAc;IAoIvC,YAAY,CAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,CAAC,YAAwC;IAIlG;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,iBAAiB;YAQX,QAAQ;YAsDR,aAAa;IAerB,YAAY,CAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAiBrE,WAAW,CAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAe1E;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,KAAK,CAAC,sBAA2B,GAAG,IAAI,EAAE;IA0C5E,QAAQ,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,KAAK,CAAC,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CzG,UAAU,CAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzD;AAED,eAAe,UAAU,CAAA"}
|
package/dist/timekeeper.js
CHANGED
|
@@ -469,46 +469,41 @@ class Timekeeper extends EventEmitter {
|
|
|
469
469
|
// The payload carries the schedule's key beside its queue name, so the send-it handler knows
|
|
470
470
|
// which row an occurrence came from and can record the job it produced.
|
|
471
471
|
const forwarded = { data: { name, key, data, options }, singletonKey: occurrenceKey(name, key) };
|
|
472
|
-
//
|
|
473
|
-
//
|
|
474
|
-
//
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
// boundary
|
|
472
|
+
// An occurrence can fall anywhere in the minute, a rule wherever it says and a cron
|
|
473
|
+
// expression on the second its sixth placeholder names, and a slot measured from insert
|
|
474
|
+
// time would then straddle it: two passes on either side of a slot boundary both find the occurrence
|
|
475
|
+
// inside the window and file it in a slot of their own, sending it twice. So an occurrence
|
|
476
|
+
// names the slot it falls in outright. An offset from the insert's own now() would not pin
|
|
477
|
+
// it: everything between reading the clock here and the insert committing counts towards
|
|
478
|
+
// the shifted instant, which lands in the next slot whenever that adds up to a boundary
|
|
479
|
+
// crossing.
|
|
480
|
+
//
|
|
481
|
+
// An instance on a release that files a cron occurrence from insert time agrees with this
|
|
482
|
+
// slot wherever that insert lands in the occurrence's own minute, and disagrees only where
|
|
483
|
+
// it would already have sent the occurrence twice, so a rolling upgrade sends no more jobs
|
|
484
|
+
// than the older release does alone.
|
|
479
485
|
//
|
|
480
486
|
// A missed occurrence names its slot for that reason and one more: it is older than the
|
|
481
487
|
// window, so a slot off insert time would file it in the slot the pass runs in, where it
|
|
482
|
-
// would collide with the
|
|
483
|
-
// than the one insert time computes, so it cannot.
|
|
488
|
+
// would collide with the job of the occurrence due now and be dropped. The slot it names is
|
|
489
|
+
// older than the one insert time computes, so it cannot.
|
|
484
490
|
//
|
|
485
491
|
// One job per slot rather than one per occurrence, which is the resolution the docs promise:
|
|
486
|
-
//
|
|
487
|
-
// fall in slots of their own each send.
|
|
492
|
+
// an expression finer than a slot sends a job a slot, and two occurrences inside one window
|
|
493
|
+
// that fall in slots of their own each send.
|
|
488
494
|
const slots = new Set();
|
|
489
495
|
if (missed !== null) {
|
|
490
496
|
slots.add(throttleSlot(missed));
|
|
491
497
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
slots.add(throttleSlot(occurrence));
|
|
498
|
-
}
|
|
498
|
+
// Through the set the missed occurrence went through, since the window's lower bound falls
|
|
499
|
+
// inside a slot rather than on one: an occurrence on the bound is missed, one a millisecond
|
|
500
|
+
// later is due, and both belong to the same slot and so to the same job.
|
|
501
|
+
for (const occurrence of due.occurrences) {
|
|
502
|
+
slots.add(throttleSlot(occurrence));
|
|
499
503
|
}
|
|
500
504
|
for (const slot of slots) {
|
|
501
505
|
scheduled.push({ ...forwarded, data: { ...forwarded.data, slot }, __singletonSlot: slot });
|
|
502
506
|
}
|
|
503
|
-
// Anything not read as a rule is read as cron, which is what a row carrying no kind at all
|
|
504
|
-
// means: the column defaults to cron, and a reader that cannot see it reads the row the way
|
|
505
|
-
// every release before the column did.
|
|
506
|
-
if (due.kind !== plans.SCHEDULE_KINDS.rrule && due.occurrences.length > 0) {
|
|
507
|
-
// A cron occurrence keeps the slot every release has always filed it in, since an instance
|
|
508
|
-
// still running an older one during a rolling upgrade computes that slot and nothing else,
|
|
509
|
-
// and a slot the two disagree on collapses nothing.
|
|
510
|
-
scheduled.push({ ...forwarded, singletonSeconds: OCCURRENCE_WINDOW_SECONDS });
|
|
511
|
-
}
|
|
512
507
|
}
|
|
513
508
|
this.warnedSchedules = stillBroken;
|
|
514
509
|
if (scheduled.length > 0 && !this.stopped) {
|
|
@@ -624,9 +619,13 @@ class Timekeeper extends EventEmitter {
|
|
|
624
619
|
* job is what keeps the passes that follow from sending it a second time.
|
|
625
620
|
*
|
|
626
621
|
* The window rather than its most recent point, since a rule can put two occurrences inside it
|
|
627
|
-
* and a read that answers with one of them drops the other. A cron expression
|
|
628
|
-
*
|
|
629
|
-
*
|
|
622
|
+
* and a read that answers with one of them drops the other. A cron expression needs only the
|
|
623
|
+
* most recent one, although two of its occurrences either side of a minute fall in slots of
|
|
624
|
+
* their own: the minutes an expression matches are a minute apart at the closest, and passes run
|
|
625
|
+
* closer together than the window is wide, so one lands while a matching minute's first
|
|
626
|
+
* occurrence is still due and before any later minute has come round. It reads an occurrence of
|
|
627
|
+
* that minute and files the job under it. An occurrence this read passes over falls in a minute
|
|
628
|
+
* a pass before it answered for.
|
|
630
629
|
*/
|
|
631
630
|
readOccurrences(expression, kind, tz, databaseTime) {
|
|
632
631
|
const window = new Date(databaseTime - OCCURRENCE_WINDOW_SECONDS * 1000);
|
|
@@ -684,9 +683,9 @@ class Timekeeper extends EventEmitter {
|
|
|
684
683
|
continue;
|
|
685
684
|
}
|
|
686
685
|
const id = JSON.stringify([name, key]);
|
|
687
|
-
// A cron occurrence in the due window names no slot, since
|
|
688
|
-
// clock. That slot is the one the pass
|
|
689
|
-
// catch-up occurrence can name, so the current one stands in for it.
|
|
686
|
+
// A cron occurrence in the due window written by an older instance names no slot, since that
|
|
687
|
+
// insert filed it from its own clock. That slot is the one the pass was running in, which is
|
|
688
|
+
// later than every slot a catch-up occurrence can name, so the current one stands in for it.
|
|
690
689
|
const filed = slot ?? throttleSlot(new Date(this.databaseTime));
|
|
691
690
|
const latest = fired.get(id);
|
|
692
691
|
if (latest === undefined || latest.slot <= filed) {
|
package/dist/types.d.ts
CHANGED
|
@@ -511,7 +511,12 @@ export interface FindJobsOptions extends ConnectionOptions {
|
|
|
511
511
|
data?: object;
|
|
512
512
|
queued?: boolean;
|
|
513
513
|
}
|
|
514
|
-
|
|
514
|
+
/**
|
|
515
|
+
* Which dead-lettered jobs a redrive is about, and where they go. Shared by
|
|
516
|
+
* `redrive()` and `previewRedrive()`, so a preview counts exactly what the
|
|
517
|
+
* redrive would move.
|
|
518
|
+
*/
|
|
519
|
+
export interface RedriveFilter extends ConnectionOptions {
|
|
515
520
|
/**
|
|
516
521
|
* Override queue to move jobs into. Defaults to each job's original source
|
|
517
522
|
* queue (`sourceName`). Jobs with no recorded source queue are only
|
|
@@ -523,6 +528,17 @@ export interface RedriveOptions extends ConnectionOptions {
|
|
|
523
528
|
* single dead letter queue collects from multiple sources.
|
|
524
529
|
*/
|
|
525
530
|
sourceName?: string;
|
|
531
|
+
/** Only redrive jobs whose payload contains this object, matched the same way as `findJobs()`. */
|
|
532
|
+
data?: object;
|
|
533
|
+
/**
|
|
534
|
+
* Only redrive jobs that arrived in the dead letter queue before this time. Also the way to
|
|
535
|
+
* drain a fixed set in several calls: jobs dead-lettered after it are never swept in.
|
|
536
|
+
*/
|
|
537
|
+
createdBefore?: Date;
|
|
538
|
+
/** Only redrive these jobs, by their id in the dead letter queue. */
|
|
539
|
+
ids?: string[];
|
|
540
|
+
}
|
|
541
|
+
export interface RedriveOptions extends RedriveFilter {
|
|
526
542
|
/**
|
|
527
543
|
* Maximum number of jobs to move in this call, oldest first. Loop or schedule
|
|
528
544
|
* repeated calls to drain at a controlled rate.
|
|
@@ -530,6 +546,20 @@ export interface RedriveOptions extends ConnectionOptions {
|
|
|
530
546
|
*/
|
|
531
547
|
limit?: number;
|
|
532
548
|
}
|
|
549
|
+
export interface RedrivePreview {
|
|
550
|
+
/** Every job the filter matches, routable or not. */
|
|
551
|
+
total: number;
|
|
552
|
+
/** Where the routable jobs would go, most first. */
|
|
553
|
+
destinations: {
|
|
554
|
+
name: string;
|
|
555
|
+
count: number;
|
|
556
|
+
}[];
|
|
557
|
+
/**
|
|
558
|
+
* Matching jobs a redrive would leave in place: no recorded source queue and no `destination`,
|
|
559
|
+
* or a source queue that no longer exists.
|
|
560
|
+
*/
|
|
561
|
+
unroutable: number;
|
|
562
|
+
}
|
|
533
563
|
export type InsertOptions = ConnectionOptions & {
|
|
534
564
|
returnId?: boolean;
|
|
535
565
|
};
|