From e3c763c3f75fb65366b8ca421e944611ee3a39b5 Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Wed, 1 Feb 2017 14:33:21 +0300 Subject: [PATCH] Start remote transactions in master_append_table_to_shard Add a call to RemoteTransactionBeginIfNecessary so that BEGIN is actually sent to the remote connections. This means that ROLLBACK and Ctrl-C are respected and don't leave the table in a partial state. --- .../master/master_stage_protocol.c | 2 ++ .../input/multi_append_table_to_shard.source | 11 ++++++++++ .../output/multi_append_table_to_shard.source | 21 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/backend/distributed/master/master_stage_protocol.c b/src/backend/distributed/master/master_stage_protocol.c index f647ebec2..c04ba0858 100644 --- a/src/backend/distributed/master/master_stage_protocol.c +++ b/src/backend/distributed/master/master_stage_protocol.c @@ -278,6 +278,8 @@ master_append_table_to_shard(PG_FUNCTION_ARGS) quote_literal_cstr(sourceTableName), quote_literal_cstr(sourceNodeName), sourceNodePort); + RemoteTransactionBeginIfNecessary(connection); + executeResult = ExecuteOptionalRemoteCommand(connection, workerAppendQuery->data, &queryResult); PQclear(queryResult); diff --git a/src/test/regress/input/multi_append_table_to_shard.source b/src/test/regress/input/multi_append_table_to_shard.source index def84b299..95cd72deb 100644 --- a/src/test/regress/input/multi_append_table_to_shard.source +++ b/src/test/regress/input/multi_append_table_to_shard.source @@ -138,5 +138,16 @@ WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; SELECT * FROM multi_append_table_to_shard_date; +-- When run inside aborted transaction does not persist changes +INSERT INTO multi_append_table_to_shard_stage VALUES ('2016-02-02', 4); +BEGIN; +SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) +FROM + pg_dist_shard +WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; +ROLLBACK; + +SELECT * FROM multi_append_table_to_shard_date; + DROP TABLE multi_append_table_to_shard_stage; DROP TABLE multi_append_table_to_shard_date; diff --git a/src/test/regress/output/multi_append_table_to_shard.source b/src/test/regress/output/multi_append_table_to_shard.source index 32d7901cf..409c87f05 100644 --- a/src/test/regress/output/multi_append_table_to_shard.source +++ b/src/test/regress/output/multi_append_table_to_shard.source @@ -227,5 +227,26 @@ SELECT * FROM multi_append_table_to_shard_date; 01-01-2016 | 3 (3 rows) +-- When run inside aborted transaction does not persist changes +INSERT INTO multi_append_table_to_shard_stage VALUES ('2016-02-02', 4); +BEGIN; +SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) +FROM + pg_dist_shard +WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; + master_append_table_to_shard +------------------------------ + 0.0266667 +(1 row) + +ROLLBACK; +SELECT * FROM multi_append_table_to_shard_date; + event_date | value +------------+------- + | + | + 01-01-2016 | 3 +(3 rows) + DROP TABLE multi_append_table_to_shard_stage; DROP TABLE multi_append_table_to_shard_date;