add back ddl limiter

Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
Fredrik Adelöw
2024-04-30 09:31:44 +02:00
parent ed83f85535
commit 8786b93ef2
2 changed files with 15 additions and 5 deletions
@@ -23,11 +23,15 @@ import { InputError } from '@backstage/errors';
import { JsonObject } from '@backstage/types';
import knexFactory, { Knex } from 'knex';
import { merge, omit } from 'lodash';
import limiterFactory from 'p-limit';
import yn from 'yn';
import { Connector, DatabaseConnector } from '../types';
import defaultNameOverride from './defaultNameOverride';
import { mergeDatabaseConfig } from './mergeDatabaseConfig';
// Limits the number of concurrent DDL operations to 1
const ddlLimiter = limiterFactory(1);
/**
* Creates a knex mysql database connection
*
@@ -174,7 +178,7 @@ export async function ensureMysqlDatabaseExists(
let lastErr: Error | undefined = undefined;
for (let i = 0; i < 3; i++) {
try {
return await ensureDatabase(database);
return await ddlLimiter(() => ensureDatabase(database));
} catch (err) {
lastErr = err;
}
@@ -214,7 +218,7 @@ export async function dropMysqlDatabase(
};
await Promise.all(
databases.map(async database => {
return await dropDatabase(database);
return await ddlLimiter(() => dropDatabase(database));
}),
);
} finally {
@@ -23,12 +23,16 @@ import { ForwardedError, InputError } from '@backstage/errors';
import { JsonObject } from '@backstage/types';
import knexFactory, { Knex } from 'knex';
import { merge, omit } from 'lodash';
import limiterFactory from 'p-limit';
import { Client } from 'pg';
import { Connector, DatabaseConnector } from '../types';
import defaultNameOverride from './defaultNameOverride';
import defaultSchemaOverride from './defaultSchemaOverride';
import { mergeDatabaseConfig } from './mergeDatabaseConfig';
// Limits the number of concurrent DDL operations to 1
const ddlLimiter = limiterFactory(1);
/**
* Creates a knex postgres database connection
*
@@ -159,7 +163,7 @@ export async function ensurePgDatabaseExists(
let lastErr: Error | undefined = undefined;
for (let i = 0; i < 3; i++) {
try {
return await ensureDatabase(database);
return await ddlLimiter(() => ensureDatabase(database));
} catch (err) {
lastErr = err;
}
@@ -198,7 +202,9 @@ export async function ensurePgSchemaExists(
}
};
await Promise.all(schemas.map(ensureSchema));
await Promise.all(
schemas.map(database => ddlLimiter(() => ensureSchema(database))),
);
} finally {
await admin.destroy();
}
@@ -218,7 +224,7 @@ export async function dropPgDatabase(
try {
await Promise.all(
databases.map(async database => {
await admin.raw(`DROP DATABASE ??`, [database]);
await ddlLimiter(() => admin.raw(`DROP DATABASE ??`, [database]));
}),
);
} finally {