Facilities related to Patroni configuration.
-
class
patroni.config.
Config
(
configfile:
str,
validator:
~typing.Callable[[~typing.Dict[str,
~typing.Any]],
~typing.List[str]]
|
None
=
default_validator> ) View on GitHub -
Bases:
objectHandle Patroni configuration.
This class is responsible for:
-
Building and giving access to
effective_configurationfrom:-
Config.__DEFAULT_CONFIG– some sane default values; -
dynamic_configuration– configuration stored in DCS; -
local_configuration– configuration fromconfig.ymlor environment.
-
-
Saving and loading
dynamic_configurationinto ‘patroni.dynamic.json’ file located in local_configuration[‘postgresql’][‘data_dir’] directory. This is necessary to be able to restoredynamic_configurationif DCS was accidentally wiped. -
Loading of configuration file in the old format and converting it into new format.
-
Mimicking some
dictinterfaces to make it possible to work with it as with the oldconfigobject.
- Variables :
-
-
PATRONI_CONFIG_VARIABLE – name of the environment variable that can be used to load Patroni configuration from.
-
__CACHE_FILENAME – name of the file used to cache dynamic configuration under Postgres data directory.
-
__DEFAULT_CONFIG – default configuration values for some Patroni settings.
-
- PATRONI_CONFIG_VARIABLE = 'PATRONI_CONFIGURATION'
- __CACHE_FILENAME = 'patroni.dynamic.json'
-
__DEFAULT_CONFIG
:
Dict
[
str
,
Any
]
=
{'loop_wait':
10,
'postgresql':
{'parameters':
'hot_standby', 'hot_standby': 'on', 'max_connections': 100, 'max_wal_senders': 10, 'max_prepared_transactions': 0, 'max_locks_per_transaction': 64, 'track_commit_timestamp': 'off', 'max_replication_slots': 10, 'max_worker_processes': 8, 'wal_log_hints': 'on'} at 7fa6db5eb070>, 'use_slots': True}, 'retry_timeout': 10, 'standby_cluster': {'archive_cleanup_command': '', 'create_replica_methods': '', 'host': '', 'port': '', 'primary_slot_name': '', 'recovery_min_apply_delay': '', 'restore_command': ''}, 'ttl': 30}
- __get_and_maybe_adjust_int_value ( config : Dict [ str , Any ] , param : str , min_value : int ) int
-
Get, validate and maybe adjust a param integer value from the config
dict.- Parameters :
-
-
config –
dictobject with new global configuration. -
param – name of the configuration parameter we want to read/validate/adjust.
-
min_value – the minimum possible value that a given param could have.
-
- Returns :
-
an integer value which corresponds to a provided param .
-
__init__
(
configfile:
str,
validator:
~typing.Callable[[~typing.Dict[str,
~typing.Any]],
~typing.List[str]]
|
None
=
default_validator> ) None View on GitHub -
Create a new instance of
Configand validate the loaded configuration using validator .Note
Patroni will read configuration from these locations in this order:
-
file or directory path passed as command-line argument ( configfile ), if it exists and the file or files found in the directory can be parsed (see
_load_config_path()), otherwise -
YAML file passed via the environment variable (see
PATRONI_CONFIG_VARIABLE), if the referenced file exists and can be parsed, otherwise -
from configuration values defined as environment variables, see
_build_environment_configuration().
- Parameters :
-
-
configfile – path to Patroni configuration file.
-
validator – function used to validate Patroni configuration. It should receive a dictionary which represents Patroni configuration, and return a list of zero or more error messages based on validation.
-
- Raises :
-
ConfigParseError: if any issue is reported by validator .
-
- _build_effective_configuration ( dynamic_configuration : Dict [ str , Any ] , local_configuration : Dict [ str , Dict [ str , Any ] | Any ] ) Dict [ str , Any ] View on GitHub
-
Build effective configuration by merging dynamic_configuration and local_configuration .
Note
local_configuration takes precedence over dynamic_configuration if a setting is defined in both.
- Parameters :
-
-
dynamic_configuration – Patroni dynamic configuration.
-
local_configuration – Patroni local configuration.
-
- Returns :
-
_description_
- static _build_environment_configuration ( ) Dict [ str , Any ] View on GitHub
-
Get local configuration settings that were specified through environment variables.
- Returns :
-
dictionary containing the found environment variables and their values, respecting the expected structure of Patroni configuration.
- _load_cache ( ) None View on GitHub
-
Load dynamic configuration from
patroni.dynamic.json.
- _load_config_file ( ) Dict [ str , Any ] View on GitHub
-
Load configuration file(s) from filesystem and apply values which were set via environment variables.
- Returns :
-
final configuration after merging configuration file(s) and environment variables.
- _load_config_path ( path : str ) Dict [ str , Any ] View on GitHub
-
Load Patroni configuration file(s) from path .
If path is a file, load the yml file pointed to by path . If path is a directory, load all yml files in that directory in alphabetical order.
- Parameters :
-
path – path to either an YAML configuration file, or to a folder containing YAML configuration files.
- Returns :
-
configuration after reading the configuration file(s) from path .
- Raises :
-
ConfigParseError: if path is invalid.
- static _process_postgresql_parameters ( parameters : Dict [ str , Any ] , is_local : bool = False ) Dict [ str , Any ] View on GitHub
-
Process Postgres parameters .
Note
If is_local configuration discard any setting from parameters that is listed under
CMDLINE_OPTIONSas those are supposed to be set only through dynamic configuration.When setting parameters from
CMDLINE_OPTIONSthrough dynamic configuration their value will be validated as per the validator defined in that very same attribute entry. If the given value cannot be validated, a warning will be logged and the default value of the GUC will be used instead.Some parameters from
CMDLINE_OPTIONScannot be set even if not is_local configuration:-
-
listen_addresses: inferred frompostgresql.listenlocal configuration or from -
PATRONI_POSTGRESQL_LISTENenvironment variable;
-
-
-
port: inferred frompostgresql.listenlocal configuration or from -
PATRONI_POSTGRESQL_LISTENenvironment variable;
-
-
-
cluster_name: set throughscopelocal configuration or throughPATRONI_SCOPEenvironment -
variable;
-
-
hot_standby: always enabled; -
wal_log_hints: always enabled.
- Parameters :
-
-
parameters – Postgres parameters to be processed. Should be the parsed YAML value of
postgresql.parametersconfiguration, either from local or from dynamic configuration. -
is_local – should be
Trueif parameters refers to local configuration, orFalseif parameters refers to dynamic configuration.
-
- Returns :
-
new value for
postgresql.parametersafter processing and validating parameters .
-
- _safe_copy_dynamic_configuration ( dynamic_configuration : Dict [ str , Any ] ) Dict [ str , Any ] View on GitHub
-
Create a copy of dynamic_configuration .
Merge dynamic_configuration with
__DEFAULT_CONFIG( dynamic_configuration takes precedence), and processpostgresql.parametersfrom dynamic_configuration through_process_postgresql_parameters(), if present.Note
The following settings are not allowed in
postgresqlsection as they are intended to be local configuration, and are removed if present:-
connect_address; -
proxy_address; -
listen; -
config_dir; -
data_dir; -
pgpass; -
authentication;
Besides that any setting present in dynamic_configuration but absent from
__DEFAULT_CONFIGis discarded.- Parameters :
-
dynamic_configuration – Patroni dynamic configuration.
- Returns :
-
copy of dynamic_configuration , merged with default dynamic configuration and with some sanity checks performed over it.
-
- _validate_and_adjust_timeouts ( config : Dict [ str , Any ] ) None View on GitHub
-
Validate and adjust
loop_wait,retry_timeout, andttlvalues if necessary.Minimum values:
-
loop_wait: 1 second; -
retry_timeout: 3 seconds. -
ttl: 20 seconds;
Maximum values: In case if values don’t fulfill the following rule,
retry_timeoutandloop_waitare reduced so that the rule is fulfilled:loop_wait + 2 * retry_timeout <= ttl
- Parameters :
-
config –
dictobject with new global configuration.
-
- _validate_failover_tags ( ) None View on GitHub
-
Check
nofailover/failover_priorityconfig and warn user if it’s contradictory.Note
To preserve sanity (and backwards compatibility) the
nofailovertag will still exist. A contradictory configuration is one wherenofailoverisTruebutfailover_priority > 0, or wherenofailoverisFalse, butfailover_priority <= 0. Essentially,nofailoverandfailover_priorityare communicating different things. This checks for this edge case (which is a misconfiguration on the part of the user) and warns them. The behaviour is as iffailover_prioritywere not provided (i.enofailoveris the bedrock source of truth)
- property config_file : str | None View on GitHub
-
Path to Patroni configuration file, if any, else
None.
- copy ( ) Dict [ str , Any ] View on GitHub
-
Get a deep copy of effective Patroni configuration.
- Returns :
-
a deep copy of the Patroni configuration.
- property dynamic_configuration : Dict [ str , Any ] View on GitHub
-
Deep copy of cached Patroni dynamic configuration.
- get ( key : str , default : Any | None = None ) Any View on GitHub
-
Get effective value of
keysetting from Patroni configuration root.Designed to work the same way as
dict.get().- Parameters :
-
-
key – name of the setting.
-
default – default value if key is not present in the effective configuration.
-
- Returns :
-
value of key , if present in the effective configuration, otherwise default .
- classmethod get_default_config ( ) Dict [ str , Any ] View on GitHub
-
Deep copy default configuration.
- Returns :
-
copy of
__DEFAULT_CONFIG
- get_global_config ( cluster : Cluster | None ) GlobalConfig View on GitHub
-
Instantiate
GlobalConfigbased on input.Use the configuration from provided cluster (the most up-to-date) or from the local cache if cluster.config is not initialized or doesn’t have a valid config.
- Parameters :
-
cluster – the currently known cluster state from DCS.
- Returns :
-
GlobalConfigobject.
- property local_configuration : Dict [ str , Any ] View on GitHub
-
Deep copy of cached Patroni local configuration.
- Returns :
-
copy of
_local_configuration
- reload_local_configuration ( ) bool | None View on GitHub
-
Reload configuration values from the configuration file(s).
Note
Designed to be used when user applies changes to configuration file(s), so Patroni can use the new values with a reload instead of a restart.
- Returns :
-
Trueif changes have been detected between current local configuration
- save_cache ( ) None View on GitHub
-
Save dynamic configuration to
patroni.dynamic.jsonunder Postgres data directory.Note
patroni.dynamic.jsonXXXXXXis created as a temporary file and than renamed topatroni.dynamic.json, whereXXXXXXis a random suffix.
- set_dynamic_configuration ( configuration : ClusterConfig | Dict [ str , Any ] ) bool View on GitHub
-
Set dynamic configuration values with given configuration .
- Parameters :
-
configuration – new dynamic configuration values. Supports
dictfor backward compatibility. - Returns :
-
Trueif changes have been detected between current dynamic configuration and the new dynamic configuration ,Falseotherwise.
-
- class patroni.config. GlobalConfig ( config : Dict [ str , Any ] ) View on GitHub
-
Bases:
objectA class that wraps global configuration and provides convenient methods to access/check values.
It is instantiated either by calling
get_global_config()orConfig.get_global_config(), which picks either a configuration from providedClusterobject (the most up-to-date) or from the local cache ifClusterConfigis not initialized or doesn’t have a valid config.- __init__ ( config : Dict [ str , Any ] ) None View on GitHub
-
Initialize
GlobalConfigobject with given config .- Parameters :
-
config – current configuration either from
ClusterConfigor fromConfig.dynamic_configuration().
- check_mode ( mode : str ) bool View on GitHub
-
Checks whether the certain parameter is enabled.
- Parameters :
-
mode – parameter name, e.g.
synchronous_mode,failsafe_mode,pause,check_timeline, and so on. - Returns :
-
Trueif parameter mode is enabled in the global configuration.
- get ( name : str ) Any View on GitHub
-
Gets global configuration value by name .
- Parameters :
-
name – parameter name.
- Returns :
-
configuration value or
Noneif it is missing.
- get_int ( name : str , default : int = 0 ) int View on GitHub
-
Gets current value of name from the global configuration and try to return it as
int.- Parameters :
-
-
name – name of the parameter.
-
default – default value if name is not in the configuration or invalid.
-
- Returns :
-
currently configured value of name from the global configuration or default if it is not set or invalid.
- get_standby_cluster_config ( ) Dict [ str , Any ] | Any View on GitHub
-
Get
standby_clusterconfiguration.- Returns :
-
a copy of
standby_clusterconfiguration.
- property is_paused : bool View on GitHub
-
Trueif cluster is in maintenance mode.
- property is_standby_cluster : bool View on GitHub
-
Trueif global configuration has a validstandby_clustersection.
- property is_synchronous_mode : bool View on GitHub
-
Trueif synchronous replication is requested and it is not a standby cluster config.
- property is_synchronous_mode_strict : bool View on GitHub
-
Trueif at least one synchronous node is required.
- property maximum_lag_on_failover : int View on GitHub
-
Currently configured value of
maximum_lag_on_failoverfrom the global configuration.Assume
1048576if it is not set or invalid.
- property maximum_lag_on_syncnode : int View on GitHub
-
Currently configured value of
maximum_lag_on_syncnodefrom the global configuration.Assume
-1if it is not set or invalid.
- property min_synchronous_nodes : int View on GitHub
-
The minimal number of synchronous nodes based on whether
synchronous_mode_strictis enabled or not.
- property primary_start_timeout : int View on GitHub
-
Currently configured value of
primary_start_timeoutfrom the global configuration.Assume
300if it is not set or invalid.Note
master_start_timeoutis still supported to keep backward compatibility.
- property primary_stop_timeout : int View on GitHub
-
Currently configured value of
primary_stop_timeoutfrom the global configuration.Assume
0if it is not set or invalid.Note
master_stop_timeoutis still supported to keep backward compatibility.
- property synchronous_node_count : int View on GitHub
-
Currently configured value of
synchronous_node_countfrom the global configuration.Assume
1if it is not set or invalid.
- patroni.config. default_validator ( conf : Dict [ str , Any ] ) List [ str ] View on GitHub
-
Ensure conf is not empty.
Designed to be used as default validator for
Configobjects, if no specific validator is provided.- Parameters :
-
conf – configuration to be validated.
- Returns :
-
an empty list –
Configexpects the validator to return a list of 0 or more issues found while validating the configuration. - Raises :
-
ConfigParseError: if conf is empty.
- patroni.config. get_global_config ( cluster : Cluster | None , default : Dict [ str , Any ] | None = None ) GlobalConfig View on GitHub
-
Instantiates
GlobalConfigbased on the input.- Parameters :
-
-
cluster – the currently known cluster state from DCS.
-
default – default configuration, which will be used if there is no valid cluster.config .
-
- Returns :
-
GlobalConfigobject.