@@ -220,7 +220,7 @@ def is_compatible(
220
220
def refresh_snap (
221
221
self , * , snap_name : str , snap_revision : str , refresh : charm_refresh .Machines
222
222
) -> None :
223
- # Update the configuration.
223
+ logger . debug ( " Update Patroni config on snap refresh" )
224
224
self ._charm .set_unit_status (MaintenanceStatus ("updating configuration" ), refresh = refresh )
225
225
self ._charm .update_config (refresh = refresh )
226
226
self ._charm .updated_synchronous_node_count ()
@@ -444,8 +444,8 @@ def _reconcile_refresh_status(self, _=None):
444
444
445
445
def _on_databases_change (self , _ ):
446
446
"""Handle databases change event."""
447
+ logger .debug ("Update Patroni config on databases changed" )
447
448
self .update_config ()
448
- logger .debug ("databases changed" )
449
449
timestamp = datetime .now ()
450
450
self ._peers .data [self .unit ].update ({"pg_hba_needs_update_timestamp" : str (timestamp )})
451
451
logger .debug (f"authorisation rules changed at { timestamp } " )
@@ -711,8 +711,9 @@ def _on_peer_relation_departed(self, event: RelationDepartedEvent) -> None:
711
711
event .defer ()
712
712
return
713
713
714
- # Update the list of the current members.
714
+ logger . debug ( " Update the list of the current members" )
715
715
self ._remove_from_members_ips (member_ip )
716
+ logger .debug ("Update Patroni config on peed relation departure" )
716
717
self .update_config ()
717
718
718
719
if self .primary_endpoint :
@@ -893,7 +894,7 @@ def _on_peer_relation_changed(self, event: HookEvent):
893
894
894
895
# Update the list of the cluster members in the replicas to make them know each other.
895
896
try :
896
- # Update the members of the cluster in the Patroni configuration on this unit.
897
+ logger . debug ( " Update the members of the cluster in Patroni on this unit" )
897
898
self .update_config ()
898
899
except RetryError :
899
900
self .set_unit_status (BlockedStatus ("failed to update cluster members on member" ))
@@ -1056,7 +1057,6 @@ def _add_members(self, event):
1056
1057
for member in self ._hosts - self ._patroni .cluster_members :
1057
1058
logger .debug ("Adding %s to cluster" , member )
1058
1059
self .add_cluster_member (member )
1059
- self ._patroni .update_synchronous_node_count ()
1060
1060
except NotReadyError :
1061
1061
logger .info ("Deferring reconfigure: another member doing sync right now" )
1062
1062
event .defer ()
@@ -1082,7 +1082,7 @@ def add_cluster_member(self, member: str) -> None:
1082
1082
# It should be updated in each other member.
1083
1083
self ._add_to_members_ips (member_ip )
1084
1084
1085
- # Update Patroni configuration file.
1085
+ logger . debug ( " Update Patroni config on add cluster member" )
1086
1086
try :
1087
1087
self .update_config ()
1088
1088
except RetryError :
@@ -1391,6 +1391,7 @@ def _on_leader_elected(self, event: LeaderElectedEvent) -> None: # noqa: C901
1391
1391
if not self .get_secret (APP_SCOPE , "internal-ca" ):
1392
1392
self .tls .generate_internal_peer_ca ()
1393
1393
self .tls .generate_internal_peer_cert ()
1394
+ logger .debug ("Update Patroni config on leader elected" )
1394
1395
self .update_config ()
1395
1396
1396
1397
# Don't update connection endpoints in the first time this event run for
@@ -1435,10 +1436,10 @@ def _on_config_changed(self, event) -> None: # noqa: C901
1435
1436
1436
1437
try :
1437
1438
self ._validate_config_options ()
1438
- # update config on every run
1439
+ logger . debug ( "Update Patroni config on config changed" )
1439
1440
self .update_config ()
1440
- except psycopg2 .OperationalError :
1441
- logger .debug ("Defer on_config_changed: Cannot connect to database" )
1441
+ except psycopg2 .OperationalError as e :
1442
+ logger .debug (f "Defer on_config_changed: Cannot connect to database ( { e } ) " )
1442
1443
event .defer ()
1443
1444
return
1444
1445
except ValueError as e :
@@ -1607,8 +1608,8 @@ def _on_start(self, event: StartEvent) -> None:
1607
1608
return
1608
1609
1609
1610
logger .debug ("Bootstrap the cluster in the leader unit" )
1610
- self ._start_primary (event )
1611
- self ._restart_services_after_reboot ()
1611
+ self ._start_primary (event ) # start Patroni
1612
+ self ._restart_services_after_reboot () # start Patroni #2
1612
1613
1613
1614
def _restart_services_after_reboot (self ):
1614
1615
"""Restart the Patroni and pgBackRest after a reboot."""
@@ -1623,7 +1624,7 @@ def _restart_metrics_service(self, postgres_snap: snap.Snap) -> None:
1623
1624
try :
1624
1625
snap_password = postgres_snap .get ("exporter.password" )
1625
1626
except snap .SnapError :
1626
- logger .warning ("Early exit: Trying to reset metrics service with no configuration set" )
1627
+ logger .warning ("Early exit: skipping exporter setup ( no configuration set) " )
1627
1628
return None
1628
1629
1629
1630
if snap_password != self .get_secret (APP_SCOPE , MONITORING_PASSWORD_KEY ):
@@ -1881,6 +1882,7 @@ def _update_admin_password(self, admin_secret_id: str) -> None:
1881
1882
1882
1883
# Update and reload Patroni configuration in this unit to use the new password.
1883
1884
# Other units Patroni configuration will be reloaded in the peer relation changed event.
1885
+ logger .debug ("Update Patroni config on admin password update" )
1884
1886
self .update_config ()
1885
1887
1886
1888
def _on_promote_to_primary (self , event : ActionEvent ) -> None :
@@ -1930,6 +1932,7 @@ def _on_update_status(self, _) -> None:
1930
1932
1931
1933
if not self ._patroni .member_started and self ._patroni .is_member_isolated :
1932
1934
self ._patroni .restart_patroni ()
1935
+ self ._observer .start_observer ()
1933
1936
return
1934
1937
1935
1938
# Update the sync-standby endpoint in the async replication data.
@@ -2062,6 +2065,7 @@ def _handle_processes_failures(self) -> bool:
2062
2065
try :
2063
2066
logger .info ("restarted PostgreSQL because it was not running" )
2064
2067
self ._patroni .restart_patroni ()
2068
+ self ._observer .start_observer ()
2065
2069
return True
2066
2070
except RetryError :
2067
2071
logger .error ("failed to restart PostgreSQL after checking that it was not running" )
@@ -2095,10 +2099,8 @@ def _set_primary_status_message(self) -> None:
2095
2099
danger_state = " (degraded)"
2096
2100
unit_status = "Standby" if self .is_standby_leader else "Primary"
2097
2101
unit_status = unit_status + danger_state
2098
- logger .debug (f"Set ActiveStatus({ unit_status } )" )
2099
2102
self .set_unit_status (ActiveStatus (f"{ unit_status } " ))
2100
2103
elif self ._patroni .member_started :
2101
- logger .debug ("Set ActiveStatus()" )
2102
2104
self .set_unit_status (ActiveStatus ())
2103
2105
except (RetryError , ConnectionError ) as e :
2104
2106
logger .error (f"failed to get primary with error { e } " )
@@ -2216,6 +2218,7 @@ def push_tls_files_to_workload(self) -> bool:
2216
2218
)
2217
2219
2218
2220
try :
2221
+ logger .debug ("Update Patroni config on push tls files to workload" )
2219
2222
return self .update_config ()
2220
2223
except Exception :
2221
2224
logger .exception ("TLS files failed to push. Error in config update" )
@@ -2230,6 +2233,7 @@ def push_ca_file_into_workload(self, secret_name: str) -> bool:
2230
2233
subprocess .check_call ([UPDATE_CERTS_BIN_PATH ]) # noqa: S603
2231
2234
2232
2235
try :
2236
+ logger .debug ("Update Patroni config on push CA file into workload" )
2233
2237
return self .update_config ()
2234
2238
except Exception :
2235
2239
logger .exception ("CA file failed to push. Error in config update" )
@@ -2243,6 +2247,7 @@ def clean_ca_file_from_workload(self, secret_name: str) -> bool:
2243
2247
subprocess .check_call ([UPDATE_CERTS_BIN_PATH ]) # noqa: S603
2244
2248
2245
2249
try :
2250
+ logger .debug ("Update Patroni config on clean CA file from workload" )
2246
2251
return self .update_config ()
2247
2252
except Exception :
2248
2253
logger .exception ("CA file failed to clean. Error in config update" )
@@ -2355,6 +2360,7 @@ def update_config(
2355
2360
slots = replication_slots or None ,
2356
2361
)
2357
2362
if no_peers :
2363
+ logger .debug ("Early exit update_config: no peers" )
2358
2364
return True
2359
2365
2360
2366
if not self ._is_workload_running :
@@ -2391,6 +2397,7 @@ def update_config(
2391
2397
else max (4 * os .cpu_count (), 100 )
2392
2398
)
2393
2399
2400
+ logger .debug ("Bulk update parameters controller by patroni" )
2394
2401
self ._patroni .bulk_update_parameters_controller_by_patroni ({
2395
2402
"max_connections" : max_connections ,
2396
2403
"max_prepared_transactions" : self .config .memory_max_prepared_transactions ,
@@ -2461,7 +2468,9 @@ def _handle_postgresql_restart_need(self) -> None:
2461
2468
logger .error (f"Reload patroni call failed! error: { e !s} " )
2462
2469
2463
2470
restart_pending = self ._patroni .is_restart_pending ()
2464
- logger .debug (f"Checking if restart pending: { restart_postgresql } or { restart_pending } " )
2471
+ logger .debug (
2472
+ f"Checking if restart pending: TLS={ restart_postgresql } or API={ restart_pending } "
2473
+ )
2465
2474
restart_postgresql = restart_postgresql or restart_pending
2466
2475
2467
2476
self .unit_peer_data .update ({"tls" : "enabled" if self .is_tls_enabled else "" })
0 commit comments