diff --git a/src/test/regress/expected/remove_coordinator.out b/src/test/regress/expected/remove_coordinator.out index 907eef8a204..8f8bede2a16 100644 --- a/src/test/regress/expected/remove_coordinator.out +++ b/src/test/regress/expected/remove_coordinator.out @@ -14,5 +14,31 @@ BEGIN; -- that should fail because of bad hostname & port SELECT citus_add_node('200.200.200.200', 1, 200); ERROR: connection to the remote node postgres@200.200.200.200:1 failed -SSL SYSCALL error: EOF detected -connection to server was lost + -- Since above command failed, now Postgres will need to revert the + -- application_name change made in this transaction and this will + -- happen within abort-transaction callback, so we won't be in a + -- transaction block while Postgres does that. + -- + -- And when the application_name changes, Citus tries to re-assign + -- the global pid but it does so only for Citus internal backends, + -- and doing so for Citus internal backends doesn't require being + -- in a transaction block and is safe. + -- + -- However, for the client external backends (like us here), Citus + -- doesn't re-assign the global pid because it's not safe to do so + -- outside of a transaction block. This is because, it would require + -- performing a catalog access to retrive the local node id when the + -- cached local node is invalidated like what just happened here + -- because of the failed citus_add_node() call made above. + -- + -- So by failing here (rather than crashing), we ensure this behavior. +ROLLBACK; +RESET client_min_messages; +RESET citus.node_connection_timeout; +-- restore coordinator for the rest of the tests +SELECT citus_set_coordinator_host('localhost', :master_port); + citus_set_coordinator_host +--------------------------------------------------------------------- + +(1 row) +