From b883c1485f79aafa88cac7255b1de5f7c9dc351f Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Thu, 25 Sep 2025 13:07:40 +0300 Subject: [PATCH 1/5] Mute error message to debug --- src/cluster.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cluster.py b/src/cluster.py index 1c582f0e43..056f093e3c 100644 --- a/src/cluster.py +++ b/src/cluster.py @@ -584,8 +584,8 @@ def are_replicas_up(self) -> dict[str, bool] | None: member["host"]: member["state"] in ["running", "streaming"] for member in response.json()["members"] } - except Exception: - logger.exception("Unable to get the state of the cluster") + except Exception as e: + logger.debug(f"Unable to get the state of the cluster: {e}") return def promote_standby_cluster(self) -> None: From cb40b3a94bab34dc492dc37354e07706d0efa2cc Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Thu, 25 Sep 2025 15:39:00 +0300 Subject: [PATCH 2/5] Create access roles --- src/upgrade.py | 3 ++- tests/unit/test_upgrade.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/upgrade.py b/src/upgrade.py index ed430e0cf4..4a2d74322a 100644 --- a/src/upgrade.py +++ b/src/upgrade.py @@ -100,6 +100,7 @@ def _on_upgrade_charm_check_legacy(self) -> None: ): if self.charm.get_secret(APP_SCOPE, key) is None: self.charm.set_secret(APP_SCOPE, key, new_password()) + self._set_up_new_access_roles_for_legacy() if self.state: # If state set, upgrade is supported. Just set the snap information @@ -258,7 +259,6 @@ def _prepare_upgrade_from_legacy(self) -> None: extra_user_roles="pg_monitor", ) self.charm.postgresql.set_up_database() - self._set_up_new_access_roles_for_legacy() def _set_up_new_access_roles_for_legacy(self) -> None: """Create missing access groups and their memberships.""" @@ -271,6 +271,7 @@ def _set_up_new_access_roles_for_legacy(self) -> None: self.charm.postgresql.create_access_groups() self.charm.postgresql.grant_internal_access_group_memberships() self.charm.postgresql.grant_relation_access_group_memberships() + logger.debug("Access roles created") @property def unit_upgrade_data(self) -> RelationDataContent: diff --git a/tests/unit/test_upgrade.py b/tests/unit/test_upgrade.py index 1baac2da9b..8c04581745 100644 --- a/tests/unit/test_upgrade.py +++ b/tests/unit/test_upgrade.py @@ -82,6 +82,7 @@ def test_on_upgrade_charm_check_legacy(harness, unit_states, is_cluster_initiali patch( "upgrade.PostgreSQLUpgrade._prepare_upgrade_from_legacy" ) as _prepare_upgrade_from_legacy, + patch("upgrade.PostgreSQLUpgrade._set_up_new_access_roles_for_legacy"), ): with harness.hooks_disabled(): harness.set_leader(True) From 0d2505830b6671618f07bd860f00be88e18b73ac Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Thu, 25 Sep 2025 16:10:17 +0300 Subject: [PATCH 3/5] Move setup of access roles to upgrade granted --- src/upgrade.py | 3 ++- tests/unit/test_upgrade.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/upgrade.py b/src/upgrade.py index 4a2d74322a..08dee25eaf 100644 --- a/src/upgrade.py +++ b/src/upgrade.py @@ -100,7 +100,6 @@ def _on_upgrade_charm_check_legacy(self) -> None: ): if self.charm.get_secret(APP_SCOPE, key) is None: self.charm.set_secret(APP_SCOPE, key, new_password()) - self._set_up_new_access_roles_for_legacy() if self.state: # If state set, upgrade is supported. Just set the snap information @@ -197,6 +196,8 @@ def _on_upgrade_granted(self, event: UpgradeGrantedEvent) -> None: self.charm.update_config() + self._set_up_new_access_roles_for_legacy() + self.set_unit_completed() # Ensures leader gets its own relation-changed when it upgrades diff --git a/tests/unit/test_upgrade.py b/tests/unit/test_upgrade.py index 8c04581745..22a186cbdb 100644 --- a/tests/unit/test_upgrade.py +++ b/tests/unit/test_upgrade.py @@ -82,7 +82,6 @@ def test_on_upgrade_charm_check_legacy(harness, unit_states, is_cluster_initiali patch( "upgrade.PostgreSQLUpgrade._prepare_upgrade_from_legacy" ) as _prepare_upgrade_from_legacy, - patch("upgrade.PostgreSQLUpgrade._set_up_new_access_roles_for_legacy"), ): with harness.hooks_disabled(): harness.set_leader(True) @@ -110,6 +109,7 @@ def test_on_upgrade_granted(harness): patch( "charm.PostgresqlOperatorCharm.updated_synchronous_node_count" ) as _updated_synchronous_node_count, + patch("upgrade.PostgreSQLUpgrade._set_up_new_access_roles_for_legacy"), ): # Test when the charm fails to start Patroni. mock_event = MagicMock() From a1712b786f6f450526c655c70308b92a6111aa97 Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Fri, 26 Sep 2025 00:12:59 +0300 Subject: [PATCH 4/5] Try to use mnt for storage --- spread.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spread.yaml b/spread.yaml index 9a2c7ed1b6..d9d600c4fa 100644 --- a/spread.yaml +++ b/spread.yaml @@ -82,6 +82,9 @@ backends: sudo passwd -d runner ADDRESS localhost + + sudo mkdir -p /var/snap/lxd/common/lxd/storage-pools + sudo mount --bind /mnt /var/snap/lxd/common/lxd/storage-pools # HACK: spread does not pass environment variables set on runner # Manually pass specific environment variables environment: From dae85f6b9dcdd2e1230c27ad7f237fa17ffd85ee Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Fri, 26 Sep 2025 00:31:05 +0300 Subject: [PATCH 5/5] Skip disk cleanup --- .github/workflows/integration_test.yaml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/integration_test.yaml b/.github/workflows/integration_test.yaml index b730374b2b..54dcc04048 100644 --- a/.github/workflows/integration_test.yaml +++ b/.github/workflows/integration_test.yaml @@ -84,17 +84,8 @@ jobs: needs: - collect-integration-tests runs-on: ${{ matrix.job.runner }} - timeout-minutes: 226 # Sum of steps `timeout-minutes` + 5 + timeout-minutes: 216 # Sum of steps `timeout-minutes` + 5 steps: - - name: Free up disk space - timeout-minutes: 10 - run: | - printf '\nDisk usage before cleanup\n' - df --human-readable - # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 - rm -r /opt/hostedtoolcache/ - printf '\nDisk usage after cleanup\n' - df --human-readable - name: Checkout timeout-minutes: 3 uses: actions/checkout@v5