velocious 1.0.536 → 1.0.538
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 +1 -1
- package/build/database/drivers/base.js +47 -3
- package/build/database/drivers/mysql/index.js +13 -0
- package/build/database/record/index.js +25 -0
- package/build/environment-handlers/node/cli/commands/generate/base-models.js +58 -0
- package/build/src/database/drivers/base.d.ts +17 -2
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +42 -4
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +11 -1
- package/build/src/database/record/index.d.ts +16 -0
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +23 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +49 -1
- package/package.json +1 -1
- package/src/database/drivers/base.js +47 -3
- package/src/database/drivers/mysql/index.js +13 -0
- package/src/database/record/index.js +25 -0
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +58 -0
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Database models with migrations and validations
|
|
6
6
|
* Database models that work almost the same in frontend and backend
|
|
7
7
|
* Built-in record auditing for model lifecycle changes (see [docs/auditing.md](docs/auditing.md))
|
|
8
|
-
* Declarative state machines for models (see [docs/state-machine.md](docs/state-machine.md))
|
|
8
|
+
* Declarative state machines for models, with typed event methods generated into the base model (see [docs/state-machine.md](docs/state-machine.md))
|
|
9
9
|
* Migrations for schema changes and UTC datetime storage (see [docs/database-migrations.md](docs/database-migrations.md))
|
|
10
10
|
* External packages (engines) that contribute data models, frontend-model resources and migrations to a consuming app (see [docs/packages.md](docs/packages.md))
|
|
11
11
|
* Controllers and views for HTTP endpoints
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
* @typedef {object} RetryableDatabaseErrorResult
|
|
48
48
|
* @property {boolean} retry - Whether the error should be retried.
|
|
49
49
|
* @property {boolean} reconnect - Whether to reconnect before retrying.
|
|
50
|
+
* @property {boolean} [deadlock] - Whether the error is a transaction deadlock/lock-wait-timeout that should retry the whole transaction.
|
|
50
51
|
* @property {number} [maxTries] - Override the max retry attempts.
|
|
51
52
|
* @property {number} [waitMs] - Wait time before retrying in milliseconds.
|
|
52
53
|
*/
|
|
@@ -851,11 +852,50 @@ export default class VelociousDatabaseDriversBase {
|
|
|
851
852
|
}
|
|
852
853
|
|
|
853
854
|
/**
|
|
854
|
-
* Runs transaction.
|
|
855
|
+
* Runs a callback inside a database transaction (or a savepoint when already inside one).
|
|
856
|
+
* The outermost transaction retries the whole callback on a deadlock / lock-wait-timeout,
|
|
857
|
+
* because such errors roll the entire transaction back and the standard recovery is to
|
|
858
|
+
* restart it. Nested savepoints let the deadlock bubble up to this outer retry.
|
|
855
859
|
* @param {() => Promise<void>} callback - Callback function.
|
|
856
|
-
* @returns {Promise<?>} - Resolves with the transaction.
|
|
860
|
+
* @returns {Promise<?>} - Resolves with the transaction result.
|
|
857
861
|
*/
|
|
858
862
|
async transaction(callback) {
|
|
863
|
+
if (this._transactionsCount > 0) {
|
|
864
|
+
return await this._runTransactionAttempt(callback)
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
const maxAttempts = 5
|
|
868
|
+
let attempt = 0
|
|
869
|
+
|
|
870
|
+
while (true) {
|
|
871
|
+
attempt++
|
|
872
|
+
|
|
873
|
+
try {
|
|
874
|
+
return await this._runTransactionAttempt(callback)
|
|
875
|
+
} catch (error) {
|
|
876
|
+
const retryInfo = error instanceof Error ? this.retryableDatabaseError(error) : {retry: false, reconnect: false}
|
|
877
|
+
|
|
878
|
+
if (retryInfo.deadlock && attempt < maxAttempts && this._transactionsCount == 0) {
|
|
879
|
+
const baseWaitMs = typeof retryInfo.waitMs == "number" && retryInfo.waitMs > 0 ? retryInfo.waitMs : 50
|
|
880
|
+
|
|
881
|
+
this.logger.warn(`Retrying transaction after deadlock (attempt ${attempt}/${maxAttempts})`)
|
|
882
|
+
await wait(baseWaitMs * attempt)
|
|
883
|
+
continue
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
throw error
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* Runs a single transaction attempt: starts a transaction (or a savepoint when nested), runs
|
|
893
|
+
* `callback`, and commits — rolling back on error. {@link transaction} wraps this with deadlock
|
|
894
|
+
* retry at the outermost level.
|
|
895
|
+
* @param {() => Promise<void>} callback - Callback function.
|
|
896
|
+
* @returns {Promise<?>} - Resolves with the transaction result.
|
|
897
|
+
*/
|
|
898
|
+
async _runTransactionAttempt(callback) {
|
|
859
899
|
const savePointName = this.generateSavePointName()
|
|
860
900
|
/**
|
|
861
901
|
* Callback frame.
|
|
@@ -919,7 +959,11 @@ export default class VelociousDatabaseDriversBase {
|
|
|
919
959
|
}
|
|
920
960
|
}
|
|
921
961
|
|
|
922
|
-
if
|
|
962
|
+
// Only roll back if a transaction is still open. A nested savepoint whose rollback failed
|
|
963
|
+
// falls back to rolling back the whole transaction (above), which already closed it and
|
|
964
|
+
// dropped the count to 0; rolling back again here would issue a second ROLLBACK and drive
|
|
965
|
+
// `_transactionsCount` below zero, which would then defeat the outermost deadlock-retry guard.
|
|
966
|
+
if (transactionStarted && !transactionRolledBack && this._transactionsCount > 0) {
|
|
923
967
|
this.logger.debug("Rollback transaction")
|
|
924
968
|
await this.rollbackTransaction()
|
|
925
969
|
}
|
|
@@ -333,6 +333,19 @@ export default class VelociousDatabaseDriversMysql extends Base{
|
|
|
333
333
|
return {retry: true, reconnect: false, waitMs: 50}
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
+
// A deadlock or lock-wait-timeout aborts the whole transaction; it must be retried at the
|
|
337
|
+
// transaction level (re-running the callback), not the query level, so flag it as such and
|
|
338
|
+
// keep `retry` false so an in-transaction query does not retry against the dead transaction.
|
|
339
|
+
if (
|
|
340
|
+
errorCode == "ER_LOCK_DEADLOCK" ||
|
|
341
|
+
errorCode == "ER_LOCK_WAIT_TIMEOUT" ||
|
|
342
|
+
message.includes("ER_LOCK_DEADLOCK") ||
|
|
343
|
+
message.includes("Deadlock found") ||
|
|
344
|
+
message.includes("Lock wait timeout exceeded")
|
|
345
|
+
) {
|
|
346
|
+
return {retry: false, reconnect: false, deadlock: true, waitMs: 50}
|
|
347
|
+
}
|
|
348
|
+
|
|
336
349
|
shouldReconnect ||= (
|
|
337
350
|
errorCode == "ECONNREFUSED" ||
|
|
338
351
|
message.includes("ECONNREFUSED") ||
|
|
@@ -629,6 +629,31 @@ class VelociousDatabaseRecord {
|
|
|
629
629
|
stateMachine(this, definition)
|
|
630
630
|
}
|
|
631
631
|
|
|
632
|
+
/**
|
|
633
|
+
* Returns this model's state machine definition, or null when it declares none.
|
|
634
|
+
* `Model.stateMachine(...)` overrides this on classes that declare a machine.
|
|
635
|
+
* @returns {import("./state-machine.js").StateMachineDefinition | null} - The state machine definition, or null when none is declared.
|
|
636
|
+
*/
|
|
637
|
+
static getStateMachineDefinition() {
|
|
638
|
+
return null
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* Returns this model's state column, or null when it declares no state machine.
|
|
643
|
+
* @returns {string | null} - The state column name, or null when no state machine is declared.
|
|
644
|
+
*/
|
|
645
|
+
static getStateMachineColumn() {
|
|
646
|
+
return null
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* Returns this model's declared state names (empty when it has no state machine).
|
|
651
|
+
* @returns {string[]} - The declared state names, or an empty array when no state machine is declared.
|
|
652
|
+
*/
|
|
653
|
+
static getStateMachineStateNames() {
|
|
654
|
+
return []
|
|
655
|
+
}
|
|
656
|
+
|
|
632
657
|
/**
|
|
633
658
|
* Maintains a counter column on a `belongsTo` parent as the sum of a per-record
|
|
634
659
|
* magnitude, kept current by atomic increments diffed on every create/update/
|
|
@@ -399,6 +399,64 @@ export default class DbGenerateModel extends BaseCommand {
|
|
|
399
399
|
methodsCount++
|
|
400
400
|
}
|
|
401
401
|
|
|
402
|
+
// State-machine event methods. `Model.stateMachine(...)` registers these on the model's
|
|
403
|
+
// own prototype at runtime; those override the stubs below (declared on the base class),
|
|
404
|
+
// so these throwing stubs never execute. They exist only so call sites typecheck without
|
|
405
|
+
// the consumer hand-writing boilerplate. Guarded on the own `_stateMachineDefinition`
|
|
406
|
+
// property so a subclass without its own machine doesn't re-emit the parent's events.
|
|
407
|
+
const stateMachineDefinition = Object.prototype.hasOwnProperty.call(modelClass, "_stateMachineDefinition")
|
|
408
|
+
? modelClass.getStateMachineDefinition()
|
|
409
|
+
: null
|
|
410
|
+
|
|
411
|
+
if (stateMachineDefinition) {
|
|
412
|
+
for (const eventName of Object.keys(stateMachineDefinition.events)) {
|
|
413
|
+
// `stateMachine()` installs event methods with `proto[eventName]`, so it accepts
|
|
414
|
+
// event keys that aren't valid JavaScript identifiers (e.g. "retry-build"). Those
|
|
415
|
+
// can't be written as class methods without producing an unparseable file, so skip
|
|
416
|
+
// them here — they still work at runtime via bracket access, just untyped.
|
|
417
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(eventName)) {
|
|
418
|
+
console.warn(`Skipping generated state-machine methods for event '${eventName}' on '${modelClass.name}': the event name is not a valid JavaScript identifier.`)
|
|
419
|
+
|
|
420
|
+
continue
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const capitalizedEvent = eventName.charAt(0).toUpperCase() + eventName.slice(1)
|
|
424
|
+
|
|
425
|
+
if (methodsCount > 0) {
|
|
426
|
+
fileContent += "\n"
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
fileContent += " /**\n"
|
|
430
|
+
fileContent += " * @abstract\n"
|
|
431
|
+
fileContent += " * @returns {void}\n"
|
|
432
|
+
fileContent += " */\n"
|
|
433
|
+
fileContent += ` ${eventName}() { throw new Error("Not implemented") }\n`
|
|
434
|
+
|
|
435
|
+
fileContent += "\n"
|
|
436
|
+
fileContent += " /**\n"
|
|
437
|
+
fileContent += " * @abstract\n"
|
|
438
|
+
fileContent += " * @returns {Promise<void>}\n"
|
|
439
|
+
fileContent += " */\n"
|
|
440
|
+
fileContent += ` ${eventName}AndSave() { throw new Error("Not implemented") }\n`
|
|
441
|
+
|
|
442
|
+
fileContent += "\n"
|
|
443
|
+
fileContent += " /**\n"
|
|
444
|
+
fileContent += " * @abstract\n"
|
|
445
|
+
fileContent += " * @returns {boolean}\n"
|
|
446
|
+
fileContent += " */\n"
|
|
447
|
+
fileContent += ` can${capitalizedEvent}() { throw new Error("Not implemented") }\n`
|
|
448
|
+
|
|
449
|
+
fileContent += "\n"
|
|
450
|
+
fileContent += " /**\n"
|
|
451
|
+
fileContent += " * @abstract\n"
|
|
452
|
+
fileContent += " * @returns {Promise<boolean>}\n"
|
|
453
|
+
fileContent += " */\n"
|
|
454
|
+
fileContent += ` can${capitalizedEvent}Async() { throw new Error("Not implemented") }\n`
|
|
455
|
+
|
|
456
|
+
methodsCount++
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
402
460
|
fileContent += "}\n"
|
|
403
461
|
|
|
404
462
|
await fs.writeFile(modelPath, fileContent)
|
|
@@ -406,11 +406,22 @@ export default class VelociousDatabaseDriversBase {
|
|
|
406
406
|
*/
|
|
407
407
|
tableExists(tableName: string): Promise<boolean>;
|
|
408
408
|
/**
|
|
409
|
-
* Runs transaction.
|
|
409
|
+
* Runs a callback inside a database transaction (or a savepoint when already inside one).
|
|
410
|
+
* The outermost transaction retries the whole callback on a deadlock / lock-wait-timeout,
|
|
411
|
+
* because such errors roll the entire transaction back and the standard recovery is to
|
|
412
|
+
* restart it. Nested savepoints let the deadlock bubble up to this outer retry.
|
|
410
413
|
* @param {() => Promise<void>} callback - Callback function.
|
|
411
|
-
* @returns {Promise<?>} - Resolves with the transaction.
|
|
414
|
+
* @returns {Promise<?>} - Resolves with the transaction result.
|
|
412
415
|
*/
|
|
413
416
|
transaction(callback: () => Promise<void>): Promise<unknown>;
|
|
417
|
+
/**
|
|
418
|
+
* Runs a single transaction attempt: starts a transaction (or a savepoint when nested), runs
|
|
419
|
+
* `callback`, and commits — rolling back on error. {@link transaction} wraps this with deadlock
|
|
420
|
+
* retry at the outermost level.
|
|
421
|
+
* @param {() => Promise<void>} callback - Callback function.
|
|
422
|
+
* @returns {Promise<?>} - Resolves with the transaction result.
|
|
423
|
+
*/
|
|
424
|
+
_runTransactionAttempt(callback: () => Promise<void>): Promise<unknown>;
|
|
414
425
|
/**
|
|
415
426
|
* Runs a callback after the surrounding transaction commits.
|
|
416
427
|
* If no transaction is active, the callback runs immediately.
|
|
@@ -868,6 +879,10 @@ export type RetryableDatabaseErrorResult = {
|
|
|
868
879
|
* - Whether to reconnect before retrying.
|
|
869
880
|
*/
|
|
870
881
|
reconnect: boolean;
|
|
882
|
+
/**
|
|
883
|
+
* - Whether the error is a transaction deadlock/lock-wait-timeout that should retry the whole transaction.
|
|
884
|
+
*/
|
|
885
|
+
deadlock?: boolean | undefined;
|
|
871
886
|
/**
|
|
872
887
|
* - Override the max retry attempts.
|
|
873
888
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/drivers/base.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/drivers/base.js"],"names":[],"mappings":"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"}
|