Create previously distributed functions in new workers (#2985)

Add distributed func creation queries in dependency replication logic
pull/3000/head
Hanefi Onaldi 2019-09-18 20:23:33 +03:00 committed by GitHub
commit eccba1d4c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 737 additions and 22 deletions

View File

@ -177,6 +177,11 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency)
break;
}
case OCLASS_PROC:
{
return CreateFunctionDDLCommandsIdempotent(dependency);
}
default:
{
break;

View File

@ -20,6 +20,7 @@
#include "access/xact.h"
#include "catalog/namespace.h"
#include "catalog/pg_proc.h"
#include "distributed/commands.h"
#include "distributed/metadata_sync.h"
#include "distributed/metadata/distobject.h"
#include "distributed/multi_executor.h"
@ -29,7 +30,7 @@
#include "utils/fmgrprotos.h"
/* forward declaration for helper functions*/
static const char * GetFunctionDDLCommand(Oid funcOid);
static char * GetFunctionDDLCommand(const RegProcedure funcOid);
static void EnsureSequentialModeForFunctionDDL(void);
PG_FUNCTION_INFO_V1(create_distributed_function);
@ -74,16 +75,32 @@ create_distributed_function(PG_FUNCTION_ARGS)
}
/*
* CreateFunctionDDLCommandsIdempotent returns a list of DDL statements (const char *) to be
* executed on a node to recreate the function addressed by the functionAddress.
*/
List *
CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress)
{
char *ddlCommand = NULL;
Assert(functionAddress->classId == ProcedureRelationId);
ddlCommand = GetFunctionDDLCommand(functionAddress->objectId);
return list_make1(ddlCommand);
}
/*
* GetFunctionDDLCommand returns the complete "CREATE OR REPLACE FUNCTION ..." statement for
* the specified function.
*/
static const char *
GetFunctionDDLCommand(RegProcedure funcOid)
static char *
GetFunctionDDLCommand(const RegProcedure funcOid)
{
OverrideSearchPath *overridePath = NULL;
Datum sqlTextDatum = 0;
const char *sql = NULL;
char *sql = NULL;
/*
* Set search_path to NIL so that all objects outside of pg_catalog will be

View File

@ -159,6 +159,9 @@ extern List * CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress);
extern char * GenerateBackupNameForTypeCollision(const ObjectAddress *address);
extern RenameStmt * CreateRenameTypeStmt(const ObjectAddress *address, char *newName);
/* function.c - forward declarations */
extern List * CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress);
/* vacuum.c - froward declarations */
extern void ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand);

View File

@ -29,11 +29,11 @@ step detector-dump-wait-edges:
waiting_transaction_numblocking_transaction_numblocking_transaction_waiting
266 265 f
281 280 f
transactionnumberwaitingtransactionnumbers
265
266 265
280
281 280
step s1-abort:
ABORT;
@ -77,14 +77,14 @@ step detector-dump-wait-edges:
waiting_transaction_numblocking_transaction_numblocking_transaction_waiting
270 269 f
271 269 f
271 270 t
285 284 f
286 284 f
286 285 t
transactionnumberwaitingtransactionnumbers
269
270 269
271 269,270
284
285 284
286 284,285
step s1-abort:
ABORT;

View File

@ -29,11 +29,11 @@ step detector-dump-wait-edges:
waiting_transaction_numblocking_transaction_numblocking_transaction_waiting
267 266 f
282 281 f
transactionnumberwaitingtransactionnumbers
266
267 266
281
282 281
step s1-abort:
ABORT;
@ -77,14 +77,14 @@ step detector-dump-wait-edges:
waiting_transaction_numblocking_transaction_numblocking_transaction_waiting
271 270 f
272 270 f
272 271 t
286 285 f
287 285 f
287 286 t
transactionnumberwaitingtransactionnumbers
270
271 270
272 270,271
285
286 285
287 285,286
step s1-abort:
ABORT;

View File

@ -18,6 +18,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -37,6 +41,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -79,6 +90,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
count
@ -93,6 +108,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -118,6 +140,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -137,6 +163,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -185,6 +218,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
count
@ -199,6 +236,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -224,6 +268,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -243,6 +291,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -291,6 +346,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
count
@ -305,6 +364,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -330,6 +396,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -349,6 +419,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -392,6 +469,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -407,6 +488,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -432,6 +520,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -451,6 +543,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -500,6 +599,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -515,6 +618,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -540,6 +650,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -559,6 +673,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -608,6 +729,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -623,6 +748,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -648,6 +780,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -667,6 +803,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -735,6 +878,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -750,6 +897,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -775,6 +929,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -794,6 +952,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -881,6 +1046,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -896,6 +1065,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -921,6 +1097,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -940,6 +1120,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1001,6 +1188,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -1016,6 +1207,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1041,6 +1239,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -1060,6 +1262,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1129,6 +1338,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -1145,6 +1358,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1170,6 +1390,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -1189,6 +1413,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1225,6 +1456,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(type,{public.tt1},{})
@ -1242,6 +1477,13 @@ run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,1)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1265,6 +1507,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -1284,6 +1530,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1319,6 +1572,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(type,{public.tt1},{})
@ -1336,6 +1593,13 @@ run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,1)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1359,6 +1623,10 @@ step s1-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
@ -1378,6 +1646,13 @@ count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
@ -1430,6 +1705,10 @@ step s2-print-distributed-objects:
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(schema,{myschema},{})
@ -1448,6 +1727,383 @@ run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,1)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s1-add-worker s2-public-schema s2-distribute-function s1-commit s2-print-distributed-objects
?column?
1
step s1-print-distributed-objects:
SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
1
pg_identify_object_as_address
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
step s1-begin:
BEGIN;
step s1-add-worker:
SELECT 1 FROM master_add_node('localhost', 57638);
?column?
1
step s2-public-schema:
SET search_path TO public;
step s2-distribute-function:
CREATE OR REPLACE FUNCTION add (INT,INT) RETURNS INT AS $$ SELECT $1 + $2 $$ LANGUAGE SQL;
SELECT create_distributed_function('add(INT,INT)');
<waiting ...>
step s1-commit:
COMMIT;
step s2-distribute-function: <... completed>
create_distributed_function
step s2-print-distributed-objects:
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(function,"{public,add}","{integer,integer}")
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
1
run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,1)
master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-public-schema s2-distribute-function s1-add-worker s1-commit s2-print-distributed-objects
?column?
1
step s1-print-distributed-objects:
SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
1
pg_identify_object_as_address
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
step s1-begin:
BEGIN;
step s2-public-schema:
SET search_path TO public;
step s2-distribute-function:
CREATE OR REPLACE FUNCTION add (INT,INT) RETURNS INT AS $$ SELECT $1 + $2 $$ LANGUAGE SQL;
SELECT create_distributed_function('add(INT,INT)');
create_distributed_function
step s1-add-worker:
SELECT 1 FROM master_add_node('localhost', 57638);
?column?
1
step s1-commit:
COMMIT;
step s2-print-distributed-objects:
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(function,"{public,add}","{integer,integer}")
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
1
run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,0)
master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s2-create-schema s2-distribute-function s1-add-worker s2-commit s1-commit s2-print-distributed-objects
?column?
1
step s1-print-distributed-objects:
SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
?column?
1
pg_identify_object_as_address
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
master_remove_node
step s1-begin:
BEGIN;
step s2-begin:
BEGIN;
step s2-create-schema:
CREATE SCHEMA myschema;
SET search_path TO myschema;
step s2-distribute-function:
CREATE OR REPLACE FUNCTION add (INT,INT) RETURNS INT AS $$ SELECT $1 + $2 $$ LANGUAGE SQL;
SELECT create_distributed_function('add(INT,INT)');
create_distributed_function
step s1-add-worker:
SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...>
step s2-commit:
COMMIT;
step s1-add-worker: <... completed>
?column?
1
step s1-commit:
COMMIT;
step s2-print-distributed-objects:
-- print an overview of all distributed objects
SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
-- print if the schema has been created
SELECT count(*) FROM pg_namespace where nspname = 'myschema';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_namespace where nspname = 'myschema';$$);
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
pg_identify_object_as_address
(function,"{myschema,add}","{integer,integer}")
(schema,{myschema},{})
count
1
run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,1)
count
0
run_command_on_workers
(localhost,57637,t,0)
(localhost,57638,t,0)
count
1
run_command_on_workers
(localhost,57637,t,1)
(localhost,57638,t,0)
master_remove_node

View File

@ -20,6 +20,21 @@ teardown
DROP TABLE IF EXISTS t2 CASCADE;
DROP TABLE IF EXISTS t3 CASCADE;
DROP TYPE IF EXISTS tt1 CASCADE;
DROP FUNCTION IF EXISTS add(INT,INT) CASCADE;
-- Remove the pg_dist_object record manually as we do not yet hook into DROP FUNC
-- queries. If the function does not exist, the casting to regprocedure fails.
DO
$do$
BEGIN
DELETE FROM citus.pg_dist_object WHERE objid = 'add(int,int)'::regprocedure;
EXCEPTION
WHEN undefined_function THEN RETURN;
END;
$do$;
-- similarly drop the function in the workers manually
SELECT run_command_on_workers($$DROP FUNCTION IF EXISTS add(INT,INT) CASCADE;$$);
SELECT master_remove_node(nodename, nodeport) FROM pg_dist_node;
}
@ -58,6 +73,10 @@ step "s1-print-distributed-objects"
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
SELECT master_remove_node('localhost', 57638);
}
@ -95,6 +114,12 @@ step "s2-create-table-with-type"
SELECT create_distributed_table('t1', 'a');
}
step "s2-distribute-function"
{
CREATE OR REPLACE FUNCTION add (INT,INT) RETURNS INT AS $$ SELECT $1 + $2 $$ LANGUAGE SQL;
SELECT create_distributed_function('add(INT,INT)');
}
step "s2-begin"
{
BEGIN;
@ -119,6 +144,10 @@ step "s2-print-distributed-objects"
-- print if the type has been created
SELECT count(*) FROM pg_type where typname = 'tt1';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_type where typname = 'tt1';$$);
-- print if the function has been created
SELECT count(*) FROM pg_proc WHERE proname='add';
SELECT run_command_on_workers($$SELECT count(*) FROM pg_proc WHERE proname='add';$$);
}
session "s3"
@ -205,3 +234,8 @@ permutation "s1-print-distributed-objects" "s1-begin" "s2-begin" "s4-begin" "s1-
permutation "s1-print-distributed-objects" "s1-begin" "s1-add-worker" "s2-public-schema" "s2-create-type" "s1-commit" "s2-print-distributed-objects"
permutation "s1-print-distributed-objects" "s1-begin" "s2-public-schema" "s2-create-type" "s1-add-worker" "s1-commit" "s2-print-distributed-objects"
permutation "s1-print-distributed-objects" "s1-begin" "s2-begin" "s2-create-schema" "s2-create-type" "s2-create-table-with-type" "s1-add-worker" "s2-commit" "s1-commit" "s2-print-distributed-objects"
# distributed function tests
permutation "s1-print-distributed-objects" "s1-begin" "s1-add-worker" "s2-public-schema" "s2-distribute-function" "s1-commit" "s2-print-distributed-objects"
permutation "s1-print-distributed-objects" "s1-begin" "s2-public-schema" "s2-distribute-function" "s1-add-worker" "s1-commit" "s2-print-distributed-objects"
permutation "s1-print-distributed-objects" "s1-begin" "s2-begin" "s2-create-schema" "s2-distribute-function" "s1-add-worker" "s2-commit" "s1-commit" "s2-print-distributed-objects"