class patroni.postgresql.citus. CitusHandler ( postgresql : Postgresql , config : Dict [ str , str | int ] | None ) View on GitHub

Bases: Thread

__init__ ( postgresql : Postgresql , config : Dict [ str , str | int ] | None ) None View on GitHub

This constructor should always be called with keyword arguments. Arguments are:

group should be None; reserved for future extension when a ThreadGroup class is implemented.

target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.

name is the thread name. By default, a unique name is constructed of the form "Thread-N" where N is a small decimal number.

args is the argument tuple for the target invocation. Defaults to ().

kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.

If a subclass overrides the constructor, it must make sure to invoke the base class constructor (Thread.__init__()) before doing anything else to the thread.

_add_task ( task : PgDistNode ) bool View on GitHub
add_task ( event : str , group : int , conn_url : str , timeout : float | None = None , cooldown : float | None = None ) PgDistNode | None View on GitHub
adjust_postgres_gucs ( parameters : Dict [ str , Any ] ) None View on GitHub
bootstrap ( ) None View on GitHub
find_task_by_group ( group : int ) int | None View on GitHub
group ( ) int | None View on GitHub
handle_event ( cluster : Cluster , event : Dict [ str , Any ] ) None View on GitHub
ignore_replication_slot ( slot : Dict [ str , str ] ) bool View on GitHub
is_coordinator ( ) bool View on GitHub
is_enabled ( ) bool View on GitHub
is_worker ( ) bool View on GitHub
load_pg_dist_node ( ) bool View on GitHub

Read from the pg_dist_node table and put it into the local cache

on_demote ( ) None View on GitHub
pick_task ( ) Tuple [ int | None , PgDistNode | None ] View on GitHub

Returns the tuple(i, task), where i - is the task index in the self._tasks list

Tasks are picked by following priorities:

  1. If there is already a transaction in progress, pick a task that that will change already affected worker primary.

  2. If the coordinator address should be changed - pick a task with group=0 (coordinators are always in group 0).

  3. Pick a task that is the oldest (first from the self._tasks)

process_task ( task : PgDistNode ) bool View on GitHub

Updates a single row in pg_dist_node table, optionally in a transaction.

The transaction is started if we do a demote of the worker node or before promoting the other worker if there is no transaction in progress. And, the transaction is committed when the switchover/failover completed.

Parameters :

task – reference to a PgDistNode object that represents a row to be updated/created.

Returns :

True if the row was succesfully created/updated or transaction in progress was committed as an indicator that the self._pg_dist_node cache should be updated, or, if the new transaction was opened, this method returns False .

process_tasks ( ) None View on GitHub
query ( sql : str , * params : Any ) List [ Tuple [ Any , ... ] ] View on GitHub
run ( ) None View on GitHub

Method representing the thread’s activity.

You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.

schedule_cache_rebuild ( ) None View on GitHub
sync_pg_dist_node ( cluster : Cluster ) None View on GitHub

Maintain the pg_dist_node from the coordinator leader every heartbeat loop.

We can’t always rely on REST API calls from worker nodes in order to maintain pg_dist_node , therefore at least once per heartbeat loop we make sure that workes registered in self._pg_dist_node cache are matching the cluster view from DCS by creating tasks the same way as it is done from the REST API.

update_node ( task : PgDistNode ) None View on GitHub
class patroni.postgresql.citus. PgDistNode ( group : int , host : str , port : int , event : str , nodeid : int | None = None , timeout : float | None = None , cooldown : float | None = None ) View on GitHub

Bases: object

Represents a single row in the pg_dist_node table

__init__ ( group : int , host : str , port : int , event : str , nodeid : int | None = None , timeout : float | None = None , cooldown : float | None = None ) None View on GitHub
wait ( ) None View on GitHub
wakeup ( ) None View on GitHub