fix(core): Handle empty executions table in pruning in migrations (#8121)

In case someone manually prunes their executions table before upgrading
to 1.x, `MigrateIntegerKeysToString` should gracefully handle that,
instead of crashing the application.

## Review / Merge checklist
- [x] PR title and summary are descriptive
This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™ 2023-12-21 14:52:42 +01:00 committed by GitHub
parent bec0faed9e
commit ffaa30ddc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -208,20 +208,24 @@ const pruneExecutionsData = async ({ queryRunner, tablePrefix, logger }: Migrati
}
console.time('pruningData');
const counting = (await queryRunner.query(
`select count(id) as rows from "${tablePrefix}execution_entity";`,
)) as Array<{ rows: number }>;
const [{ rowCount }] = (await queryRunner.query(
`select count(id) as rowCount from "${tablePrefix}execution_entity";`,
)) as Array<{ rowCount: number }>;
const averageExecutionSize = dbFileSize / counting[0].rows;
const numberOfExecutionsToKeep = Math.floor(DESIRED_DATABASE_FILE_SIZE / averageExecutionSize);
if (rowCount > 0) {
const averageExecutionSize = dbFileSize / rowCount;
const numberOfExecutionsToKeep = Math.floor(
DESIRED_DATABASE_FILE_SIZE / averageExecutionSize,
);
const query = `SELECT id FROM "${tablePrefix}execution_entity" ORDER BY id DESC limit ${numberOfExecutionsToKeep}, 1`;
const idToKeep = await queryRunner
.query(query)
.then((rows: Array<{ id: number }>) => rows[0].id);
const query = `SELECT id FROM "${tablePrefix}execution_entity" ORDER BY id DESC limit ${numberOfExecutionsToKeep}, 1`;
const idToKeep = await queryRunner
.query(query)
.then((rows: Array<{ id: number }>) => rows[0].id);
const removalQuery = `DELETE FROM "${tablePrefix}execution_entity" WHERE id < ${idToKeep} and status IN ('success')`;
await queryRunner.query(removalQuery);
const removalQuery = `DELETE FROM "${tablePrefix}execution_entity" WHERE id < ${idToKeep} and status IN ('success')`;
await queryRunner.query(removalQuery);
}
console.timeEnd('pruningData');
} else {
logger.debug('Pruning was requested, but was not enabled');