atomic-queues 1.4.1 → 1.6.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.
Files changed (229) hide show
  1. package/README.md +300 -283
  2. package/dist/decorators/constants.d.ts +17 -0
  3. package/dist/decorators/constants.d.ts.map +1 -0
  4. package/dist/decorators/constants.js +23 -0
  5. package/dist/decorators/constants.js.map +1 -0
  6. package/dist/decorators/entity.decorators.d.ts +88 -0
  7. package/dist/decorators/entity.decorators.d.ts.map +1 -0
  8. package/dist/decorators/entity.decorators.js +150 -0
  9. package/dist/decorators/entity.decorators.js.map +1 -0
  10. package/dist/decorators/index.d.ts +9 -1
  11. package/dist/decorators/index.d.ts.map +1 -1
  12. package/dist/decorators/index.js +9 -1
  13. package/dist/decorators/index.js.map +1 -1
  14. package/dist/decorators/interfaces.d.ts +130 -0
  15. package/dist/decorators/interfaces.d.ts.map +1 -0
  16. package/dist/decorators/interfaces.js +3 -0
  17. package/dist/decorators/interfaces.js.map +1 -0
  18. package/dist/decorators/job.decorators.d.ts +60 -0
  19. package/dist/decorators/job.decorators.d.ts.map +1 -0
  20. package/dist/decorators/job.decorators.js +97 -0
  21. package/dist/decorators/job.decorators.js.map +1 -0
  22. package/dist/decorators/legacy.decorators.d.ts +36 -0
  23. package/dist/decorators/legacy.decorators.d.ts.map +1 -0
  24. package/dist/decorators/legacy.decorators.js +61 -0
  25. package/dist/decorators/legacy.decorators.js.map +1 -0
  26. package/dist/decorators/metadata-readers.d.ts +31 -0
  27. package/dist/decorators/metadata-readers.d.ts.map +1 -0
  28. package/dist/decorators/metadata-readers.js +53 -0
  29. package/dist/decorators/metadata-readers.js.map +1 -0
  30. package/dist/decorators/registry.d.ts +2 -0
  31. package/dist/decorators/registry.d.ts.map +1 -0
  32. package/dist/decorators/registry.js +6 -0
  33. package/dist/decorators/registry.js.map +1 -0
  34. package/dist/decorators/scaler.decorators.d.ts +65 -0
  35. package/dist/decorators/scaler.decorators.d.ts.map +1 -0
  36. package/dist/decorators/scaler.decorators.js +103 -0
  37. package/dist/decorators/scaler.decorators.js.map +1 -0
  38. package/dist/decorators/type-guards.d.ts +18 -0
  39. package/dist/decorators/type-guards.d.ts.map +1 -0
  40. package/dist/decorators/type-guards.js +32 -0
  41. package/dist/decorators/type-guards.js.map +1 -0
  42. package/dist/decorators/utils.d.ts +20 -0
  43. package/dist/decorators/utils.d.ts.map +1 -0
  44. package/dist/decorators/utils.js +98 -0
  45. package/dist/decorators/utils.js.map +1 -0
  46. package/dist/decorators/worker.decorators.d.ts +58 -0
  47. package/dist/decorators/worker.decorators.d.ts.map +1 -0
  48. package/dist/decorators/worker.decorators.js +92 -0
  49. package/dist/decorators/worker.decorators.js.map +1 -0
  50. package/dist/domain/interfaces/config.interfaces.d.ts +188 -0
  51. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -0
  52. package/dist/domain/interfaces/config.interfaces.js +3 -0
  53. package/dist/domain/interfaces/config.interfaces.js.map +1 -0
  54. package/dist/domain/interfaces/cqrs.interfaces.d.ts +7 -0
  55. package/dist/domain/interfaces/cqrs.interfaces.d.ts.map +1 -0
  56. package/dist/domain/interfaces/cqrs.interfaces.js +3 -0
  57. package/dist/domain/interfaces/cqrs.interfaces.js.map +1 -0
  58. package/dist/domain/interfaces/event.interfaces.d.ts +71 -0
  59. package/dist/domain/interfaces/event.interfaces.d.ts.map +1 -0
  60. package/dist/domain/interfaces/event.interfaces.js +3 -0
  61. package/dist/domain/interfaces/event.interfaces.js.map +1 -0
  62. package/dist/domain/interfaces/index-tracking.interfaces.d.ts +69 -0
  63. package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +1 -0
  64. package/dist/domain/interfaces/index-tracking.interfaces.js +3 -0
  65. package/dist/domain/interfaces/index-tracking.interfaces.js.map +1 -0
  66. package/dist/domain/interfaces/index.d.ts +12 -0
  67. package/dist/domain/interfaces/index.d.ts.map +1 -0
  68. package/dist/domain/interfaces/index.js +28 -0
  69. package/dist/domain/interfaces/index.js.map +1 -0
  70. package/dist/domain/interfaces/job.interfaces.d.ts +76 -0
  71. package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -0
  72. package/dist/domain/interfaces/job.interfaces.js +3 -0
  73. package/dist/domain/interfaces/job.interfaces.js.map +1 -0
  74. package/dist/domain/interfaces/lock.interfaces.d.ts +54 -0
  75. package/dist/domain/interfaces/lock.interfaces.d.ts.map +1 -0
  76. package/dist/domain/interfaces/lock.interfaces.js +3 -0
  77. package/dist/domain/interfaces/lock.interfaces.js.map +1 -0
  78. package/dist/domain/interfaces/process.interfaces.d.ts +44 -0
  79. package/dist/domain/interfaces/process.interfaces.d.ts.map +1 -0
  80. package/dist/domain/interfaces/process.interfaces.js +3 -0
  81. package/dist/domain/interfaces/process.interfaces.js.map +1 -0
  82. package/dist/domain/interfaces/queue.interfaces.d.ts +46 -0
  83. package/dist/domain/interfaces/queue.interfaces.d.ts.map +1 -0
  84. package/dist/domain/interfaces/queue.interfaces.js +3 -0
  85. package/dist/domain/interfaces/queue.interfaces.js.map +1 -0
  86. package/dist/domain/interfaces/scaling.interfaces.d.ts +62 -0
  87. package/dist/domain/interfaces/scaling.interfaces.d.ts.map +1 -0
  88. package/dist/domain/interfaces/scaling.interfaces.js +3 -0
  89. package/dist/domain/interfaces/scaling.interfaces.js.map +1 -0
  90. package/dist/domain/interfaces/utility.types.d.ts +15 -0
  91. package/dist/domain/interfaces/utility.types.d.ts.map +1 -0
  92. package/dist/domain/interfaces/utility.types.js +3 -0
  93. package/dist/domain/interfaces/utility.types.js.map +1 -0
  94. package/dist/domain/interfaces/worker.interfaces.d.ts +120 -0
  95. package/dist/domain/interfaces/worker.interfaces.d.ts.map +1 -0
  96. package/dist/domain/interfaces/worker.interfaces.js +3 -0
  97. package/dist/domain/interfaces/worker.interfaces.js.map +1 -0
  98. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  99. package/dist/module/atomic-queues.module.js +5 -0
  100. package/dist/module/atomic-queues.module.js.map +1 -1
  101. package/dist/services/cron-manager/cron-manager.service.d.ts +5 -4
  102. package/dist/services/cron-manager/cron-manager.service.d.ts.map +1 -1
  103. package/dist/services/cron-manager/cron-manager.service.js +26 -57
  104. package/dist/services/cron-manager/cron-manager.service.js.map +1 -1
  105. package/dist/services/index-manager/index-manager.service.d.ts +0 -4
  106. package/dist/services/index-manager/index-manager.service.d.ts.map +1 -1
  107. package/dist/services/index-manager/index-manager.service.js +4 -16
  108. package/dist/services/index-manager/index-manager.service.js.map +1 -1
  109. package/dist/services/index.d.ts +1 -0
  110. package/dist/services/index.d.ts.map +1 -1
  111. package/dist/services/index.js +1 -0
  112. package/dist/services/index.js.map +1 -1
  113. package/dist/services/processor-discovery/decorator-discovery.service.d.ts +40 -0
  114. package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +1 -0
  115. package/dist/services/processor-discovery/decorator-discovery.service.js +191 -0
  116. package/dist/services/processor-discovery/decorator-discovery.service.js.map +1 -0
  117. package/dist/services/processor-discovery/index.d.ts +4 -0
  118. package/dist/services/processor-discovery/index.d.ts.map +1 -1
  119. package/dist/services/processor-discovery/index.js +4 -0
  120. package/dist/services/processor-discovery/index.js.map +1 -1
  121. package/dist/services/processor-discovery/processor-discovery.service.d.ts +30 -138
  122. package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +1 -1
  123. package/dist/services/processor-discovery/processor-discovery.service.js +125 -502
  124. package/dist/services/processor-discovery/processor-discovery.service.js.map +1 -1
  125. package/dist/services/processor-discovery/processor-registry.d.ts +58 -0
  126. package/dist/services/processor-discovery/processor-registry.d.ts.map +1 -0
  127. package/dist/services/processor-discovery/processor-registry.js +74 -0
  128. package/dist/services/processor-discovery/processor-registry.js.map +1 -0
  129. package/dist/services/processor-discovery/scaling-registration.service.d.ts +60 -0
  130. package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +1 -0
  131. package/dist/services/processor-discovery/scaling-registration.service.js +261 -0
  132. package/dist/services/processor-discovery/scaling-registration.service.js.map +1 -0
  133. package/dist/services/processor-discovery/worker-factory.service.d.ts +54 -0
  134. package/dist/services/processor-discovery/worker-factory.service.d.ts.map +1 -0
  135. package/dist/services/processor-discovery/worker-factory.service.js +185 -0
  136. package/dist/services/processor-discovery/worker-factory.service.js.map +1 -0
  137. package/dist/services/queue-bus/entity-target.d.ts +58 -0
  138. package/dist/services/queue-bus/entity-target.d.ts.map +1 -0
  139. package/dist/services/queue-bus/entity-target.js +109 -0
  140. package/dist/services/queue-bus/entity-target.js.map +1 -0
  141. package/dist/services/queue-bus/index.d.ts +4 -0
  142. package/dist/services/queue-bus/index.d.ts.map +1 -1
  143. package/dist/services/queue-bus/index.js +4 -0
  144. package/dist/services/queue-bus/index.js.map +1 -1
  145. package/dist/services/queue-bus/queue-bus.service.d.ts +9 -145
  146. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  147. package/dist/services/queue-bus/queue-bus.service.js +23 -311
  148. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  149. package/dist/services/queue-bus/queue-bus.types.d.ts +40 -0
  150. package/dist/services/queue-bus/queue-bus.types.d.ts.map +1 -0
  151. package/dist/services/queue-bus/queue-bus.types.js +3 -0
  152. package/dist/services/queue-bus/queue-bus.types.js.map +1 -0
  153. package/dist/services/queue-bus/queue-bus.utils.d.ts +34 -0
  154. package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -0
  155. package/dist/services/queue-bus/queue-bus.utils.js +82 -0
  156. package/dist/services/queue-bus/queue-bus.utils.js.map +1 -0
  157. package/dist/services/queue-bus/queue-target.d.ts +61 -0
  158. package/dist/services/queue-bus/queue-target.d.ts.map +1 -0
  159. package/dist/services/queue-bus/queue-target.js +123 -0
  160. package/dist/services/queue-bus/queue-target.js.map +1 -0
  161. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +23 -6
  162. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +1 -1
  163. package/dist/services/queue-events-manager/queue-events-manager.service.js +69 -37
  164. package/dist/services/queue-events-manager/queue-events-manager.service.js.map +1 -1
  165. package/dist/services/resource-lock/resource-lock.service.d.ts +0 -4
  166. package/dist/services/resource-lock/resource-lock.service.d.ts.map +1 -1
  167. package/dist/services/resource-lock/resource-lock.service.js +4 -16
  168. package/dist/services/resource-lock/resource-lock.service.js.map +1 -1
  169. package/dist/services/service-queue/index.d.ts +1 -0
  170. package/dist/services/service-queue/index.d.ts.map +1 -1
  171. package/dist/services/service-queue/index.js +1 -0
  172. package/dist/services/service-queue/index.js.map +1 -1
  173. package/dist/services/service-queue/service-queue.service.d.ts +2 -35
  174. package/dist/services/service-queue/service-queue.service.d.ts.map +1 -1
  175. package/dist/services/service-queue/service-queue.service.js +17 -49
  176. package/dist/services/service-queue/service-queue.service.js.map +1 -1
  177. package/dist/services/service-queue/service-queue.types.d.ts +32 -0
  178. package/dist/services/service-queue/service-queue.types.d.ts.map +1 -0
  179. package/dist/services/service-queue/service-queue.types.js +27 -0
  180. package/dist/services/service-queue/service-queue.types.js.map +1 -0
  181. package/dist/services/spawn-queue/index.d.ts +2 -0
  182. package/dist/services/spawn-queue/index.d.ts.map +1 -0
  183. package/dist/services/spawn-queue/index.js +18 -0
  184. package/dist/services/spawn-queue/index.js.map +1 -0
  185. package/dist/services/spawn-queue/spawn-queue.service.d.ts +119 -0
  186. package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +1 -0
  187. package/dist/services/spawn-queue/spawn-queue.service.js +273 -0
  188. package/dist/services/spawn-queue/spawn-queue.service.js.map +1 -0
  189. package/dist/services/worker-manager/worker-manager.service.d.ts +18 -3
  190. package/dist/services/worker-manager/worker-manager.service.d.ts.map +1 -1
  191. package/dist/services/worker-manager/worker-manager.service.js +46 -21
  192. package/dist/services/worker-manager/worker-manager.service.js.map +1 -1
  193. package/dist/utils/async.utils.d.ts +51 -0
  194. package/dist/utils/async.utils.d.ts.map +1 -0
  195. package/dist/utils/async.utils.js +87 -0
  196. package/dist/utils/async.utils.js.map +1 -0
  197. package/dist/utils/helpers.d.ts +4 -123
  198. package/dist/utils/helpers.d.ts.map +1 -1
  199. package/dist/utils/helpers.js +18 -226
  200. package/dist/utils/helpers.js.map +1 -1
  201. package/dist/utils/index.d.ts +1 -0
  202. package/dist/utils/index.d.ts.map +1 -1
  203. package/dist/utils/index.js +1 -0
  204. package/dist/utils/index.js.map +1 -1
  205. package/dist/utils/job.utils.d.ts +50 -0
  206. package/dist/utils/job.utils.d.ts.map +1 -0
  207. package/dist/utils/job.utils.js +89 -0
  208. package/dist/utils/job.utils.js.map +1 -0
  209. package/dist/utils/naming.utils.d.ts +21 -0
  210. package/dist/utils/naming.utils.d.ts.map +1 -0
  211. package/dist/utils/naming.utils.js +38 -0
  212. package/dist/utils/naming.utils.js.map +1 -0
  213. package/dist/utils/rate-limit.utils.d.ts +9 -0
  214. package/dist/utils/rate-limit.utils.d.ts.map +1 -0
  215. package/dist/utils/rate-limit.utils.js +30 -0
  216. package/dist/utils/rate-limit.utils.js.map +1 -0
  217. package/dist/utils/redis.utils.d.ts +3 -0
  218. package/dist/utils/redis.utils.d.ts.map +1 -0
  219. package/dist/utils/redis.utils.js +14 -0
  220. package/dist/utils/redis.utils.js.map +1 -0
  221. package/package.json +17 -17
  222. package/dist/decorators/decorators.d.ts +0 -489
  223. package/dist/decorators/decorators.d.ts.map +0 -1
  224. package/dist/decorators/decorators.js +0 -680
  225. package/dist/decorators/decorators.js.map +0 -1
  226. package/dist/domain/interfaces.d.ts +0 -748
  227. package/dist/domain/interfaces.d.ts.map +0 -1
  228. package/dist/domain/interfaces.js +0 -19
  229. package/dist/domain/interfaces.js.map +0 -1
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var SpawnQueueService_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.SpawnQueueService = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const bullmq_1 = require("bullmq");
22
+ const ioredis_1 = __importDefault(require("ioredis"));
23
+ const constants_1 = require("../constants");
24
+ const worker_manager_1 = require("../worker-manager");
25
+ /**
26
+ * SpawnQueueService
27
+ *
28
+ * Replaces the cron-based / service-queue-based worker creation model
29
+ * with a distributed spawn queue.
30
+ *
31
+ * Architecture:
32
+ * - One shared BullMQ queue: `{prefix}-spawn-queue`
33
+ * - EVERY pod runs a BullMQ Worker on this queue (concurrency: 1)
34
+ * - When QueueEventsManager detects a job for an entity with no worker,
35
+ * it enqueues a spawn-worker job here
36
+ * - BullMQ distributes spawn jobs round-robin across pods
37
+ * - Whichever pod picks up the job creates the entity worker locally
38
+ * - Duplicate protection: before creating, check if worker already exists
39
+ * (heartbeat key in Redis). If yes, skip. Race-safe because BullMQ
40
+ * guarantees only ONE worker processes each job.
41
+ *
42
+ * Benefits over the old cron approach:
43
+ * - Workers naturally distribute across all pods
44
+ * - No single leader / no single point of bottleneck
45
+ * - No distributed lock / leader election needed
46
+ * - Reactive (spawn on demand) rather than polling
47
+ *
48
+ * Idle cleanup:
49
+ * - Each pod runs a local interval that checks its OWN workers' idle time
50
+ * - Idle workers are closed directly (no cross-pod signaling needed)
51
+ */
52
+ let SpawnQueueService = SpawnQueueService_1 = class SpawnQueueService {
53
+ constructor(redis, config, workerManager) {
54
+ this.redis = redis;
55
+ this.config = config;
56
+ this.workerManager = workerManager;
57
+ this.logger = new common_1.Logger(SpawnQueueService_1.name);
58
+ this.spawnQueue = null;
59
+ this.spawnWorker = null;
60
+ this.idleSweepInterval = null;
61
+ /** Handler registered by ProcessorDiscoveryService */
62
+ this.spawnHandler = null;
63
+ /** Idle timeout per entity type (set by ProcessorDiscovery) */
64
+ this.idleTimeouts = new Map();
65
+ /** Reference to QueueEventsManager for hot-cache eviction on idle close */
66
+ this.queueEventsManager = null;
67
+ this.keyPrefix = config.keyPrefix || 'aq';
68
+ this.spawnQueueName = `${this.keyPrefix}-spawn-queue`;
69
+ this.defaultIdleTimeoutSeconds = 15;
70
+ this.idleSweepIntervalMs = config.cronInterval ?? 5000;
71
+ }
72
+ /**
73
+ * Set the QueueEventsManagerService reference for hot-cache eviction.
74
+ * Called by ProcessorDiscoveryService to avoid circular dependency.
75
+ */
76
+ setQueueEventsManager(manager) {
77
+ this.queueEventsManager = manager;
78
+ }
79
+ /**
80
+ * Register the handler that creates entity workers.
81
+ * Called by ProcessorDiscoveryService during init.
82
+ */
83
+ registerSpawnHandler(handler) {
84
+ this.spawnHandler = handler;
85
+ this.logger.debug('Spawn handler registered');
86
+ }
87
+ /**
88
+ * Register idle timeout for an entity type.
89
+ */
90
+ registerIdleTimeout(entityType, timeoutSeconds) {
91
+ this.idleTimeouts.set(entityType, timeoutSeconds);
92
+ }
93
+ /**
94
+ * Initialize: create the spawn queue and start the spawn worker + idle sweep.
95
+ */
96
+ async onModuleInit() {
97
+ // Create the spawn queue
98
+ this.spawnQueue = new bullmq_1.Queue(this.spawnQueueName, {
99
+ connection: this.redis.duplicate(),
100
+ defaultJobOptions: {
101
+ removeOnComplete: true,
102
+ removeOnFail: 100,
103
+ attempts: 2,
104
+ backoff: { type: 'fixed', delay: 500 },
105
+ },
106
+ });
107
+ // Create a BullMQ worker on this pod to consume spawn jobs
108
+ this.spawnWorker = new bullmq_1.Worker(this.spawnQueueName, async (job) => {
109
+ await this.handleSpawnJob(job);
110
+ }, {
111
+ connection: this.redis.duplicate(),
112
+ concurrency: 3, // Allow a few concurrent spawns
113
+ });
114
+ this.spawnWorker.on('ready', () => {
115
+ this.logger.log(`Spawn worker ready on this pod — listening to ${this.spawnQueueName}`);
116
+ });
117
+ this.spawnWorker.on('failed', (job, error) => {
118
+ this.logger.error(`Spawn job ${job?.id} failed: ${error.message}`);
119
+ });
120
+ // Start the local idle sweep
121
+ this.startIdleSweep();
122
+ this.logger.log('SpawnQueueService initialized');
123
+ }
124
+ /**
125
+ * Enqueue a spawn-worker request.
126
+ * Called by QueueEventsManager when a job arrives for an entity with no worker.
127
+ *
128
+ * Uses deduplication: jobId = `spawn-{entityType}-{entityId}` so BullMQ
129
+ * will not create a duplicate if one is already queued/active.
130
+ */
131
+ async requestSpawn(entityType, entityId) {
132
+ if (!this.spawnQueue) {
133
+ this.logger.warn('Spawn queue not initialized yet');
134
+ return;
135
+ }
136
+ const jobId = `spawn-${entityType}-${entityId}`;
137
+ try {
138
+ await this.spawnQueue.add('spawn-worker', { entityType, entityId }, { jobId });
139
+ this.logger.debug(`Enqueued spawn request: ${entityType}/${entityId}`);
140
+ }
141
+ catch (error) {
142
+ // Duplicate job ID → already queued, that's fine
143
+ const msg = error.message;
144
+ if (msg.includes('duplicate')) {
145
+ this.logger.debug(`Spawn already queued for ${entityType}/${entityId}`);
146
+ }
147
+ else {
148
+ this.logger.error(`Failed to enqueue spawn: ${msg}`);
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Handle a spawn job picked up by this pod's worker.
154
+ */
155
+ async handleSpawnJob(job) {
156
+ const { entityType, entityId } = job.data;
157
+ this.logger.log(`Processing spawn job: ${entityType}/${entityId} (job ${job.id})`);
158
+ if (!this.spawnHandler) {
159
+ this.logger.warn('No spawn handler registered — cannot create worker');
160
+ return;
161
+ }
162
+ try {
163
+ await this.spawnHandler(entityType, entityId);
164
+ }
165
+ catch (error) {
166
+ this.logger.error(`Spawn handler failed for ${entityType}/${entityId}: ${error.message}`);
167
+ throw error; // Let BullMQ retry
168
+ }
169
+ }
170
+ /**
171
+ * Direct spawn — bypasses the BullMQ queue entirely.
172
+ * Called by QueueEventsManagerService when it wins the atomic claim
173
+ * and wants to create the worker on this pod immediately.
174
+ */
175
+ async handleSpawnJobDirect(entityType, entityId) {
176
+ if (!this.spawnHandler) {
177
+ this.logger.warn('No spawn handler registered — cannot create worker (direct)');
178
+ return;
179
+ }
180
+ this.logger.log(`Direct spawn: ${entityType}/${entityId} (no queue round-trip)`);
181
+ await this.spawnHandler(entityType, entityId);
182
+ }
183
+ // =========================================================================
184
+ // IDLE SWEEP — runs locally on each pod
185
+ // =========================================================================
186
+ /**
187
+ * Start the local idle sweep interval.
188
+ * Periodically checks all workers on THIS pod and closes idle ones.
189
+ */
190
+ startIdleSweep() {
191
+ this.idleSweepInterval = setInterval(async () => {
192
+ try {
193
+ await this.sweepIdleWorkers();
194
+ }
195
+ catch (error) {
196
+ this.logger.error(`Idle sweep error: ${error.message}`);
197
+ }
198
+ }, this.idleSweepIntervalMs);
199
+ this.logger.debug(`Idle sweep started (interval: ${this.idleSweepIntervalMs}ms)`);
200
+ }
201
+ /**
202
+ * Sweep all workers on this pod, close any that are idle.
203
+ */
204
+ async sweepIdleWorkers() {
205
+ const localWorkers = await this.workerManager.getNodeWorkers();
206
+ if (localWorkers.length === 0)
207
+ return;
208
+ for (const workerName of localWorkers) {
209
+ // Skip the spawn worker itself
210
+ if (workerName.includes('spawn'))
211
+ continue;
212
+ // Determine idle timeout for this worker's entity type
213
+ const entityType = this.extractEntityTypeFromWorkerName(workerName);
214
+ const idleTimeout = entityType
215
+ ? (this.idleTimeouts.get(entityType) ?? this.defaultIdleTimeoutSeconds)
216
+ : this.defaultIdleTimeoutSeconds;
217
+ const isIdle = await this.workerManager.isWorkerIdle(workerName, idleTimeout);
218
+ if (isIdle) {
219
+ const idleSeconds = await this.workerManager.getWorkerIdleSeconds(workerName);
220
+ this.logger.log(`[IdleSweep] Closing idle worker: ${workerName} (idle ${idleSeconds}s >= ${idleTimeout}s threshold)`);
221
+ // Evict from hot cache BEFORE closing so the next job triggers a fresh spawn
222
+ if (this.queueEventsManager) {
223
+ this.queueEventsManager.evictFromHotCache(workerName);
224
+ }
225
+ await this.workerManager.signalWorkerClose(workerName);
226
+ }
227
+ }
228
+ }
229
+ /**
230
+ * Extract entity type from worker name.
231
+ * Worker names follow pattern: {entityType}-{entityId}-worker
232
+ * e.g., "candy-abc123-worker" → "candy"
233
+ */
234
+ extractEntityTypeFromWorkerName(workerName) {
235
+ // Worker names from config: e.g., "candy-{uuid}-worker"
236
+ // We need to match against registered entity types
237
+ for (const entityType of this.idleTimeouts.keys()) {
238
+ if (workerName.startsWith(`${entityType}-`)) {
239
+ return entityType;
240
+ }
241
+ }
242
+ return null;
243
+ }
244
+ // =========================================================================
245
+ // CLEANUP
246
+ // =========================================================================
247
+ async onModuleDestroy() {
248
+ // Stop idle sweep
249
+ if (this.idleSweepInterval) {
250
+ clearInterval(this.idleSweepInterval);
251
+ this.idleSweepInterval = null;
252
+ }
253
+ // Close spawn worker
254
+ if (this.spawnWorker) {
255
+ await this.spawnWorker.close();
256
+ this.spawnWorker = null;
257
+ }
258
+ // Close spawn queue
259
+ if (this.spawnQueue) {
260
+ await this.spawnQueue.close();
261
+ this.spawnQueue = null;
262
+ }
263
+ this.logger.log('SpawnQueueService destroyed');
264
+ }
265
+ };
266
+ exports.SpawnQueueService = SpawnQueueService;
267
+ exports.SpawnQueueService = SpawnQueueService = SpawnQueueService_1 = __decorate([
268
+ (0, common_1.Injectable)(),
269
+ __param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
270
+ __param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
271
+ __metadata("design:paramtypes", [ioredis_1.default, Object, worker_manager_1.WorkerManagerService])
272
+ ], SpawnQueueService);
273
+ //# sourceMappingURL=spawn-queue.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-queue.service.js","sourceRoot":"","sources":["../../../src/services/spawn-queue/spawn-queue.service.ts"],"names":[],"mappings":"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"}
@@ -60,10 +60,18 @@ export declare class WorkerManagerService implements IWorkerManager, OnModuleIni
60
60
  createWorker(options: IWorkerCreationOptions): Promise<Worker>;
61
61
  /**
62
62
  * Check if a worker exists and is alive (has valid heartbeat).
63
- * Checks across ALL nodes, not just the current node, to prevent
64
- * multiple nodes from creating duplicate workers for the same entity.
63
+ * Uses a global alive key for O(1) lookup instead of KEYS scan.
64
+ * The alive key is maintained alongside the per-node heartbeat key.
65
65
  */
66
66
  workerExists(workerName: string): Promise<boolean>;
67
+ /**
68
+ * Atomically claim a worker slot using SET NX.
69
+ * Returns true if this pod claimed the slot (and should create the worker).
70
+ * Returns false if another pod already claimed it.
71
+ * Uses a separate claim key (not the alive key) so that workerExists()
72
+ * doesn't see the claim as an existing worker before creation finishes.
73
+ */
74
+ claimWorkerSlot(workerName: string, ttlSeconds?: number): Promise<boolean>;
67
75
  /**
68
76
  * Check if a worker exists on THIS node specifically.
69
77
  * Use this when you need node-local checks (e.g., for cleanup).
@@ -170,9 +178,16 @@ export declare class WorkerManagerService implements IWorkerManager, OnModuleIni
170
178
  */
171
179
  private createSubscriberClient;
172
180
  /**
173
- * Get the Redis key for a worker's heartbeat.
181
+ * Get the Redis key for a worker's heartbeat (per-node).
174
182
  */
175
183
  private getWorkerKey;
184
+ /**
185
+ * Get the global alive key for O(1) worker existence check.
186
+ * This key has the same TTL as the per-node heartbeat and is
187
+ * refreshed in the same pipeline. It replaces the O(N) KEYS scan
188
+ * with a single O(1) EXISTS call.
189
+ */
190
+ private getGlobalAliveKey;
176
191
  /**
177
192
  * Get the shutdown channel for a worker.
178
193
  */
@@ -1 +1 @@
1
- {"version":3,"file":"worker-manager.service.d.ts","sourceRoot":"","sources":["../../../src/services/worker-manager/worker-manager.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-manager.service.d.ts","sourceRoot":"","sources":["../../../src/services/worker-manager/worker-manager.service.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ const common_1 = require("@nestjs/common");
21
21
  const bullmq_1 = require("bullmq");
22
22
  const ioredis_1 = __importDefault(require("ioredis"));
23
23
  const uuid_1 = require("uuid");
24
+ const utils_1 = require("../../utils");
24
25
  const constants_1 = require("../constants");
25
26
  /**
26
27
  * WorkerManagerService
@@ -63,7 +64,7 @@ let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
63
64
  this.lastJobCompletedAt = new Map();
64
65
  this.subscriberClient = null;
65
66
  this.nodeId = this.generateNodeId();
66
- this.keyPrefix = config.keyPrefix || 'aq';
67
+ this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
67
68
  this.logger.log(`WorkerManager initialized with nodeId: ${this.nodeId}`);
68
69
  }
69
70
  /**
@@ -127,15 +128,26 @@ let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
127
128
  }
128
129
  /**
129
130
  * Check if a worker exists and is alive (has valid heartbeat).
130
- * Checks across ALL nodes, not just the current node, to prevent
131
- * multiple nodes from creating duplicate workers for the same entity.
131
+ * Uses a global alive key for O(1) lookup instead of KEYS scan.
132
+ * The alive key is maintained alongside the per-node heartbeat key.
132
133
  */
133
134
  async workerExists(workerName) {
134
- // Check across all nodes, not just this node
135
- // Pattern: {prefix}:worker:*:{workerName}
136
- const pattern = `${this.keyPrefix}:worker:*:${workerName}`;
137
- const keys = await this.redis.keys(pattern);
138
- return keys.length > 0;
135
+ const aliveKey = this.getGlobalAliveKey(workerName);
136
+ const exists = await this.redis.exists(aliveKey);
137
+ return exists === 1;
138
+ }
139
+ /**
140
+ * Atomically claim a worker slot using SET NX.
141
+ * Returns true if this pod claimed the slot (and should create the worker).
142
+ * Returns false if another pod already claimed it.
143
+ * Uses a separate claim key (not the alive key) so that workerExists()
144
+ * doesn't see the claim as an existing worker before creation finishes.
145
+ */
146
+ async claimWorkerSlot(workerName, ttlSeconds = 10) {
147
+ const claimKey = `${this.keyPrefix}:worker-claim:${workerName}`;
148
+ // SET NX — only succeeds if key doesn't exist (atomic claim)
149
+ const result = await this.redis.set(claimKey, this.nodeId, 'EX', ttlSeconds, 'NX');
150
+ return result === 'OK';
139
151
  }
140
152
  /**
141
153
  * Check if a worker exists on THIS node specifically.
@@ -233,14 +245,13 @@ let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
233
245
  */
234
246
  async resetWorkerHeartbeat(workerName, ttlSeconds) {
235
247
  const ttl = ttlSeconds || this.config.workerDefaults?.heartbeatTTL || 3;
236
- const key = this.getWorkerKey(workerName);
237
- const exists = await this.redis.exists(key);
238
- if (exists) {
239
- await this.redis.expire(key, ttl);
240
- }
241
- else {
242
- await this.redis.set(key, '1', 'EX', ttl);
243
- }
248
+ const nodeKey = this.getWorkerKey(workerName);
249
+ const aliveKey = this.getGlobalAliveKey(workerName);
250
+ // Pipeline: refresh both keys in a single Redis round-trip
251
+ const pipeline = this.redis.pipeline();
252
+ pipeline.set(nodeKey, '1', 'EX', ttl);
253
+ pipeline.set(aliveKey, this.nodeId, 'EX', ttl);
254
+ await pipeline.exec();
244
255
  // Update local state
245
256
  const state = this.workerStates.get(workerName);
246
257
  if (state) {
@@ -251,10 +262,15 @@ let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
251
262
  * Remove worker heartbeat (mark as dead).
252
263
  */
253
264
  async removeWorkerHeartbeat(workerName) {
254
- const key = this.getWorkerKey(workerName);
255
- await this.redis.del(key);
256
- // Also remove idle counter
257
- await this.removeWorkerIdleCounter(workerName);
265
+ const nodeKey = this.getWorkerKey(workerName);
266
+ const aliveKey = this.getGlobalAliveKey(workerName);
267
+ const idleKey = this.getWorkerIdleKey(workerName);
268
+ // Pipeline: remove all keys in a single round-trip
269
+ const pipeline = this.redis.pipeline();
270
+ pipeline.del(nodeKey);
271
+ pipeline.del(aliveKey);
272
+ pipeline.del(idleKey);
273
+ await pipeline.exec();
258
274
  this.logger.debug(`Removed heartbeat for worker: ${workerName}`);
259
275
  }
260
276
  // =========================================================================
@@ -392,11 +408,20 @@ let WorkerManagerService = WorkerManagerService_1 = class WorkerManagerService {
392
408
  return this.redis.duplicate();
393
409
  }
394
410
  /**
395
- * Get the Redis key for a worker's heartbeat.
411
+ * Get the Redis key for a worker's heartbeat (per-node).
396
412
  */
397
413
  getWorkerKey(workerName) {
398
414
  return `${this.keyPrefix}:worker:${this.nodeId}:${workerName}`;
399
415
  }
416
+ /**
417
+ * Get the global alive key for O(1) worker existence check.
418
+ * This key has the same TTL as the per-node heartbeat and is
419
+ * refreshed in the same pipeline. It replaces the O(N) KEYS scan
420
+ * with a single O(1) EXISTS call.
421
+ */
422
+ getGlobalAliveKey(workerName) {
423
+ return `${this.keyPrefix}:worker-alive:${workerName}`;
424
+ }
400
425
  /**
401
426
  * Get the shutdown channel for a worker.
402
427
  */
@@ -1 +1 @@
1
- {"version":3,"file":"worker-manager.service.js","sourceRoot":"","sources":["../../../src/services/worker-manager/worker-manager.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-manager.service.js","sourceRoot":"","sources":["../../../src/services/worker-manager/worker-manager.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Sleep utility for async operations.
3
+ */
4
+ export declare function sleep(ms: number): Promise<void>;
5
+ /**
6
+ * Retry utility with exponential backoff.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const result = await retry(
11
+ * () => someUnreliableOperation(),
12
+ * { maxAttempts: 3, baseDelay: 1000 },
13
+ * );
14
+ * ```
15
+ */
16
+ export declare function retry<T>(fn: () => Promise<T>, options: {
17
+ maxAttempts: number;
18
+ baseDelay: number;
19
+ maxDelay?: number;
20
+ exponential?: boolean;
21
+ onRetry?: (attempt: number, error: Error) => void;
22
+ }): Promise<T>;
23
+ /**
24
+ * Batch utility for processing items in chunks.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * await batch(items, 10, async (chunk) => {
29
+ * await Promise.all(chunk.map(processItem));
30
+ * });
31
+ * ```
32
+ */
33
+ export declare function batch<T>(items: T[], batchSize: number, processor: (batch: T[]) => Promise<void>): Promise<void>;
34
+ /**
35
+ * Create a timeout promise that rejects after specified ms.
36
+ */
37
+ export declare function createTimeout(ms: number, message?: string): Promise<never>;
38
+ /**
39
+ * Run an operation with a timeout.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const result = await withTimeout(
44
+ * someAsyncOperation(),
45
+ * 5000,
46
+ * 'Operation took too long',
47
+ * );
48
+ * ```
49
+ */
50
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number, message?: string): Promise<T>;
51
+ //# sourceMappingURL=async.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.utils.d.ts","sourceRoot":"","sources":["../../src/utils/async.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE;IACP,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnD,GACA,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAED;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAwB,GAAG,OAAO,CAAC,KAAK,CAAC,CAIzF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC,CAEZ"}