mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-18 03:23:37 +08:00
This change refactors how connections are handled during remote transactions. In particular, the connection cache now stays consistent during transactions, even during rollbacks. Previously, the connection cache was replaced on every rollback, even if the rollback was intentional (i.e, not due to an error). This made it hard to debug connections since the cache became completely empty. Connections could also be left in the cache in a bad state after failed transactions. This has been fixed by moving connection checks to the cache and tying transaction state changes to each connection. This ensures that such checks are done in one canonical place instead of being spread out throughout the code. Given how tightly coupled a remote transaction is with its connection, it might make sense to remove the separate remote transaction store and instead put this information in each connection. This is left to a future change, however. In addition to the above changes, this commit includes: * Showing transaction depth and invalidation in the transaction store * Invalidation on individual connections instead of replacing the whole cache * Closing of connections to a local database that is being dropped to prevent "in use" errors. * Ability to add callbacks to async requests that are executed when a response is received. This is used by remote transactions to mark connections as having successfully completed a transaction. Thus, on errors, it is easy to detect connections that are in bad states. * Error checks on each connection instead of having global error tracking for each remote transaction. This change removes the global error state for distributed transactions.
46 lines
1.7 KiB
SQL
46 lines
1.7 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.set_dist_id(dist_id UUID) RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_dist_set_id' LANGUAGE C VOLATILE STRICT;
|
|
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.set_peer_dist_id(dist_id UUID) RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_dist_set_peer_id' LANGUAGE C VOLATILE STRICT;
|
|
|
|
CREATE OR REPLACE FUNCTION data_node_hypertable_info(
|
|
node_name NAME
|
|
)
|
|
RETURNS TABLE (id int,
|
|
table_schema name,
|
|
table_name name,
|
|
table_owner name,
|
|
num_dimensions smallint,
|
|
num_chunks bigint,
|
|
distributed bool,
|
|
table_bytes bigint,
|
|
index_bytes bigint,
|
|
toast_bytes bigint,
|
|
total_bytes bigint)
|
|
AS '@MODULE_PATHNAME@', 'ts_dist_remote_hypertable_info' LANGUAGE C VOLATILE STRICT;
|
|
|
|
-- Function to validate that a node has local settings to function as
|
|
-- a data node. Throws error if validation fails.
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.validate_as_data_node() RETURNS void
|
|
AS '@MODULE_PATHNAME@', 'ts_dist_validate_as_data_node' LANGUAGE C VOLATILE STRICT;
|
|
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.show_connection_cache()
|
|
RETURNS TABLE (
|
|
node_name name,
|
|
user_name name,
|
|
host text,
|
|
port int,
|
|
database name,
|
|
backend_pid int,
|
|
connection_status text,
|
|
transaction_status text,
|
|
transaction_depth int,
|
|
processing boolean,
|
|
invalidated boolean)
|
|
AS '@MODULE_PATHNAME@', 'ts_remote_connection_cache_show' LANGUAGE C VOLATILE STRICT;
|