Better distribute db connection pool amongst workers

This commit is contained in:
Dominic Ferrando
2026-07-18 02:40:18 -04:00
parent 98a13c67de
commit 2bbad70e09
4 changed files with 9 additions and 8 deletions
+2 -1
View File
@@ -1,12 +1,13 @@
import { CreateTableBuilder, Kysely, PostgresDialect, sql } from 'kysely';
import { type DB } from "./out/db";
import { Pool } from "pg";
import { env } from '../util';
import { env, WORKER_COUNT } from '../util';
export const db = new Kysely<DB>({
dialect: new PostgresDialect({
pool: new Pool({
connectionString: env.DATABASE_URL,
max: Math.max(1, Math.floor(+env.DATABASE_POOL_MAX / WORKER_COUNT))
}),
})
});
+3 -5
View File
@@ -1,11 +1,9 @@
import cluster from 'node:cluster'
import os from 'node:os'
import { env, log } from "./util";
import { log, WORKER_COUNT } from "./util";
if (cluster.isPrimary) {
const n = Math.min(os.availableParallelism(), +env.MAX_WORKER_PROCESSES);
log.info(`Starting ${n} worker processes`)
for (let i = 0; i < n; i++)
log.info(`Starting ${WORKER_COUNT} worker processes`)
for (let i = 0; i < WORKER_COUNT; i++)
cluster.fork()
} else {
await import('./server')
@@ -56,7 +56,6 @@ for (const wProduct of wProducts) {
console.log("Printful: " + pVariant.id, pVariant.name);
const expectedColor = syncer.parseColorGroup(pVariant.name) ?? pVariant.color;
const validations = [
// validateEquality(sku.fieldData.name, pVariant.name),
validateEquality(
wSku.fieldData["sku-values"]?.["color"],
expectedColor,
+4 -1
View File
@@ -1,6 +1,7 @@
import cluster from 'node:cluster';
import { createHash } from 'node:crypto';
import { pino } from 'pino';
import os from 'node:os'
export const log = pino({
level: Bun.env.LOG_LEVEL ?? "info",
@@ -21,11 +22,13 @@ export const env = {
AUTH_SECRET: requireEnv("AUTH_SECRET"),
ADMIN_PASSWORD: requireEnv("ADMIN_PASSWORD"),
DATABASE_URL: requireEnv("DATABASE_URL"),
MAX_WORKER_PROCESSES: requireEnv("MAX_WORKER_PROCESSES"),
DATABASE_POOL_MAX: requireEnv("DATABASE_POOL_MAX"),
MAX_WORKER_COUNT: requireEnv("MAX_WORKER_COUNT"),
NODE_ENV: optionEnv("NODE_ENV", "development"),
LOG_LEVEL: optionEnv("LOG_LEVEL", "info"),
};
export const WORKER_COUNT = Math.min(os.availableParallelism(), +env.MAX_WORKER_COUNT);
export const DEFAULT_NAME = "Default";
function requireEnv(key: string): string {