velocious 1.0.587 → 1.0.589
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/README.md +3 -1
- package/build/background-jobs/main.js +6 -0
- package/build/background-jobs/store.js +55 -14
- package/build/database/drivers/mysql/index.js +1 -1
- package/build/database/pool/async-tracked-multi-connection.js +25 -1
- package/build/database/pool/base.js +1 -0
- package/build/environment-handlers/node.js +5 -6
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +7 -1
- package/build/src/background-jobs/store.d.ts +31 -10
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +53 -14
- package/build/src/database/drivers/mysql/index.js +2 -2
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +13 -0
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +23 -2
- package/build/src/database/pool/base.d.ts +10 -0
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +2 -1
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +6 -7
- package/package.json +2 -1
- package/scripts/verify-docker-dev-environment.js +22 -8
- package/src/background-jobs/main.js +6 -0
- package/src/background-jobs/store.js +55 -14
- package/src/database/drivers/mysql/index.js +1 -1
- package/src/database/pool/async-tracked-multi-connection.js +25 -1
- package/src/database/pool/base.js +1 -0
- package/src/environment-handlers/node.js +5 -6
package/README.md
CHANGED
|
@@ -1755,6 +1755,8 @@ database: {
|
|
|
1755
1755
|
|
|
1756
1756
|
`pool.max` caps live async-tracked connections for that pool and defaults to `10` when omitted. When the cap is reached, new checkouts wait until a matching checked-in connection can be handed over or capacity is freed. Set `pool.max` to `null` only when a process is deliberately allowed to open an unbounded number of database connections. The built-in debug endpoint reports each in-use connection's `checkedOutForMs`, each idle connection's `idleForMs`, and queued `pendingCheckouts[].waitingForMs` so production diagnostics can distinguish long-held checkouts from pool-capacity waits.
|
|
1757
1757
|
|
|
1758
|
+
Debug snapshots also expose cumulative checkout-wait and idle-reaper disposal telemetry. The [MySQL idle-reaping benchmark and methodology](docs/mysql-pool-idle-reaping-research.md) compare the 5-second default with 60 seconds and disabled reaping under a fixed cap; absent representative measured evidence, retain the 5-second default.
|
|
1759
|
+
|
|
1758
1760
|
# Websockets
|
|
1759
1761
|
|
|
1760
1762
|
Velocious includes a lightweight websocket entry point for API-style calls and server-side events.
|
|
@@ -2468,7 +2470,7 @@ backgroundJobs: {
|
|
|
2468
2470
|
}
|
|
2469
2471
|
```
|
|
2470
2472
|
|
|
2471
|
-
A job with no queue runs on `"default"`; a queue with no cap is unlimited. Caps are enforced through the durable per-key concurrency mechanism (the reserved `queue:<name>` key)
|
|
2473
|
+
A job with no queue runs on `"default"`; a queue with no cap is unlimited. Caps are enforced through the durable per-key concurrency mechanism (the reserved `queue:<name>` key) and hold regardless of how many worker processes run. Changing a cap is reconciled against the existing backlog only when `background-jobs-main` starts (serialized across processes with a database advisory lock); `db:migrate`, `db:tenants:*`, and routine store/application initialization never reconcile the backlog and stay read-only regarding queued jobs. Scheduled jobs honor a job's `static queue` too.
|
|
2472
2474
|
|
|
2473
2475
|
Set `priority` (default `0`) to dispatch a queue ahead of lower-priority ones regardless of enqueue order, so a small time-critical queue is never starved by a flood of low-priority work sharing a worker pool. Unlike Sidekiq's strict queue ordering, priority composes with the caps: a higher-priority queue already at its `maxConcurrent` is skipped and dispatch falls through to the next eligible job. See [docs/background-jobs.md](docs/background-jobs.md#queues-per-queue-concurrency-caps).
|
|
2474
2476
|
|
|
@@ -155,6 +155,12 @@ export default class BackgroundJobsMain {
|
|
|
155
155
|
await this.configuration.initialize({type: "background-jobs-main"})
|
|
156
156
|
await this.configuration.connectBeacon({peerType: "background-jobs-main"})
|
|
157
157
|
await this.store.ensureReady()
|
|
158
|
+
// Queue-cap changes are reconciled against the persisted backlog here, at
|
|
159
|
+
// main-process startup — the explicit lifecycle for applying queue
|
|
160
|
+
// configuration changes. The store serializes the adoption/release UPDATEs
|
|
161
|
+
// across processes with a database advisory lock, so concurrently started
|
|
162
|
+
// mains cannot interleave them.
|
|
163
|
+
await this.store.reconcileQueueConcurrency()
|
|
158
164
|
const server = net.createServer((socket) => this._handleConnection(socket))
|
|
159
165
|
this.server = server
|
|
160
166
|
|
|
@@ -158,6 +158,45 @@ export default class BackgroundJobsStore {
|
|
|
158
158
|
await this._ensureSchema(db)
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Reconciles queue-derived concurrency with the current configuration: the
|
|
163
|
+
* explicit lifecycle path that adopts/releases persisted queued jobs onto
|
|
164
|
+
* queue concurrency keys when `queues[name].maxConcurrent` is added, removed,
|
|
165
|
+
* or changed. Called by the background-jobs main process on startup — the
|
|
166
|
+
* deploy-time moment queue configuration changes take effect. Schema/tenant
|
|
167
|
+
* checks and routine connection initialization deliberately never run this:
|
|
168
|
+
* they stay read-only regarding queued job rows, because the broad
|
|
169
|
+
* adoption/release UPDATEs deadlock against active job processes under
|
|
170
|
+
* concurrent tenant initialization. Serialized across processes with a
|
|
171
|
+
* database advisory lock so concurrently started mains cannot interleave the
|
|
172
|
+
* UPDATEs; the per-instance memo only skips repeat work within this process.
|
|
173
|
+
* @returns {Promise<void>} - Resolves when reconciled.
|
|
174
|
+
*/
|
|
175
|
+
async reconcileQueueConcurrency() {
|
|
176
|
+
if (this._queueConcurrencyReconciled) return
|
|
177
|
+
|
|
178
|
+
await this.ensureReady()
|
|
179
|
+
|
|
180
|
+
await this._withDb(async (db) => {
|
|
181
|
+
const lockName = "background-jobs:queue-concurrency-reconcile"
|
|
182
|
+
const acquired = await db.acquireAdvisoryLock(lockName)
|
|
183
|
+
|
|
184
|
+
if (!acquired) throw new Error("Failed to acquire background job queue-concurrency reconcile lock")
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
await this._reconcileQueueConcurrency(db)
|
|
188
|
+
await this._reconcileConcurrency(db)
|
|
189
|
+
|
|
190
|
+
// Latch the memo only after BOTH steps succeed: if the count rebuild
|
|
191
|
+
// fails after adoption, a retry on this store must re-enter and repair
|
|
192
|
+
// the counts (adoption itself is idempotent).
|
|
193
|
+
this._queueConcurrencyReconciled = true
|
|
194
|
+
} finally {
|
|
195
|
+
await db.releaseAdvisoryLock(lockName)
|
|
196
|
+
}
|
|
197
|
+
})
|
|
198
|
+
}
|
|
199
|
+
|
|
161
200
|
/**
|
|
162
201
|
* Runs enqueue.
|
|
163
202
|
* @param {object} args - Options.
|
|
@@ -1119,7 +1158,6 @@ export default class BackgroundJobsStore {
|
|
|
1119
1158
|
await this._ensureScheduleKeysTable(db)
|
|
1120
1159
|
await this._ensureConcurrencyTable(db)
|
|
1121
1160
|
await this._ensureCountRevisionTable(db)
|
|
1122
|
-
await this._reconcileQueueConcurrency(db)
|
|
1123
1161
|
await this._reconcileConcurrency(db)
|
|
1124
1162
|
|
|
1125
1163
|
return
|
|
@@ -1130,7 +1168,6 @@ export default class BackgroundJobsStore {
|
|
|
1130
1168
|
await this._ensureScheduleKeysTable(db)
|
|
1131
1169
|
await this._ensureConcurrencyTable(db)
|
|
1132
1170
|
await this._ensureCountRevisionTable(db)
|
|
1133
|
-
await this._reconcileQueueConcurrency(db)
|
|
1134
1171
|
await this._reconcileConcurrency(db)
|
|
1135
1172
|
|
|
1136
1173
|
if (alreadyApplied) return
|
|
@@ -2114,16 +2151,22 @@ export default class BackgroundJobsStore {
|
|
|
2114
2151
|
}
|
|
2115
2152
|
|
|
2116
2153
|
/**
|
|
2117
|
-
* Reconciles queue-derived concurrency with the current configuration
|
|
2118
|
-
*
|
|
2119
|
-
*
|
|
2120
|
-
*
|
|
2121
|
-
* stay
|
|
2122
|
-
*
|
|
2123
|
-
*
|
|
2124
|
-
*
|
|
2125
|
-
*
|
|
2126
|
-
*
|
|
2154
|
+
* Reconciles queue-derived concurrency with the current configuration. Only
|
|
2155
|
+
* invoked through {@link reconcileQueueConcurrency} — the explicit lifecycle
|
|
2156
|
+
* path run at main-process startup under a cross-process advisory lock —
|
|
2157
|
+
* never from schema/tenant checks or routine connection initialization,
|
|
2158
|
+
* which stay read-only regarding queued job rows. The per-process memo is
|
|
2159
|
+
* latched by {@link reconcileQueueConcurrency} only after the following
|
|
2160
|
+
* count rebuild also succeeds, so a failed rebuild re-enters here on retry
|
|
2161
|
+
* (the adoption UPDATEs below are idempotent). Enqueue only consults config for new jobs, so a cap added, removed, or changed
|
|
2162
|
+
* while a backlog exists otherwise leaves persisted rows stale: pre-cap jobs
|
|
2163
|
+
* keep a null key and bypass the cap, post-removal jobs stay capped under a
|
|
2164
|
+
* now-unconfigured key, and a changed numeric cap stays stale until the next
|
|
2165
|
+
* enqueue. Bring the durable state in line with config: sync each configured
|
|
2166
|
+
* queue's stored cap, adopt not-yet-keyed non-terminal jobs onto their queue
|
|
2167
|
+
* key, and release non-terminal jobs from queue keys whose queue is no
|
|
2168
|
+
* longer capped. Runs before {@link _reconcileConcurrency} so the rebuilt
|
|
2169
|
+
* active counts reflect the adopted/released keys.
|
|
2127
2170
|
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
2128
2171
|
* @returns {Promise<void>} - Resolves when reconciled.
|
|
2129
2172
|
*/
|
|
@@ -2168,8 +2211,6 @@ export default class BackgroundJobsStore {
|
|
|
2168
2211
|
`WHERE ${keyColumn} = ${db.quote(concurrencyKey)} AND ${nonTerminal}`
|
|
2169
2212
|
)
|
|
2170
2213
|
}
|
|
2171
|
-
|
|
2172
|
-
this._queueConcurrencyReconciled = true
|
|
2173
2214
|
}
|
|
2174
2215
|
|
|
2175
2216
|
/**
|
|
@@ -201,7 +201,7 @@ export default class VelociousDatabaseDriversMysql extends Base{
|
|
|
201
201
|
*/
|
|
202
202
|
connectArgs() {
|
|
203
203
|
const args = this.getArgs()
|
|
204
|
-
const forward = ["database", "host", "password"]
|
|
204
|
+
const forward = ["database", "host", "password", "port"]
|
|
205
205
|
|
|
206
206
|
/**
|
|
207
207
|
* Connect args.
|
|
@@ -113,6 +113,14 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
113
113
|
*/
|
|
114
114
|
connectionClosePromises = new WeakMap()
|
|
115
115
|
|
|
116
|
+
/** Cumulative low-cardinality pool telemetry. */
|
|
117
|
+
telemetry = {
|
|
118
|
+
checkoutWaitCount: 0,
|
|
119
|
+
checkoutWaitMaxMs: 0,
|
|
120
|
+
checkoutWaitTotalMs: 0,
|
|
121
|
+
idleReapDisposalCount: 0
|
|
122
|
+
}
|
|
123
|
+
|
|
116
124
|
idSeq = 0
|
|
117
125
|
|
|
118
126
|
/**
|
|
@@ -559,10 +567,24 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
559
567
|
const checkout = this.pendingCheckouts.splice(index, 1)[0]
|
|
560
568
|
|
|
561
569
|
this.clearPendingCheckoutTimeout(checkout)
|
|
570
|
+
this.recordCheckoutWait(checkout)
|
|
562
571
|
|
|
563
572
|
return checkout
|
|
564
573
|
}
|
|
565
574
|
|
|
575
|
+
/**
|
|
576
|
+
* Records a completed queue wait without retaining per-checkout labels or samples.
|
|
577
|
+
* @param {PendingCheckout} checkout - Checkout leaving the pending queue.
|
|
578
|
+
* @returns {void}
|
|
579
|
+
*/
|
|
580
|
+
recordCheckoutWait(checkout) {
|
|
581
|
+
const waitedForMs = Math.max(0, Date.now() - checkout.enqueuedAt)
|
|
582
|
+
|
|
583
|
+
this.telemetry.checkoutWaitCount++
|
|
584
|
+
this.telemetry.checkoutWaitTotalMs += waitedForMs
|
|
585
|
+
this.telemetry.checkoutWaitMaxMs = Math.max(this.telemetry.checkoutWaitMaxMs, waitedForMs)
|
|
586
|
+
}
|
|
587
|
+
|
|
566
588
|
/**
|
|
567
589
|
* Runs start pending checkout timeout.
|
|
568
590
|
* @param {PendingCheckout} checkout - Pending checkout to time out.
|
|
@@ -1051,7 +1073,8 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
1051
1073
|
idleCount: this.connections.length + [...this.lifecycleRetainedConnections.values()].filter((connection) => connection.getIdSeq() === undefined).length,
|
|
1052
1074
|
inUseCount: Object.keys(this.connectionsInUse).length,
|
|
1053
1075
|
pendingCheckouts: this.pendingCheckoutDebugSnapshots(now),
|
|
1054
|
-
pendingCheckoutCount: this.pendingCheckouts.length
|
|
1076
|
+
pendingCheckoutCount: this.pendingCheckouts.length,
|
|
1077
|
+
telemetry: {...this.telemetry}
|
|
1055
1078
|
}
|
|
1056
1079
|
}
|
|
1057
1080
|
|
|
@@ -1307,6 +1330,7 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
1307
1330
|
async closeExpiredIdleConnections(expiredConnections) {
|
|
1308
1331
|
for (const connection of expiredConnections) {
|
|
1309
1332
|
await this.closeConnection(connection)
|
|
1333
|
+
this.telemetry.idleReapDisposalCount++
|
|
1310
1334
|
}
|
|
1311
1335
|
}
|
|
1312
1336
|
|
|
@@ -44,6 +44,7 @@ import baseMethodsForward from "./base-methods-forward.js"
|
|
|
44
44
|
* @property {Array<DatabasePoolPendingCheckoutDebugSnapshot>} [pendingCheckouts] - Waiting checkout snapshots.
|
|
45
45
|
* @property {number} pendingCheckoutCount - Number of queued checkout requests.
|
|
46
46
|
* @property {string} poolClass - Pool class name.
|
|
47
|
+
* @property {{checkoutWaitCount: number, checkoutWaitMaxMs: number, checkoutWaitTotalMs: number, idleReapDisposalCount: number}} [telemetry] - Cumulative pool lifecycle telemetry.
|
|
47
48
|
*/
|
|
48
49
|
export const POOL_CONFIGURATION_KEY = Symbol("velociousPoolConfigurationKey")
|
|
49
50
|
|
|
@@ -1052,12 +1052,11 @@ export default class VelociousEnvironmentHandlerNode extends Base{
|
|
|
1052
1052
|
// `db:tenants:migrate <tenant>`, which migrates only tenant databases — the
|
|
1053
1053
|
// framework store lives elsewhere (typically the default DB) and was already
|
|
1054
1054
|
// ensured by the plain `db:migrate` that precedes it. Reaching into it here would
|
|
1055
|
-
// open a fresh connection to that shared database
|
|
1056
|
-
//
|
|
1057
|
-
//
|
|
1058
|
-
//
|
|
1059
|
-
// (
|
|
1060
|
-
// store still creates it lazily if a plain migrate never ran.
|
|
1055
|
+
// open a fresh connection to that shared database once per tenant worker for
|
|
1056
|
+
// schema work that is already applied. So skip when the framework DB isn't in
|
|
1057
|
+
// this set; the runtime store still creates it lazily if a plain migrate never
|
|
1058
|
+
// ran. Queue-cap reconciliation never runs on this path at all — it belongs to
|
|
1059
|
+
// main-process startup (`BackgroundJobsStore#reconcileQueueConcurrency`).
|
|
1061
1060
|
if (!frameworkDb) return
|
|
1062
1061
|
|
|
1063
1062
|
// Reuse the connection db:migrate already holds for this database; opening a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/main.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/main.js"],"names":[],"mappings":"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"}
|