Limit the number of db connections here and there (#374)

This commit is contained in:
Kamil Kisiela 2022-09-16 11:01:32 +02:00 committed by GitHub
parent b55232f6fe
commit aca8170421
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 10 additions and 9 deletions

View file

@ -59,7 +59,7 @@ export function createRateLimiter(config: {
const emails = createEmailScheduler(config.emails);
const { logger } = config;
const postgres$ = createPostgreSQLStorage(config.storage.connectionString);
const postgres$ = createPostgreSQLStorage(config.storage.connectionString, 1);
let initialized = false;
let intervalHandle: ReturnType<typeof setInterval> | null = null;

View file

@ -126,7 +126,7 @@ export async function main() {
};
}
const storage = await createPostgreSQLStorage(createConnectionString(process.env as any));
const storage = await createPostgreSQLStorage(createConnectionString(process.env as any), 10);
const graphqlLogger = createGraphQLLogger();
const registry = createRegistry({

View file

@ -11,10 +11,11 @@ import { createSentryInterceptor } from './sentry';
const dbInterceptors: Interceptor[] = [createQueryLoggingInterceptor(), createSentryInterceptor()];
export async function getPool(connection: string) {
export async function getPool(connection: string, maximumPoolSize: number) {
const pool = await createPool(connection, {
interceptors: dbInterceptors,
captureStackTrace: false,
maximumPoolSize,
});
function interceptError<K extends Exclude<keyof CommonQueryMethods, 'transaction'>>(methodName: K) {

View file

@ -72,8 +72,8 @@ function getProviderBasedOnExternalId(externalId: string): AuthProvider {
return 'AUTH0';
}
export async function createStorage(connection: string): Promise<Storage> {
const pool = await getPool(connection);
export async function createStorage(connection: string, maximumPoolSize: number): Promise<Storage> {
const pool = await getPool(connection, maximumPoolSize);
function transformUser(user: users): User {
return {

View file

@ -2,8 +2,8 @@ import { sql } from 'slonik';
import { getPool, tokens, toDate } from './db';
import type { Slonik } from './shared';
export async function createTokenStorage(connection: string) {
const pool = await getPool(connection);
export async function createTokenStorage(connection: string, maximumPoolSize: number) {
const pool = await getPool(connection, maximumPoolSize);
return {
async getTokens({ target }: { target: string }) {

View file

@ -16,7 +16,7 @@ export function createStripeBilling(config: {
};
}) {
const logger = config.logger;
const postgres$ = createPostgreSQLStorage(config.storage.connectionString);
const postgres$ = createPostgreSQLStorage(config.storage.connectionString, 10);
let intervalHandle: null | ReturnType<typeof setInterval> = null;
// feat(metered-usage)
// const estimationApi = createTRPCClient<UsageEstimatorApi>({

View file

@ -23,7 +23,7 @@ export interface Storage {
export async function createStorage(): Promise<Storage> {
const connectionString = createConnectionString(process.env as any);
const db = await createTokenStorage(connectionString);
const db = await createTokenStorage(connectionString, 5);
function transformToken(item: tokens): StorageItem {
return {