From c32ad75c52900f32dc0be7c2d125a822e521529f Mon Sep 17 00:00:00 2001 From: Eduardo Alberti Date: Thu, 10 Apr 2025 21:23:26 -0300 Subject: [PATCH] PostgreSQL connection tuning for Sysinv This change updates the default values for the database connection pool parameters in Sysinv application. The reduction of maximum pool size and maximum overflow value can consequently produce a memory usage reduction. These values changes produced a reduction between 14.1 and 20.7% of ap- plication's original memory allocation. To enable easy management, this change also allows the parameter's control through service-parameters command. This change affects only AIO systems. For distributed cloud, this change only affects subclouds. TEST PLAN: PASS: (AIO-SX, DX, DX+, and Standard) Bootstrap system. PASS: (AIO-SX, DX, DX+, and Standard) Run application in idle state, check memory usage and error-free operation. PASS: (AIO-SX, DX, DX+, and Standard) Run application with workload, check memory usage and error-free operation. PASS: Successfully executed administrative operations (lock, unlock, and swact - only for duplex and Standard systems). Story: 2011374 Task: 51771 Change-Id: I0634554cd1c6361402bbf219244f1d4c31ae4ea9 Signed-off-by: Eduardo Alberti --- .../src/modules/platform/manifests/sysinv.pp | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/puppet-manifests/src/modules/platform/manifests/sysinv.pp b/puppet-manifests/src/modules/platform/manifests/sysinv.pp index 9c62261f4..c3741ba4a 100644 --- a/puppet-manifests/src/modules/platform/manifests/sysinv.pp +++ b/puppet-manifests/src/modules/platform/manifests/sysinv.pp @@ -5,7 +5,26 @@ class platform::sysinv::params ( $fm_catalog_info = 'faultmanagement:fm:internalURL', $server_timeout = '600s', $sysinv_api_workers = undef, -) { } +) { + # Set default values for database connection for AIO systems (except for + # systemcontroller on DC) + if ($::platform::params::system_type == 'All-in-one' and + $::platform::params::distributed_cloud_role != 'systemcontroller') { + $db_idle_timeout = 60 + $db_pool_size = 1 + $db_over_size = 5 + } else { + $db_idle_timeout = undef + $db_pool_size = undef + $db_over_size = undef + } +} + +class platform::sysinv::custom::params ( + $db_idle_timeout = undef, + $db_pool_size = undef, + $db_over_size = undef, +) {} class platform::sysinv inherits ::platform::sysinv::params { @@ -14,6 +33,7 @@ class platform::sysinv include ::platform::params include ::platform::drbd::platform::params + include ::platform::sysinv::custom::params # sysinv-agent is started on all hosts include ::sysinv::agent @@ -68,6 +88,38 @@ class platform::sysinv 'app_framework/missing_auto_update': value => true; 'app_framework/skip_k8s_application_audit': value => false; } + + # On AIO systems, restrict the connection pool size + # If database information doesn't exist in yaml file, use default values + if $::platform::sysinv::custom::params::db_idle_timeout { + Sysinv_config <| title == 'database/connection_recycle_time' |> { + value => $::platform::sysinv::custom::params::db_idle_timeout, + } + } else { + Sysinv_config <| title == 'database/connection_recycle_time' |> { + value => $::platform::sysinv::params::db_idle_timeout, + } + } + + if $::platform::sysinv::custom::params::db_pool_size { + Sysinv_config <| title == 'database/max_pool_size' |> { + value => $::platform::sysinv::custom::params::db_pool_size, + } + } else { + Sysinv_config <| title == 'database/max_pool_size' |> { + value => $::platform::sysinv::params::db_pool_size, + } + } + + if $::platform::sysinv::custom::params::db_over_size { + Sysinv_config <| title == 'database/max_overflow' |> { + value => $::platform::sysinv::custom::params::db_over_size, + } + } else { + Sysinv_config <| title == 'database/max_overflow' |> { + value => $::platform::sysinv::params::db_over_size, + } + } }