From b26eeaecd30d596f3c69eb883d5d6a1760fdb073 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Wed, 26 Jan 2022 16:57:08 +0100 Subject: [PATCH 1/2] Use a fixed application_name while connecting to remote nodes Citus heavily relies on application_name, see `IsCitusInitiatedRemoteBackend()`. But if the user set the application name, such as export PGAPPNAME=test_name, Citus uses that name while connecting to the remote node. With this commit, we ensure that Citus always connects with the "citus" user name to the remote nodes. --- .../connection/connection_configuration.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backend/distributed/connection/connection_configuration.c b/src/backend/distributed/connection/connection_configuration.c index a0bd31e25..32dc21e40 100644 --- a/src/backend/distributed/connection/connection_configuration.c +++ b/src/backend/distributed/connection/connection_configuration.c @@ -72,8 +72,8 @@ InitConnParams() /* * ResetConnParams frees all strings in the keywords and parameters arrays, * sets their elements to null, and resets the ConnParamsSize to zero before - * adding back any hardcoded global connection settings (at present, only the - * fallback_application_name of 'citus'). + * adding back any hardcoded global connection settings (at present, there + * are no). */ void ResetConnParams() @@ -89,8 +89,6 @@ ResetConnParams() ConnParams.size = 0; InvalidateConnParamsHashEntries(); - - AddConnParam("fallback_application_name", CITUS_APPLICATION_NAME); } @@ -253,14 +251,16 @@ GetConnParams(ConnectionHashKey *key, char ***keywords, char ***values, "port", "dbname", "user", - "client_encoding" + "client_encoding", + "application_name" }; const char *runtimeValues[] = { key->hostname, nodePortString, key->database, key->user, - GetDatabaseEncodingName() + GetDatabaseEncodingName(), + CITUS_APPLICATION_NAME }; /* From 303540e49425fea224f7ef78f5c4094938874e4b Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Thu, 27 Jan 2022 10:39:56 +0100 Subject: [PATCH 2/2] Add PGAPPNAME env. variable to arbitrary configs --- src/test/regress/citus_tests/common.py | 11 +++++++++-- src/test/regress/citus_tests/config.py | 5 +++++ .../regress/citus_tests/upgrade/pg_upgrade_test.py | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/test/regress/citus_tests/common.py b/src/test/regress/citus_tests/common.py index 39d721c14..49cb1bfae 100644 --- a/src/test/regress/citus_tests/common.py +++ b/src/test/regress/citus_tests/common.py @@ -66,7 +66,7 @@ def coordinator_should_haveshards(pg_path, port): utils.psql(pg_path, port, command) -def start_databases(pg_path, rel_data_path, node_name_to_ports, logfile_prefix): +def start_databases(pg_path, rel_data_path, node_name_to_ports, logfile_prefix, env_variables): for node_name in node_name_to_ports.keys(): abs_data_path = os.path.abspath(os.path.join(rel_data_path, node_name)) node_port = node_name_to_ports[node_name] @@ -82,7 +82,13 @@ def start_databases(pg_path, rel_data_path, node_name_to_ports, logfile_prefix): "--log", os.path.join(abs_data_path, logfile_name(logfile_prefix, node_name)), ] + + # set the application name if requires + if env_variables != {}: + os.environ.update(env_variables) + subprocess.run(command, check=True) + atexit.register( stop_databases, pg_path, @@ -127,6 +133,7 @@ def run_pg_regress_without_exit( extra_tests, ) copy_binary_path = os.path.join(input_dir, "copy_modified_wrapper") + exit_code |= subprocess.call(copy_binary_path) return exit_code @@ -241,7 +248,7 @@ def initialize_citus_cluster(bindir, datadir, settings, config): initialize_db_for_cluster( bindir, datadir, settings, config.node_name_to_ports.keys() ) - start_databases(bindir, datadir, config.node_name_to_ports, config.name) + start_databases(bindir, datadir, config.node_name_to_ports, config.name, config.env_variables) create_citus_extension(bindir, config.node_name_to_ports.values()) add_workers(bindir, config.worker_ports, config.coordinator_port()) if config.is_mx: diff --git a/src/test/regress/citus_tests/config.py b/src/test/regress/citus_tests/config.py index e783b3a46..f3091b359 100644 --- a/src/test/regress/citus_tests/config.py +++ b/src/test/regress/citus_tests/config.py @@ -110,6 +110,7 @@ class CitusBaseClusterConfig(object, metaclass=NewInitCaller): } self.new_settings = {} self.add_coordinator_to_metadata = False + self.env_variables = {} def post_init(self): self._init_node_name_ports() @@ -271,6 +272,10 @@ class CitusUnusualExecutorConfig(CitusMXBaseClusterConfig): "citus.local_table_join_policy": "prefer-distributed", } + # this setting does not necessarily need to be here + # could go any other test + self.env_variables = {'PGAPPNAME' : 'test_app'} + class CitusSmallCopyBuffersConfig(CitusMXBaseClusterConfig): def __init__(self, arguments): diff --git a/src/test/regress/citus_tests/upgrade/pg_upgrade_test.py b/src/test/regress/citus_tests/upgrade/pg_upgrade_test.py index f36683cee..045ae42e1 100755 --- a/src/test/regress/citus_tests/upgrade/pg_upgrade_test.py +++ b/src/test/regress/citus_tests/upgrade/pg_upgrade_test.py @@ -112,7 +112,7 @@ def main(config): config.node_name_to_ports.keys(), ) common.start_databases( - config.new_bindir, config.new_datadir, config.node_name_to_ports, config.name + config.new_bindir, config.new_datadir, config.node_name_to_ports, config.name, {} ) citus_finish_pg_upgrade(config.new_bindir, config.node_name_to_ports.values())