From d3708a3980df04266d9d5f4281b8dfaadc221753 Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Tue, 23 Sep 2025 21:03:29 +0200 Subject: [PATCH] FE-1858 FE-1853: fix pooler max connections (#38823) * fix db config * add fetch of pooler cn --- apps/studio/data/reports/database-charts.ts | 18 ++++----------- .../pages/project/[ref]/reports/database.tsx | 22 ++++++++++++------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/apps/studio/data/reports/database-charts.ts b/apps/studio/data/reports/database-charts.ts index ea287b5b8c..eb25bd212b 100644 --- a/apps/studio/data/reports/database-charts.ts +++ b/apps/studio/data/reports/database-charts.ts @@ -4,18 +4,9 @@ import { formatBytes } from 'lib/helpers' import { Organization } from 'types' import { DiskAttributesData } from '../config/disk-attributes-query' import { MaxConnectionsData } from '../database/max-connections-query' -import { PgbouncerConfigData } from '../database/pgbouncer-config-query' import { Project } from '../projects/project-detail-query' -export const getReportAttributes = ( - org: Organization, - project: Project, - diskConfig?: DiskAttributesData, - maxConnections?: MaxConnectionsData, - poolerConfig?: PgbouncerConfigData -): ReportAttributes[] => { - const computeSize = project?.infra_compute_size || 'medium' - +export const getReportAttributes = (diskConfig?: DiskAttributesData): ReportAttributes[] => { return [ { id: 'ram-usage', @@ -224,10 +215,9 @@ export const getReportAttributesV2: ( project: Project, diskConfig?: DiskAttributesData, maxConnections?: MaxConnectionsData, - poolerConfig?: PgbouncerConfigData -) => ReportAttributes[] = (org, project, diskConfig, maxConnections, poolerConfig) => { + pgBouncerMaxConnections?: number +) => ReportAttributes[] = (org, project, diskConfig, maxConnections, pgBouncerMaxConnections) => { const isFreePlan = org?.plan?.id === 'free' - const computeSize = project?.infra_compute_size || 'medium' const isSpendCapEnabled = org?.plan.id !== 'free' && !org?.usage_billing_enabled && project?.cloud_provider !== 'FLY' @@ -507,7 +497,7 @@ export const getReportAttributesV2: ( attribute: 'pg_pooler_max_connections', provider: 'reference-line', label: 'Max pooler connections', - value: poolerConfig?.max_client_conn, + value: pgBouncerMaxConnections, tooltip: 'Maximum allowed pooler connections for your current compute size', isMaxValue: true, }, diff --git a/apps/studio/pages/project/[ref]/reports/database.tsx b/apps/studio/pages/project/[ref]/reports/database.tsx index c5314558f9..1e9c5ea073 100644 --- a/apps/studio/pages/project/[ref]/reports/database.tsx +++ b/apps/studio/pages/project/[ref]/reports/database.tsx @@ -42,6 +42,8 @@ import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' import type { NextPageWithLayout } from 'types' import { AlertDescription_Shadcn_, Alert_Shadcn_, Button } from 'ui' import { ReportChartUpsell } from 'components/interfaces/Reports/v2/ReportChartUpsell' +import { POOLING_OPTIMIZATIONS } from 'components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling.constants' +import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' const DatabaseReport: NextPageWithLayout = () => { return ( @@ -107,6 +109,16 @@ const DatabaseUsage = () => { }) const { data: poolerConfig } = usePgbouncerConfigQuery({ projectRef: project?.ref }) + // PGBouncer connections + const { data: addons } = useProjectAddonsQuery({ projectRef: project?.ref }) + const computeInstance = addons?.selected_addons.find((addon) => addon.type === 'compute_instance') + const poolingOptimizations = + POOLING_OPTIMIZATIONS[ + (computeInstance?.variant.identifier as keyof typeof POOLING_OPTIMIZATIONS) ?? + (project?.infra_compute_size === 'nano' ? 'ci_nano' : 'ci_micro') + ] + const defaultMaxClientConn = poolingOptimizations.maxClientConn ?? 200 + const { can: canUpdateDiskSizeConfig } = useAsyncCheckPermissions( PermissionAction.UPDATE, 'projects', @@ -117,19 +129,13 @@ const DatabaseUsage = () => { } ) - const REPORT_ATTRIBUTES = getReportAttributes( - org!, - project!, - diskConfig, - maxConnections, - poolerConfig - ) + const REPORT_ATTRIBUTES = getReportAttributes(diskConfig) const REPORT_ATTRIBUTES_V2 = getReportAttributesV2( org!, project!, diskConfig, maxConnections, - poolerConfig + defaultMaxClientConn ) const { isLoading: isUpdatingDiskSize } = useProjectDiskResizeMutation({