From bc935ab2ca08614819bc6d56ee2f9b2957cdd972 Mon Sep 17 00:00:00 2001 From: Sven Klemm Date: Tue, 12 Dec 2023 16:55:09 +0100 Subject: [PATCH] Remove multinode public API This patch removes the following functions/procedures: - add_data_node - alter_data_node - attach_data_node - create_distributed_hypertable - create_distributed_restore_point - delete_data_node - detach_data_node - distributed_exec - set_replication_factor - _timescaledb_functions.ping_data_node - _timescaledb_functions.remote_txn_heal_data_node - _timescaledb_functions.set_dist_id - _timescaledb_functions.set_peer_dist_id - _timescaledb_functions.show_connection_cache - _timescaledb_functions.validate_as_data_node - _timescaledb_internal.ping_data_node - _timescaledb_internal.remote_txn_heal_data_node - _timescaledb_internal.set_dist_id - _timescaledb_internal.set_peer_dist_id - _timescaledb_internal.show_connection_cache - _timescaledb_internal.validate_as_data_node --- .unreleased/pr_6410 | 1 + cmake/ScriptFiles.cmake | 2 - sql/compat.sql | 60 ----------- sql/data_node.sql | 12 --- sql/ddl_api.sql | 98 +---------------- sql/dist_internal.sql | 29 ----- sql/updates/latest-dev.sql | 45 ++++++++ sql/updates/reverse-dev.sql | 140 +++++++++++++++++++++++++ src/hypertable.c | 20 +--- tsl/test/shared/expected/compat.out | 30 ------ tsl/test/shared/expected/extension.out | 23 +--- tsl/test/shared/sql/compat.sql | 6 -- 12 files changed, 193 insertions(+), 273 deletions(-) create mode 100644 .unreleased/pr_6410 delete mode 100644 sql/data_node.sql delete mode 100644 sql/dist_internal.sql diff --git a/.unreleased/pr_6410 b/.unreleased/pr_6410 new file mode 100644 index 000000000..abbb9325f --- /dev/null +++ b/.unreleased/pr_6410 @@ -0,0 +1 @@ +Implements: #6410 Remove multinode public API diff --git a/cmake/ScriptFiles.cmake b/cmake/ScriptFiles.cmake index 657d19cf8..365f320ec 100644 --- a/cmake/ScriptFiles.cmake +++ b/cmake/ScriptFiles.cmake @@ -29,7 +29,6 @@ set(PRE_INSTALL_FUNCTION_FILES set(SOURCE_FILES hypertable.sql chunk.sql - data_node.sql ddl_internal.sql ddl_experimental.sql util_time.sql @@ -47,7 +46,6 @@ set(SOURCE_FILES histogram.sql bgw_scheduler.sql metadata.sql - dist_internal.sql views.sql views_experimental.sql gapfill.sql diff --git a/sql/compat.sql b/sql/compat.sql index 9cd31c94b..07106fa7f 100644 --- a/sql/compat.sql +++ b/sql/compat.sql @@ -605,16 +605,6 @@ END$$ SET search_path TO pg_catalog,pg_temp; -CREATE OR REPLACE FUNCTION _timescaledb_internal.ping_data_node(node_name name,timeout interval=NULL) RETURNS boolean LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.ping_data_node(name,interval) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - RETURN _timescaledb_functions.ping_data_node($1,$2); -END$$ -SET search_path TO pg_catalog,pg_temp; - - CREATE OR REPLACE FUNCTION _timescaledb_internal.policy_compression_check(config jsonb) RETURNS void LANGUAGE PLPGSQL AS $$ BEGIN IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN @@ -715,16 +705,6 @@ END$$ SET search_path TO pg_catalog,pg_temp; -CREATE OR REPLACE FUNCTION _timescaledb_internal.remote_txn_heal_data_node(foreign_server_oid oid) RETURNS integer LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.remote_txn_heal_data_node(oid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - RETURN _timescaledb_functions.remote_txn_heal_data_node($1); -END$$ -SET search_path TO pg_catalog,pg_temp; - - CREATE OR REPLACE FUNCTION _timescaledb_internal.restart_background_workers() RETURNS boolean LANGUAGE PLPGSQL AS $$ BEGIN IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN @@ -745,26 +725,6 @@ END$$ SET search_path TO pg_catalog,pg_temp; -CREATE OR REPLACE FUNCTION _timescaledb_internal.set_dist_id(dist_id uuid) RETURNS boolean LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.set_dist_id(uuid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - RETURN _timescaledb_functions.set_dist_id($1); -END$$ -SET search_path TO pg_catalog,pg_temp; - - -CREATE OR REPLACE FUNCTION _timescaledb_internal.set_peer_dist_id(dist_id uuid) RETURNS boolean LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.set_peer_dist_id(uuid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - RETURN _timescaledb_functions.set_peer_dist_id($1); -END$$ -SET search_path TO pg_catalog,pg_temp; - - CREATE OR REPLACE FUNCTION _timescaledb_internal.show_chunk(chunk regclass) RETURNS TABLE(chunk_id INTEGER, hypertable_id INTEGER, schema_name NAME, table_name NAME, relkind "char", slices JSONB) LANGUAGE PLPGSQL AS $$ BEGIN IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN @@ -775,16 +735,6 @@ END$$ SET search_path TO pg_catalog,pg_temp; -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) LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.show_connection_cache() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - RETURN QUERY SELECT * FROM _timescaledb_functions.show_connection_cache(); -END$$ -SET search_path TO pg_catalog,pg_temp; - - CREATE OR REPLACE FUNCTION _timescaledb_internal.start_background_workers() RETURNS boolean LANGUAGE PLPGSQL AS $$ BEGIN IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN @@ -895,16 +845,6 @@ END$$ SET search_path TO pg_catalog,pg_temp; -CREATE OR REPLACE FUNCTION _timescaledb_internal.validate_as_data_node() RETURNS void LANGUAGE PLPGSQL AS $$ -BEGIN - IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN - RAISE WARNING 'function _timescaledb_internal.validate_as_data_node() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version.'; - END IF; - PERFORM _timescaledb_functions.validate_as_data_node(); -END$$ -SET search_path TO pg_catalog,pg_temp; - - CREATE OR REPLACE PROCEDURE _timescaledb_internal.cagg_migrate_create_plan(_cagg_data _timescaledb_catalog.continuous_agg,_cagg_name_new text,_override boolean=false,_drop_old boolean=false) LANGUAGE PLPGSQL AS $$ BEGIN IF current_setting('timescaledb.enable_deprecation_warnings', true)::bool THEN diff --git a/sql/data_node.sql b/sql/data_node.sql deleted file mode 100644 index 73de2d3e6..000000000 --- a/sql/data_node.sql +++ /dev/null @@ -1,12 +0,0 @@ --- 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. - --- Check if a data node is up -CREATE OR REPLACE FUNCTION _timescaledb_functions.ping_data_node(node_name NAME, timeout INTERVAL = NULL) RETURNS BOOLEAN -AS '@MODULE_PATHNAME@', 'ts_data_node_ping' LANGUAGE C VOLATILE; - -CREATE OR REPLACE FUNCTION _timescaledb_functions.remote_txn_heal_data_node(foreign_server_oid oid) -RETURNS INT -AS '@MODULE_PATHNAME@', 'ts_remote_txn_heal_data_node' -LANGUAGE C STRICT; diff --git a/sql/ddl_api.sql b/sql/ddl_api.sql index 67e3ccdd2..1a37b3f70 100644 --- a/sql/ddl_api.sql +++ b/sql/ddl_api.sql @@ -20,9 +20,6 @@ -- chunk_target_size - (Optional) The target size for chunks (e.g., '1000MB', 'estimate', or 'off') -- chunk_sizing_func - (Optional) A function to calculate the chunk time interval for new chunks -- time_partitioning_func - (Optional) The partitioning function to use for "time" partitioning --- replication_factor - (Optional) Set replication_factor to use with the new hypertable --- data_nodes - (Optional) The specific data nodes to distribute this hypertable across --- distributed - (Optional) Create distributed hypertable CREATE OR REPLACE FUNCTION @extschema@.create_hypertable( relation REGCLASS, time_column_name NAME, @@ -37,31 +34,9 @@ CREATE OR REPLACE FUNCTION @extschema@.create_hypertable( migrate_data BOOLEAN = FALSE, chunk_target_size TEXT = NULL, chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc, - time_partitioning_func REGPROC = NULL, - replication_factor INTEGER = NULL, - data_nodes NAME[] = NULL, - distributed BOOLEAN = NULL + time_partitioning_func REGPROC = NULL ) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_create' LANGUAGE C VOLATILE; -CREATE OR REPLACE FUNCTION @extschema@.create_distributed_hypertable( - relation REGCLASS, - time_column_name NAME, - partitioning_column NAME = NULL, - number_partitions INTEGER = NULL, - associated_schema_name NAME = NULL, - associated_table_prefix NAME = NULL, - chunk_time_interval ANYELEMENT = NULL::bigint, - create_default_indexes BOOLEAN = TRUE, - if_not_exists BOOLEAN = FALSE, - partitioning_func REGPROC = NULL, - migrate_data BOOLEAN = FALSE, - chunk_target_size TEXT = NULL, - chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc, - time_partitioning_func REGPROC = NULL, - replication_factor INTEGER = NULL, - data_nodes NAME[] = NULL -) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_create' LANGUAGE C VOLATILE; - -- A generalized hypertable creation API that can be used to convert a PostgreSQL table -- with TIME/SERIAL/BIGSERIAL columns to a hypertable. -- @@ -205,69 +180,6 @@ AS '@MODULE_PATHNAME@', 'ts_tablespace_detach_all_from_hypertable' LANGUAGE C VO CREATE OR REPLACE FUNCTION @extschema@.show_tablespaces(hypertable REGCLASS) RETURNS SETOF NAME AS '@MODULE_PATHNAME@', 'ts_tablespace_show' LANGUAGE C VOLATILE STRICT; --- Add a data node to a TimescaleDB distributed database. -CREATE OR REPLACE FUNCTION @extschema@.add_data_node( - node_name NAME, - host TEXT, - database NAME = NULL, - port INTEGER = NULL, - if_not_exists BOOLEAN = FALSE, - bootstrap BOOLEAN = TRUE, - password TEXT = NULL -) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME, - node_created BOOL, database_created BOOL, extension_created BOOL) -AS '@MODULE_PATHNAME@', 'ts_data_node_add' LANGUAGE C VOLATILE; - --- Delete a data node from a distributed database -CREATE OR REPLACE FUNCTION @extschema@.delete_data_node( - node_name NAME, - if_exists BOOLEAN = FALSE, - force BOOLEAN = FALSE, - repartition BOOLEAN = TRUE, - drop_database BOOLEAN = FALSE -) RETURNS BOOLEAN AS '@MODULE_PATHNAME@', 'ts_data_node_delete' LANGUAGE C VOLATILE; - --- Attach a data node to a distributed hypertable -CREATE OR REPLACE FUNCTION @extschema@.attach_data_node( - node_name NAME, - hypertable REGCLASS, - if_not_attached BOOLEAN = FALSE, - repartition BOOLEAN = TRUE -) RETURNS TABLE(hypertable_id INTEGER, node_hypertable_id INTEGER, node_name NAME) -AS '@MODULE_PATHNAME@', 'ts_data_node_attach' LANGUAGE C VOLATILE; - --- Detach a data node from a distributed hypertable. NULL hypertable means it will detach from all distributed hypertables -CREATE OR REPLACE FUNCTION @extschema@.detach_data_node( - node_name NAME, - hypertable REGCLASS = NULL, - if_attached BOOLEAN = FALSE, - force BOOLEAN = FALSE, - repartition BOOLEAN = TRUE, - drop_remote_data BOOLEAN = FALSE -) RETURNS INTEGER -AS '@MODULE_PATHNAME@', 'ts_data_node_detach' LANGUAGE C VOLATILE; - --- Execute query on a specified list of data nodes. By default node_list is NULL, which means --- to execute the query on every data node -CREATE OR REPLACE PROCEDURE @extschema@.distributed_exec( - query TEXT, - node_list name[] = NULL, - transactional BOOLEAN = TRUE) -AS '@MODULE_PATHNAME@', 'ts_distributed_exec' LANGUAGE C; - --- Execute pg_create_restore_point() on each data node -CREATE OR REPLACE FUNCTION @extschema@.create_distributed_restore_point( - name TEXT -) RETURNS TABLE(node_name NAME, node_type TEXT, restore_point pg_lsn) -AS '@MODULE_PATHNAME@', 'ts_create_distributed_restore_point' LANGUAGE C VOLATILE STRICT; - --- Sets new replication factor for distributed hypertable -CREATE OR REPLACE FUNCTION @extschema@.set_replication_factor( - hypertable REGCLASS, - replication_factor INTEGER -) RETURNS VOID -AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_set_replication_factor' LANGUAGE C VOLATILE; - -- Refresh a continuous aggregate across the given window. CREATE OR REPLACE PROCEDURE @extschema@.refresh_continuous_aggregate( continuous_aggregate REGCLASS, @@ -275,11 +187,3 @@ CREATE OR REPLACE PROCEDURE @extschema@.refresh_continuous_aggregate( window_end "any" ) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_continuous_agg_refresh'; -CREATE OR REPLACE FUNCTION @extschema@.alter_data_node( - node_name NAME, - host TEXT = NULL, - database NAME = NULL, - port INTEGER = NULL, - available BOOLEAN = NULL -) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME, available BOOLEAN) -AS '@MODULE_PATHNAME@', 'ts_data_node_alter' LANGUAGE C VOLATILE; diff --git a/sql/dist_internal.sql b/sql/dist_internal.sql deleted file mode 100644 index 49500705d..000000000 --- a/sql/dist_internal.sql +++ /dev/null @@ -1,29 +0,0 @@ --- 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_functions.set_dist_id(dist_id UUID) RETURNS BOOL -AS '@MODULE_PATHNAME@', 'ts_dist_set_id' LANGUAGE C VOLATILE STRICT; - -CREATE OR REPLACE FUNCTION _timescaledb_functions.set_peer_dist_id(dist_id UUID) RETURNS BOOL -AS '@MODULE_PATHNAME@', 'ts_dist_set_peer_id' 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_functions.validate_as_data_node() RETURNS void -AS '@MODULE_PATHNAME@', 'ts_dist_validate_as_data_node' LANGUAGE C VOLATILE STRICT; - -CREATE OR REPLACE FUNCTION _timescaledb_functions.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; diff --git a/sql/updates/latest-dev.sql b/sql/updates/latest-dev.sql index e69de29bb..d1911256d 100644 --- a/sql/updates/latest-dev.sql +++ b/sql/updates/latest-dev.sql @@ -0,0 +1,45 @@ + +DROP FUNCTION IF EXISTS _timescaledb_functions.ping_data_node; +DROP FUNCTION IF EXISTS _timescaledb_internal.ping_data_node; +DROP FUNCTION IF EXISTS _timescaledb_functions.remote_txn_heal_data_node; +DROP FUNCTION IF EXISTS _timescaledb_internal.remote_txn_heal_data_node; + +DROP FUNCTION IF EXISTS _timescaledb_functions.set_dist_id; +DROP FUNCTION IF EXISTS _timescaledb_internal.set_dist_id; +DROP FUNCTION IF EXISTS _timescaledb_functions.set_peer_dist_id; +DROP FUNCTION IF EXISTS _timescaledb_internal.set_peer_dist_id; +DROP FUNCTION IF EXISTS _timescaledb_functions.validate_as_data_node; +DROP FUNCTION IF EXISTS _timescaledb_internal.validate_as_data_node; +DROP FUNCTION IF EXISTS _timescaledb_functions.show_connection_cache; +DROP FUNCTION IF EXISTS _timescaledb_internal.show_connection_cache; + +DROP FUNCTION IF EXISTS @extschema@.create_hypertable(relation REGCLASS, time_column_name NAME, partitioning_column NAME, number_partitions INTEGER, associated_schema_name NAME, associated_table_prefix NAME, chunk_time_interval ANYELEMENT, create_default_indexes BOOLEAN, if_not_exists BOOLEAN, partitioning_func REGPROC, migrate_data BOOLEAN, chunk_target_size TEXT, chunk_sizing_func REGPROC, time_partitioning_func REGPROC, replication_factor INTEGER, data_nodes NAME[], distributed BOOLEAN); + +CREATE FUNCTION @extschema@.create_hypertable( + relation REGCLASS, + time_column_name NAME, + partitioning_column NAME = NULL, + number_partitions INTEGER = NULL, + associated_schema_name NAME = NULL, + associated_table_prefix NAME = NULL, + chunk_time_interval ANYELEMENT = NULL::bigint, + create_default_indexes BOOLEAN = TRUE, + if_not_exists BOOLEAN = FALSE, + partitioning_func REGPROC = NULL, + migrate_data BOOLEAN = FALSE, + chunk_target_size TEXT = NULL, + chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc, + time_partitioning_func REGPROC = NULL +) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_create' LANGUAGE C VOLATILE; + +DROP FUNCTION IF EXISTS @extschema@.create_distributed_hypertable; + +DROP FUNCTION IF EXISTS @extschema@.add_data_node; +DROP FUNCTION IF EXISTS @extschema@.delete_data_node; +DROP FUNCTION IF EXISTS @extschema@.attach_data_node; +DROP FUNCTION IF EXISTS @extschema@.detach_data_node; +DROP FUNCTION IF EXISTS @extschema@.alter_data_node; + +DROP PROCEDURE IF EXISTS @extschema@.distributed_exec; +DROP FUNCTION IF EXISTS @extschema@.create_distributed_restore_point; +DROP FUNCTION IF EXISTS @extschema@.set_replication_factor; diff --git a/sql/updates/reverse-dev.sql b/sql/updates/reverse-dev.sql index 92ad16e72..6b3b5f065 100644 --- a/sql/updates/reverse-dev.sql +++ b/sql/updates/reverse-dev.sql @@ -1,3 +1,143 @@ -- Manually drop the following functions / procedures since 'OR REPLACE' is missing in 2.13.0 DROP PROCEDURE IF EXISTS _timescaledb_functions.repair_relation_acls(); DROP FUNCTION IF EXISTS _timescaledb_functions.makeaclitem(regrole, regrole, text, bool); + +CREATE FUNCTION _timescaledb_functions.ping_data_node(node_name NAME, timeout INTERVAL = NULL) RETURNS BOOLEAN +AS '@MODULE_PATHNAME@', 'ts_data_node_ping' LANGUAGE C VOLATILE; + +CREATE FUNCTION _timescaledb_functions.remote_txn_heal_data_node(foreign_server_oid oid) +RETURNS INT +AS '@MODULE_PATHNAME@', 'ts_remote_txn_heal_data_node' +LANGUAGE C STRICT; + +CREATE FUNCTION _timescaledb_functions.set_dist_id(dist_id UUID) RETURNS BOOL +AS '@MODULE_PATHNAME@', 'ts_dist_set_id' LANGUAGE C VOLATILE STRICT; + +CREATE FUNCTION _timescaledb_functions.set_peer_dist_id(dist_id UUID) RETURNS BOOL +AS '@MODULE_PATHNAME@', 'ts_dist_set_peer_id' 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 FUNCTION _timescaledb_functions.validate_as_data_node() RETURNS void +AS '@MODULE_PATHNAME@', 'ts_dist_validate_as_data_node' LANGUAGE C VOLATILE STRICT; + +CREATE FUNCTION _timescaledb_functions.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; + +DROP FUNCTION IF EXISTS @extschema@.create_hypertable(relation REGCLASS, time_column_name NAME, partitioning_column NAME, number_partitions INTEGER, associated_schema_name NAME, associated_table_prefix NAME, chunk_time_interval ANYELEMENT, create_default_indexes BOOLEAN, if_not_exists BOOLEAN, partitioning_func REGPROC, migrate_data BOOLEAN, chunk_target_size TEXT, chunk_sizing_func REGPROC, time_partitioning_func REGPROC); + +CREATE FUNCTION @extschema@.create_hypertable( + relation REGCLASS, + time_column_name NAME, + partitioning_column NAME = NULL, + number_partitions INTEGER = NULL, + associated_schema_name NAME = NULL, + associated_table_prefix NAME = NULL, + chunk_time_interval ANYELEMENT = NULL::bigint, + create_default_indexes BOOLEAN = TRUE, + if_not_exists BOOLEAN = FALSE, + partitioning_func REGPROC = NULL, + migrate_data BOOLEAN = FALSE, + chunk_target_size TEXT = NULL, + chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc, + time_partitioning_func REGPROC = NULL, + replication_factor INTEGER = NULL, + data_nodes NAME[] = NULL, + distributed BOOLEAN = NULL +) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_create' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.create_distributed_hypertable( + relation REGCLASS, + time_column_name NAME, + partitioning_column NAME = NULL, + number_partitions INTEGER = NULL, + associated_schema_name NAME = NULL, + associated_table_prefix NAME = NULL, + chunk_time_interval ANYELEMENT = NULL::bigint, + create_default_indexes BOOLEAN = TRUE, + if_not_exists BOOLEAN = FALSE, + partitioning_func REGPROC = NULL, + migrate_data BOOLEAN = FALSE, + chunk_target_size TEXT = NULL, + chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc, + time_partitioning_func REGPROC = NULL, + replication_factor INTEGER = NULL, + data_nodes NAME[] = NULL +) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_create' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.add_data_node( + node_name NAME, + host TEXT, + database NAME = NULL, + port INTEGER = NULL, + if_not_exists BOOLEAN = FALSE, + bootstrap BOOLEAN = TRUE, + password TEXT = NULL +) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME, + node_created BOOL, database_created BOOL, extension_created BOOL) +AS '@MODULE_PATHNAME@', 'ts_data_node_add' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.delete_data_node( + node_name NAME, + if_exists BOOLEAN = FALSE, + force BOOLEAN = FALSE, + repartition BOOLEAN = TRUE, + drop_database BOOLEAN = FALSE +) RETURNS BOOLEAN AS '@MODULE_PATHNAME@', 'ts_data_node_delete' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.attach_data_node( + node_name NAME, + hypertable REGCLASS, + if_not_attached BOOLEAN = FALSE, + repartition BOOLEAN = TRUE +) RETURNS TABLE(hypertable_id INTEGER, node_hypertable_id INTEGER, node_name NAME) +AS '@MODULE_PATHNAME@', 'ts_data_node_attach' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.detach_data_node( + node_name NAME, + hypertable REGCLASS = NULL, + if_attached BOOLEAN = FALSE, + force BOOLEAN = FALSE, + repartition BOOLEAN = TRUE, + drop_remote_data BOOLEAN = FALSE +) RETURNS INTEGER +AS '@MODULE_PATHNAME@', 'ts_data_node_detach' LANGUAGE C VOLATILE; + +CREATE FUNCTION @extschema@.alter_data_node( + node_name NAME, + host TEXT = NULL, + database NAME = NULL, + port INTEGER = NULL, + available BOOLEAN = NULL +) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME, available BOOLEAN) + +AS '@MODULE_PATHNAME@', 'ts_data_node_alter' LANGUAGE C VOLATILE; +CREATE PROCEDURE @extschema@.distributed_exec( + query TEXT, + node_list name[] = NULL, + transactional BOOLEAN = TRUE) +AS '@MODULE_PATHNAME@', 'ts_distributed_exec' LANGUAGE C; + +CREATE FUNCTION @extschema@.create_distributed_restore_point( + name TEXT +) RETURNS TABLE(node_name NAME, node_type TEXT, restore_point pg_lsn) +AS '@MODULE_PATHNAME@', 'ts_create_distributed_restore_point' LANGUAGE C VOLATILE STRICT; + +CREATE FUNCTION @extschema@.set_replication_factor( + hypertable REGCLASS, + replication_factor INTEGER +) RETURNS VOID +AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_set_replication_factor' LANGUAGE C VOLATILE; + diff --git a/src/hypertable.c b/src/hypertable.c index 072cec66e..40dceba12 100644 --- a/src/hypertable.c +++ b/src/hypertable.c @@ -1841,9 +1841,9 @@ ts_hypertable_create_time_prev(PG_FUNCTION_ARGS, bool is_dist_call) text *target_size = PG_ARGISNULL(11) ? NULL : PG_GETARG_TEXT_P(11); Oid sizing_func = PG_ARGISNULL(12) ? InvalidOid : PG_GETARG_OID(12); regproc open_partitioning_func = PG_ARGISNULL(13) ? InvalidOid : PG_GETARG_OID(13); - bool replication_factor_is_null = PG_ARGISNULL(14); - int32 replication_factor_in = replication_factor_is_null ? 0 : PG_GETARG_INT32(14); - ArrayType *data_node_arr = PG_ARGISNULL(15) ? NULL : PG_GETARG_ARRAYTYPE_P(15); + bool replication_factor_is_null = true; + int32 replication_factor_in = 0; + ArrayType *data_node_arr = NULL; bool distributed_is_null; bool distributed; @@ -1857,18 +1857,8 @@ ts_hypertable_create_time_prev(PG_FUNCTION_ARGS, bool is_dist_call) (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("partition column cannot be NULL"))); - /* create_distributed_hypertable() does not have explicit - * distributed argument */ - if (!is_dist_call) - { - distributed_is_null = PG_ARGISNULL(16); - distributed = distributed_is_null ? false : PG_GETARG_BOOL(16); - } - else - { - distributed_is_null = false; - distributed = true; - } + distributed_is_null = true; + distributed = false; DimensionInfo *open_dim_info = ts_dimension_info_create_open(table_relid, diff --git a/tsl/test/shared/expected/compat.out b/tsl/test/shared/expected/compat.out index 9667ae1dc..e850c03bd 100644 --- a/tsl/test/shared/expected/compat.out +++ b/tsl/test/shared/expected/compat.out @@ -253,9 +253,6 @@ WARNING: function _timescaledb_internal.partialize_agg(anyelement) is deprecate (1 row) -SELECT _timescaledb_internal.ping_data_node(NULL,NULL); -WARNING: function _timescaledb_internal.ping_data_node(name,interval) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. -ERROR: data node name cannot be NULL SELECT _timescaledb_internal.policy_compression_check(NULL); WARNING: function _timescaledb_internal.policy_compression_check(jsonb) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: config must not be NULL @@ -289,35 +286,15 @@ WARNING: function _timescaledb_internal.relation_size(regclass) is deprecated a (,,,) (1 row) -SELECT _timescaledb_internal.remote_txn_heal_data_node(0); -WARNING: function _timescaledb_internal.remote_txn_heal_data_node(oid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. -ERROR: cache lookup failed for foreign server 0 SELECT _timescaledb_internal.restart_background_workers(); WARNING: function _timescaledb_internal.restart_background_workers() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: must be superuser to restart background workers SELECT _timescaledb_internal.set_chunk_default_data_node(0,NULL); WARNING: function _timescaledb_internal.set_chunk_default_data_node(regclass,name) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: invalid chunk: cannot be NULL -SELECT _timescaledb_internal.set_dist_id(NULL); -WARNING: function _timescaledb_internal.set_dist_id(uuid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. - set_dist_id - -(1 row) - -SELECT _timescaledb_internal.set_peer_dist_id(NULL); -WARNING: function _timescaledb_internal.set_peer_dist_id(uuid) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. - set_peer_dist_id - -(1 row) - SELECT _timescaledb_internal.show_chunk(0); WARNING: function _timescaledb_internal.show_chunk(regclass) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: invalid Oid -SELECT pg_typeof(_timescaledb_internal.show_connection_cache()); -WARNING: function _timescaledb_internal.show_connection_cache() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. - pg_typeof -(0 rows) - SELECT _timescaledb_internal.start_background_workers(); WARNING: function _timescaledb_internal.start_background_workers() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: must be superuser to start background workers @@ -372,13 +349,6 @@ WARNING: function _timescaledb_internal.tsl_loaded() is deprecated and has been SELECT _timescaledb_internal.unfreeze_chunk(0); WARNING: function _timescaledb_internal.unfreeze_chunk(regclass) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: invalid Oid -SELECT _timescaledb_internal.validate_as_data_node(); -WARNING: function _timescaledb_internal.validate_as_data_node() is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. -WARNING: max_prepared_transactions is set low - validate_as_data_node - -(1 row) - CALL _timescaledb_internal.cagg_migrate_create_plan(NULL,NULL,true,true); WARNING: procedure _timescaledb_internal.cagg_migrate_create_plan(_timescaledb_catalog.continuous_agg,text,boolean,boolean) is deprecated and has been moved to _timescaledb_functions schema. this compatibility function will be removed in a future version. ERROR: permission denied for table continuous_agg_migrate_plan diff --git a/tsl/test/shared/expected/extension.out b/tsl/test/shared/expected/extension.out index 2336ab5e8..1b1dfbc9e 100644 --- a/tsl/test/shared/expected/extension.out +++ b/tsl/test/shared/expected/extension.out @@ -111,7 +111,6 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_functions.makeaclitem(regrole,regrole,text,boolean) _timescaledb_functions.materialization_invalidation_log_delete(integer) _timescaledb_functions.partialize_agg(anyelement) - _timescaledb_functions.ping_data_node(name,interval) _timescaledb_functions.policy_compression(integer,jsonb) _timescaledb_functions.policy_compression_check(jsonb) _timescaledb_functions.policy_compression_execute(integer,integer,anyelement,integer,boolean,boolean,boolean) @@ -128,16 +127,12 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_functions.range_value_to_pretty(bigint,regtype) _timescaledb_functions.recompress_chunk_segmentwise(regclass,boolean) _timescaledb_functions.relation_size(regclass) - _timescaledb_functions.remote_txn_heal_data_node(oid) _timescaledb_functions.repair_relation_acls() _timescaledb_functions.restart_background_workers() _timescaledb_functions.rxid_in(cstring) _timescaledb_functions.rxid_out(rxid) _timescaledb_functions.set_chunk_default_data_node(regclass,name) - _timescaledb_functions.set_dist_id(uuid) - _timescaledb_functions.set_peer_dist_id(uuid) _timescaledb_functions.show_chunk(regclass) - _timescaledb_functions.show_connection_cache() _timescaledb_functions.start_background_workers() _timescaledb_functions.stop_background_workers() _timescaledb_functions.subtract_integer_from_now(regclass,bigint) @@ -149,7 +144,6 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_functions.to_unix_microseconds(timestamp with time zone) _timescaledb_functions.tsl_loaded() _timescaledb_functions.unfreeze_chunk(regclass) - _timescaledb_functions.validate_as_data_node() _timescaledb_functions.wait_subscription_sync(name,name,integer,numeric) _timescaledb_internal.alter_job_set_hypertable_id(integer,regclass) _timescaledb_internal.attach_osm_table_chunk(regclass,regclass) @@ -222,7 +216,6 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_internal.invalidation_process_hypertable_log(integer,integer,regtype,integer[],bigint[],bigint[],text[]) _timescaledb_internal.materialization_invalidation_log_delete(integer) _timescaledb_internal.partialize_agg(anyelement) - _timescaledb_internal.ping_data_node(name,interval) _timescaledb_internal.policy_compression(integer,jsonb) _timescaledb_internal.policy_compression_check(jsonb) _timescaledb_internal.policy_compression_execute(integer,integer,anyelement,integer,boolean,boolean,boolean) @@ -239,13 +232,9 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_internal.range_value_to_pretty(bigint,regtype) _timescaledb_internal.recompress_chunk_segmentwise(regclass,boolean) _timescaledb_internal.relation_size(regclass) - _timescaledb_internal.remote_txn_heal_data_node(oid) _timescaledb_internal.restart_background_workers() _timescaledb_internal.set_chunk_default_data_node(regclass,name) - _timescaledb_internal.set_dist_id(uuid) - _timescaledb_internal.set_peer_dist_id(uuid) _timescaledb_internal.show_chunk(regclass) - _timescaledb_internal.show_connection_cache() _timescaledb_internal.start_background_workers() _timescaledb_internal.stop_background_workers() _timescaledb_internal.subtract_integer_from_now(regclass,bigint) @@ -257,23 +246,19 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text _timescaledb_internal.to_unix_microseconds(timestamp with time zone) _timescaledb_internal.tsl_loaded() _timescaledb_internal.unfreeze_chunk(regclass) - _timescaledb_internal.validate_as_data_node() _timescaledb_internal.wait_subscription_sync(name,name,integer,numeric) debug_waitpoint_enable(text) debug_waitpoint_id(text) debug_waitpoint_release(text) add_compression_policy(regclass,"any",boolean,interval,timestamp with time zone,text,interval) add_continuous_aggregate_policy(regclass,"any","any",interval,boolean,timestamp with time zone,text) - add_data_node(name,text,name,integer,boolean,boolean,text) add_dimension(regclass,_timescaledb_internal.dimension_info,boolean) add_dimension(regclass,name,integer,anyelement,regproc,boolean) add_job(regproc,interval,jsonb,timestamp with time zone,boolean,regproc,boolean,text) add_reorder_policy(regclass,name,boolean,timestamp with time zone,text) add_retention_policy(regclass,"any",boolean,interval,timestamp with time zone,text,interval) - alter_data_node(name,text,name,integer,boolean) alter_job(integer,interval,interval,integer,interval,boolean,jsonb,timestamp with time zone,boolean,regproc,boolean,timestamp with time zone,text) approximate_row_count(regclass) - attach_data_node(name,regclass,boolean,boolean) attach_tablespace(name,regclass,boolean) by_hash(name,integer,regproc) by_range(name,anyelement,regproc) @@ -281,17 +266,12 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text chunk_compression_stats(regclass) chunks_detailed_size(regclass) compress_chunk(regclass,boolean) - create_distributed_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc,integer,name[]) - create_distributed_restore_point(text) create_hypertable(regclass,_timescaledb_internal.dimension_info,boolean,boolean,boolean) - create_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc,integer,name[],boolean) + create_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc) decompress_chunk(regclass,boolean) - delete_data_node(name,boolean,boolean,boolean,boolean) delete_job(integer) - detach_data_node(name,regclass,boolean,boolean,boolean,boolean) detach_tablespace(name,regclass,boolean) detach_tablespaces(regclass) - distributed_exec(text,name[],boolean) drop_chunks(regclass,"any","any",boolean,"any","any") first(anyelement,"any") histogram(double precision,double precision,double precision,integer) @@ -320,7 +300,6 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text set_integer_now_func(regclass,regproc,boolean) set_number_partitions(regclass,integer,name) set_partitioning_interval(regclass,anyelement,name) - set_replication_factor(regclass,integer) show_chunks(regclass,"any","any","any","any") show_tablespaces(regclass) time_bucket(bigint,bigint) diff --git a/tsl/test/shared/sql/compat.sql b/tsl/test/shared/sql/compat.sql index cb6b7cda9..1a11b2ecc 100644 --- a/tsl/test/shared/sql/compat.sql +++ b/tsl/test/shared/sql/compat.sql @@ -60,7 +60,6 @@ SELECT _timescaledb_internal.invalidation_process_hypertable_log(0,0,0,NULL,NULL SELECT _timescaledb_internal.invalidation_process_hypertable_log(0,0,0,NULL,NULL,NULL,NULL); SELECT _timescaledb_internal.materialization_invalidation_log_delete(0); SELECT _timescaledb_internal.partialize_agg(NULL::text); -SELECT _timescaledb_internal.ping_data_node(NULL,NULL); SELECT _timescaledb_internal.policy_compression_check(NULL); SELECT _timescaledb_internal.policy_job_error_retention(0,NULL); SELECT _timescaledb_internal.policy_job_error_retention_check(NULL); @@ -70,13 +69,9 @@ SELECT _timescaledb_internal.policy_retention_check(NULL); SELECT _timescaledb_internal.range_value_to_pretty(0,0); SELECT _timescaledb_internal.recompress_chunk_segmentwise(0,true); SELECT _timescaledb_internal.relation_size(0); -SELECT _timescaledb_internal.remote_txn_heal_data_node(0); SELECT _timescaledb_internal.restart_background_workers(); SELECT _timescaledb_internal.set_chunk_default_data_node(0,NULL); -SELECT _timescaledb_internal.set_dist_id(NULL); -SELECT _timescaledb_internal.set_peer_dist_id(NULL); SELECT _timescaledb_internal.show_chunk(0); -SELECT pg_typeof(_timescaledb_internal.show_connection_cache()); SELECT _timescaledb_internal.start_background_workers(); SELECT _timescaledb_internal.stop_background_workers(); SELECT _timescaledb_internal.subtract_integer_from_now(0,0); @@ -88,7 +83,6 @@ SELECT _timescaledb_internal.to_timestamp_without_timezone(0); SELECT _timescaledb_internal.to_unix_microseconds(NULL); SELECT _timescaledb_internal.tsl_loaded(); SELECT _timescaledb_internal.unfreeze_chunk(0); -SELECT _timescaledb_internal.validate_as_data_node(); CALL _timescaledb_internal.cagg_migrate_create_plan(NULL,NULL,true,true); CALL _timescaledb_internal.cagg_migrate_execute_copy_data(NULL,NULL); CALL _timescaledb_internal.cagg_migrate_execute_copy_policies(NULL,NULL);