Return nodeid instead of record in some UDFs

pull/2963/head
Hadi Moshayedi 2019-09-12 12:23:33 -07:00
parent d23185d077
commit 48ff4691a0
17 changed files with 306 additions and 295 deletions

View File

@ -304,4 +304,62 @@ CREATE OR REPLACE FUNCTION rebalance_table_shards(relation regclass,
COMMENT ON FUNCTION rebalance_table_shards(regclass, float4, int, bigint[], citus.shard_transfer_mode) COMMENT ON FUNCTION rebalance_table_shards(regclass, float4, int, bigint[], citus.shard_transfer_mode)
IS 'rebalance the shards of the given table across the worker nodes (including colocated shards of other tables)'; IS 'rebalance the shards of the given table across the worker nodes (including colocated shards of other tables)';
DROP FUNCTION master_add_node(text, integer, integer, noderole, name);
CREATE FUNCTION master_add_node(nodename text,
nodeport integer,
groupid integer default 0,
noderole noderole default 'primary',
nodecluster name default 'default')
RETURNS INTEGER
LANGUAGE C STRICT
AS 'MODULE_PATHNAME', $$master_add_node$$;
COMMENT ON FUNCTION master_add_node(nodename text, nodeport integer,
groupid integer, noderole noderole, nodecluster name)
IS 'add node to the cluster';
DROP FUNCTION master_add_inactive_node(text, integer, integer, noderole, name);
CREATE FUNCTION master_add_inactive_node(nodename text,
nodeport integer,
groupid integer default 0,
noderole noderole default 'primary',
nodecluster name default 'default')
RETURNS INTEGER
LANGUAGE C STRICT
AS 'MODULE_PATHNAME',$$master_add_inactive_node$$;
COMMENT ON FUNCTION master_add_inactive_node(nodename text,nodeport integer,
groupid integer, noderole noderole,
nodecluster name)
IS 'prepare node by adding it to pg_dist_node';
SET search_path = 'pg_catalog';
DROP FUNCTION master_activate_node(text, integer);
CREATE FUNCTION master_activate_node(nodename text,
nodeport integer)
RETURNS INTEGER
LANGUAGE C STRICT
AS 'MODULE_PATHNAME',$$master_activate_node$$;
COMMENT ON FUNCTION master_activate_node(nodename text, nodeport integer)
IS 'activate a node which is in the cluster';
DROP FUNCTION master_add_secondary_node(text, integer, text, integer, name);
CREATE FUNCTION master_add_secondary_node(nodename text,
nodeport integer,
primaryname text,
primaryport integer,
nodecluster name default 'default')
RETURNS INTEGER
LANGUAGE C STRICT
AS 'MODULE_PATHNAME', $$master_add_secondary_node$$;
COMMENT ON FUNCTION master_add_secondary_node(nodename text, nodeport integer,
primaryname text, primaryport integer,
nodecluster name)
IS 'add a secondary node to the cluster';
REVOKE ALL ON FUNCTION master_activate_node(text,int) FROM PUBLIC;
REVOKE ALL ON FUNCTION master_add_inactive_node(text,int,int,noderole,name) FROM PUBLIC;
REVOKE ALL ON FUNCTION master_add_node(text,int,int,noderole,name) FROM PUBLIC;
REVOKE ALL ON FUNCTION master_add_secondary_node(text,int,text,int,name) FROM PUBLIC;
RESET search_path; RESET search_path;

View File

@ -54,14 +54,13 @@ int GroupSize = 1;
char *CurrentCluster = "default"; char *CurrentCluster = "default";
/* local function forward declarations */ /* local function forward declarations */
static Datum ActivateNode(char *nodeName, int nodePort); static int ActivateNode(char *nodeName, int nodePort);
static void RemoveNodeFromCluster(char *nodeName, int32 nodePort); static void RemoveNodeFromCluster(char *nodeName, int32 nodePort);
static Datum AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId, static int AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId,
char *nodeRack, bool hasMetadata, bool isActive, char *nodeRack, bool hasMetadata, bool isActive,
Oid nodeRole, char *nodeCluster, bool *nodeAlreadyExists); Oid nodeRole, char *nodeCluster, bool *nodeAlreadyExists);
static void SetNodeState(char *nodeName, int32 nodePort, bool isActive); static void SetNodeState(char *nodeName, int32 nodePort, bool isActive);
static HeapTuple GetNodeTuple(char *nodeName, int32 nodePort); static HeapTuple GetNodeTuple(char *nodeName, int32 nodePort);
static Datum GenerateNodeTuple(WorkerNode *workerNode);
static int32 GetNextGroupId(void); static int32 GetNextGroupId(void);
static int GetNextNodeId(void); static int GetNextNodeId(void);
static void InsertNodeRow(int nodeid, char *nodename, int32 nodeport, int32 groupId, static void InsertNodeRow(int nodeid, char *nodename, int32 nodeport, int32 groupId,
@ -85,7 +84,7 @@ PG_FUNCTION_INFO_V1(get_shard_id_for_distribution_column);
/* /*
* master_add_node function adds a new node to the cluster and returns its data. It also * master_add_node function adds a new node to the cluster and returns its id. It also
* replicates all reference tables to the new node. * replicates all reference tables to the new node.
*/ */
Datum Datum
@ -101,7 +100,7 @@ master_add_node(PG_FUNCTION_ARGS)
bool hasMetadata = false; bool hasMetadata = false;
bool isActive = false; bool isActive = false;
bool nodeAlreadyExists = false; bool nodeAlreadyExists = false;
Datum nodeRecord; int nodeId = 0;
CheckCitusVersion(ERROR); CheckCitusVersion(ERROR);
@ -122,7 +121,7 @@ master_add_node(PG_FUNCTION_ARGS)
nodeRole = PG_GETARG_OID(3); nodeRole = PG_GETARG_OID(3);
} }
nodeRecord = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack, nodeId = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack,
hasMetadata, isActive, nodeRole, nodeClusterString, hasMetadata, isActive, nodeRole, nodeClusterString,
&nodeAlreadyExists); &nodeAlreadyExists);
@ -133,16 +132,16 @@ master_add_node(PG_FUNCTION_ARGS)
*/ */
if (!nodeAlreadyExists) if (!nodeAlreadyExists)
{ {
nodeRecord = ActivateNode(nodeNameString, nodePort); ActivateNode(nodeNameString, nodePort);
} }
PG_RETURN_DATUM(nodeRecord); PG_RETURN_INT32(nodeId);
} }
/* /*
* master_add_inactive_node function adds a new node to the cluster as inactive node * master_add_inactive_node function adds a new node to the cluster as inactive node
* and returns information about newly added node. It does not replicate reference * and returns id of the newly added node. It does not replicate reference
* tables to the new node, it only adds new node to the pg_dist_node table. * tables to the new node, it only adds new node to the pg_dist_node table.
*/ */
Datum Datum
@ -159,15 +158,15 @@ master_add_inactive_node(PG_FUNCTION_ARGS)
bool hasMetadata = false; bool hasMetadata = false;
bool isActive = false; bool isActive = false;
bool nodeAlreadyExists = false; bool nodeAlreadyExists = false;
Datum nodeRecord; int nodeId = 0;
CheckCitusVersion(ERROR); CheckCitusVersion(ERROR);
nodeRecord = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack, nodeId = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack,
hasMetadata, isActive, nodeRole, nodeClusterString, hasMetadata, isActive, nodeRole, nodeClusterString,
&nodeAlreadyExists); &nodeAlreadyExists);
PG_RETURN_DATUM(nodeRecord); PG_RETURN_INT32(nodeId);
} }
@ -194,15 +193,15 @@ master_add_secondary_node(PG_FUNCTION_ARGS)
bool hasMetadata = false; bool hasMetadata = false;
bool isActive = true; bool isActive = true;
bool nodeAlreadyExists = false; bool nodeAlreadyExists = false;
Datum nodeRecord; int nodeId = 0;
CheckCitusVersion(ERROR); CheckCitusVersion(ERROR);
nodeRecord = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack, nodeId = AddNodeMetadata(nodeNameString, nodePort, groupId, nodeRack,
hasMetadata, isActive, nodeRole, nodeClusterString, hasMetadata, isActive, nodeRole, nodeClusterString,
&nodeAlreadyExists); &nodeAlreadyExists);
PG_RETURN_DATUM(nodeRecord); PG_RETURN_INT32(nodeId);
} }
@ -305,15 +304,15 @@ master_activate_node(PG_FUNCTION_ARGS)
int32 nodePort = PG_GETARG_INT32(1); int32 nodePort = PG_GETARG_INT32(1);
char *nodeNameString = text_to_cstring(nodeName); char *nodeNameString = text_to_cstring(nodeName);
Datum nodeRecord = 0; int nodeId = 0;
CheckCitusVersion(ERROR); CheckCitusVersion(ERROR);
EnsureCoordinator(); EnsureCoordinator();
nodeRecord = ActivateNode(nodeNameString, nodePort); nodeId = ActivateNode(nodeNameString, nodePort);
PG_RETURN_DATUM(nodeRecord); PG_RETURN_INT32(nodeId);
} }
@ -439,12 +438,11 @@ PrimaryNodeForGroup(int32 groupId, bool *groupContainsNodes)
* includes only replicating the reference tables and setting isactive column of the * includes only replicating the reference tables and setting isactive column of the
* given node. * given node.
*/ */
static Datum static int
ActivateNode(char *nodeName, int nodePort) ActivateNode(char *nodeName, int nodePort)
{ {
WorkerNode *workerNode = NULL; WorkerNode *workerNode = NULL;
bool isActive = true; bool isActive = true;
Datum nodeRecord = 0;
/* take an exclusive lock on pg_dist_node to serialize pg_dist_node changes */ /* take an exclusive lock on pg_dist_node to serialize pg_dist_node changes */
LockRelationOid(DistNodeRelationId(), ExclusiveLock); LockRelationOid(DistNodeRelationId(), ExclusiveLock);
@ -459,9 +457,7 @@ ActivateNode(char *nodeName, int nodePort)
ReplicateAllReferenceTablesToNode(nodeName, nodePort); ReplicateAllReferenceTablesToNode(nodeName, nodePort);
} }
nodeRecord = GenerateNodeTuple(workerNode); return workerNode->nodeId;
return nodeRecord;
} }
@ -481,7 +477,7 @@ master_update_node(PG_FUNCTION_ARGS)
/* /*
* force is used when an update needs to happen regardless of conflicting locks. This * force is used when an update needs to happen regardless of conflicting locks. This
* feature is important to force the update during a failover due to failure, eg. by * feature is important to force the update during a failover due to failure, eg. by
* a highavailability system such as pg_auto_failover. The strategy is a to start a * a high-availability system such as pg_auto_failover. The strategy is a to start a
* background worker that actively cancels backends holding conflicting locks with * background worker that actively cancels backends holding conflicting locks with
* this backend. * this backend.
* *
@ -956,19 +952,18 @@ CountPrimariesWithMetadata(void)
/* /*
* AddNodeMetadata checks the given node information and adds the specified node to the * AddNodeMetadata checks the given node information and adds the specified node to the
* pg_dist_node table of the master and workers with metadata. * pg_dist_node table of the master and workers with metadata.
* If the node already exists, the function returns the information about the node. * If the node already exists, the function returns the id of the node.
* If not, the following prodecure is followed while adding a node: If the groupId is not * If not, the following prodecure is followed while adding a node: If the groupId is not
* explicitly given by the user, the function picks the group that the new node should * explicitly given by the user, the function picks the group that the new node should
* be in with respect to GroupSize. Then, the new node is inserted into the local * be in with respect to GroupSize. Then, the new node is inserted into the local
* pg_dist_node as well as the nodes with hasmetadata=true. * pg_dist_node as well as the nodes with hasmetadata=true.
*/ */
static Datum static int
AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId, char *nodeRack, AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId, char *nodeRack,
bool hasMetadata, bool isActive, Oid nodeRole, char *nodeCluster, bool hasMetadata, bool isActive, Oid nodeRole, char *nodeCluster,
bool *nodeAlreadyExists) bool *nodeAlreadyExists)
{ {
int nextNodeIdInt = 0; int nextNodeIdInt = 0;
Datum returnData = 0;
WorkerNode *workerNode = NULL; WorkerNode *workerNode = NULL;
char *nodeDeleteCommand = NULL; char *nodeDeleteCommand = NULL;
uint32 primariesWithMetadata = 0; uint32 primariesWithMetadata = 0;
@ -988,10 +983,9 @@ AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId, char *nodeRack,
if (workerNode != NULL) if (workerNode != NULL)
{ {
/* fill return data and return */ /* fill return data and return */
returnData = GenerateNodeTuple(workerNode);
*nodeAlreadyExists = true; *nodeAlreadyExists = true;
return returnData; return workerNode->nodeId;
} }
/* user lets Citus to decide on the group that the newly added node should be in */ /* user lets Citus to decide on the group that the newly added node should be in */
@ -1040,8 +1034,7 @@ AddNodeMetadata(char *nodeName, int32 nodePort, int32 groupId, char *nodeRack,
SendCommandToWorkers(WORKERS_WITH_METADATA, nodeInsertCommand); SendCommandToWorkers(WORKERS_WITH_METADATA, nodeInsertCommand);
} }
returnData = GenerateNodeTuple(workerNode); return nextNodeIdInt;
return returnData;
} }
@ -1129,50 +1122,6 @@ GetNodeTuple(char *nodeName, int32 nodePort)
} }
/*
* GenerateNodeTuple gets a worker node and return a heap tuple of
* given worker node.
*/
static Datum
GenerateNodeTuple(WorkerNode *workerNode)
{
Relation pgDistNode = NULL;
TupleDesc tupleDescriptor = NULL;
HeapTuple heapTuple = NULL;
Datum nodeDatum = 0;
Datum values[Natts_pg_dist_node];
bool isNulls[Natts_pg_dist_node];
Datum nodeClusterStringDatum = CStringGetDatum(workerNode->nodeCluster);
Datum nodeClusterNameDatum = DirectFunctionCall1(namein, nodeClusterStringDatum);
/* form new shard tuple */
memset(values, 0, sizeof(values));
memset(isNulls, false, sizeof(isNulls));
values[Anum_pg_dist_node_nodeid - 1] = UInt32GetDatum(workerNode->nodeId);
values[Anum_pg_dist_node_groupid - 1] = Int32GetDatum(workerNode->groupId);
values[Anum_pg_dist_node_nodename - 1] = CStringGetTextDatum(workerNode->workerName);
values[Anum_pg_dist_node_nodeport - 1] = UInt32GetDatum(workerNode->workerPort);
values[Anum_pg_dist_node_noderack - 1] = CStringGetTextDatum(workerNode->workerRack);
values[Anum_pg_dist_node_hasmetadata - 1] = BoolGetDatum(workerNode->hasMetadata);
values[Anum_pg_dist_node_isactive - 1] = BoolGetDatum(workerNode->isActive);
values[Anum_pg_dist_node_noderole - 1] = ObjectIdGetDatum(workerNode->nodeRole);
values[Anum_pg_dist_node_nodecluster - 1] = nodeClusterNameDatum;
pgDistNode = heap_open(DistNodeRelationId(), AccessShareLock);
/* generate the tuple */
tupleDescriptor = RelationGetDescr(pgDistNode);
heapTuple = heap_form_tuple(tupleDescriptor, values, isNulls);
nodeDatum = HeapTupleGetDatum(heapTuple);
heap_close(pgDistNode, NoLock);
return nodeDatum;
}
/* /*
* GetNextGroupId allocates and returns a unique groupId for the group * GetNextGroupId allocates and returns a unique groupId for the group
* to be created. This allocation occurs both in shared memory and in write * to be created. This allocation occurs both in shared memory and in write

View File

@ -207,8 +207,8 @@ ORDER BY placementid;
-- be injected failure through network -- be injected failure through network
SELECT master_add_inactive_node('localhost', :worker_2_proxy_port); SELECT master_add_inactive_node('localhost', :worker_2_proxy_port);
master_add_inactive_node master_add_inactive_node
-------------------------------------------------- --------------------------
(3,3,localhost,9060,default,f,f,primary,default) 3
(1 row) (1 row)
SELECT master_remove_node('localhost', :worker_2_proxy_port); SELECT master_remove_node('localhost', :worker_2_proxy_port);
@ -293,8 +293,8 @@ SELECT citus.mitmproxy('conn.allow()');
SELECT master_add_node('localhost', :worker_2_proxy_port); SELECT master_add_node('localhost', :worker_2_proxy_port);
NOTICE: Replicating reference table "user_table" to the node localhost:9060 NOTICE: Replicating reference table "user_table" to the node localhost:9060
master_add_node master_add_node
-------------------------------------------------- -----------------
(6,6,localhost,9060,default,f,t,primary,default) 6
(1 row) (1 row)
-- verify node is added -- verify node is added
@ -350,8 +350,8 @@ SELECT citus.mitmproxy('conn.allow()');
SELECT master_add_node('localhost', :worker_1_port); SELECT master_add_node('localhost', :worker_1_port);
NOTICE: Replicating reference table "user_table" to the node localhost:57637 NOTICE: Replicating reference table "user_table" to the node localhost:57637
master_add_node master_add_node
--------------------------------------------------- -----------------
(8,8,localhost,57637,default,f,t,primary,default) 8
(1 row) (1 row)
-- verify node is added -- verify node is added

View File

@ -7,13 +7,13 @@ SELECT citus.mitmproxy('conn.allow()');
-- add the workers -- add the workers
SELECT master_add_node('localhost', :worker_1_port); SELECT master_add_node('localhost', :worker_1_port);
master_add_node master_add_node
--------------------------------------------------- -----------------
(1,1,localhost,57637,default,f,t,primary,default) 1
(1 row) (1 row)
SELECT master_add_node('localhost', :worker_2_proxy_port); -- an mitmproxy which forwards to the second worker SELECT master_add_node('localhost', :worker_2_proxy_port); -- an mitmproxy which forwards to the second worker
master_add_node master_add_node
-------------------------------------------------- -----------------
(2,2,localhost,9060,default,f,t,primary,default) 2
(1 row) (1 row)

View File

@ -11,11 +11,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-copy-to-reference-table: step s2-copy-to-reference-table:
COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5'; COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5';
<waiting ...> <waiting ...>
@ -54,15 +54,15 @@ step s2-copy-to-reference-table:
COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5'; COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5';
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-content: step s2-print-content:
SELECT SELECT
nodeport, success, result nodeport, success, result
@ -91,11 +91,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-insert-to-reference-table: step s2-insert-to-reference-table:
INSERT INTO test_reference_table VALUES (6); INSERT INTO test_reference_table VALUES (6);
<waiting ...> <waiting ...>
@ -134,15 +134,15 @@ step s2-insert-to-reference-table:
INSERT INTO test_reference_table VALUES (6); INSERT INTO test_reference_table VALUES (6);
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-content: step s2-print-content:
SELECT SELECT
nodeport, success, result nodeport, success, result
@ -171,11 +171,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-ddl-on-reference-table: step s2-ddl-on-reference-table:
CREATE INDEX reference_index ON test_reference_table(test_id); CREATE INDEX reference_index ON test_reference_table(test_id);
<waiting ...> <waiting ...>
@ -214,15 +214,15 @@ step s2-ddl-on-reference-table:
CREATE INDEX reference_index ON test_reference_table(test_id); CREATE INDEX reference_index ON test_reference_table(test_id);
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-index-count: step s2-print-index-count:
SELECT SELECT
nodeport, success, result nodeport, success, result
@ -248,11 +248,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-copy-to-reference-table: step s2-copy-to-reference-table:
COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5'; COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5';
<waiting ...> <waiting ...>
@ -288,15 +288,15 @@ step s2-copy-to-reference-table:
COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5'; COPY test_reference_table FROM PROGRAM 'echo 1 && echo 2 && echo 3 && echo 4 && echo 5';
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-content: step s2-print-content:
SELECT SELECT
nodeport, success, result nodeport, success, result
@ -322,11 +322,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-insert-to-reference-table: step s2-insert-to-reference-table:
INSERT INTO test_reference_table VALUES (6); INSERT INTO test_reference_table VALUES (6);
<waiting ...> <waiting ...>
@ -362,15 +362,15 @@ step s2-insert-to-reference-table:
INSERT INTO test_reference_table VALUES (6); INSERT INTO test_reference_table VALUES (6);
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-content: step s2-print-content:
SELECT SELECT
nodeport, success, result nodeport, success, result
@ -396,11 +396,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-ddl-on-reference-table: step s2-ddl-on-reference-table:
CREATE INDEX reference_index ON test_reference_table(test_id); CREATE INDEX reference_index ON test_reference_table(test_id);
<waiting ...> <waiting ...>
@ -436,15 +436,15 @@ step s2-ddl-on-reference-table:
CREATE INDEX reference_index ON test_reference_table(test_id); CREATE INDEX reference_index ON test_reference_table(test_id);
step s1-add-second-worker: step s1-add-second-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-second-worker: <... completed> step s1-add-second-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-print-index-count: step s2-print-index-count:
SELECT SELECT
nodeport, success, result nodeport, success, result

View File

@ -2,12 +2,12 @@ Parsed test spec with 1 sessions
starting permutation: s1a starting permutation: s1a
step s1a: step s1a:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57637); SELECT 1 FROM master_add_node('localhost', 57637);
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57637 t 1
nodename nodeport isactive ?column?
localhost 57638 t 1

View File

@ -1,11 +1,11 @@
Parsed test spec with 4 sessions Parsed test spec with 4 sessions
starting permutation: s1-print-distributed-objects s1-begin s1-add-worker s2-public-schema s2-create-table s1-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s1-add-worker s2-public-schema s2-create-table s1-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -16,9 +16,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -35,11 +35,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-public-schema: step s2-public-schema:
SET search_path TO public; SET search_path TO public;
@ -79,11 +79,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s1-add-worker s2-public-schema s2-create-table s1-commit s2-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s2-begin s1-add-worker s2-public-schema s2-create-table s1-commit s2-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -94,9 +94,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -116,11 +116,11 @@ step s2-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-public-schema: step s2-public-schema:
SET search_path TO public; SET search_path TO public;
@ -163,11 +163,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s2-public-schema s2-create-table s1-add-worker s2-commit s1-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s2-begin s2-public-schema s2-create-table s1-add-worker s2-commit s1-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -178,9 +178,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -212,15 +212,15 @@ create_distributed_table
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-worker: <... completed> step s1-add-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s1-commit: step s1-commit:
COMMIT; COMMIT;
@ -247,11 +247,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s1-add-worker s2-create-schema s2-create-table s1-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s1-add-worker s2-create-schema s2-create-table s1-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -262,9 +262,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -281,11 +281,11 @@ step s1-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-schema: step s2-create-schema:
CREATE SCHEMA myschema; CREATE SCHEMA myschema;
SET search_path TO myschema; SET search_path TO myschema;
@ -327,11 +327,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s1-add-worker s2-create-schema s2-create-table s1-commit s2-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s2-begin s1-add-worker s2-create-schema s2-create-table s1-commit s2-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -342,9 +342,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -364,11 +364,11 @@ step s2-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-schema: step s2-create-schema:
CREATE SCHEMA myschema; CREATE SCHEMA myschema;
SET search_path TO myschema; SET search_path TO myschema;
@ -413,11 +413,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s2-create-schema s2-create-table s1-add-worker s2-commit s1-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s2-begin s2-create-schema s2-create-table s1-add-worker s2-commit s1-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -428,9 +428,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -463,15 +463,15 @@ create_distributed_table
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
<waiting ...> <waiting ...>
step s2-commit: step s2-commit:
COMMIT; COMMIT;
step s1-add-worker: <... completed> step s1-add-worker: <... completed>
nodename nodeport isactive ?column?
localhost 57638 t 1
step s1-commit: step s1-commit:
COMMIT; COMMIT;
@ -499,11 +499,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s2-create-schema s1-begin s2-begin s3-begin s1-add-worker s2-create-table s3-use-schema s3-create-table s1-commit s2-commit s3-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s2-create-schema s1-begin s2-begin s3-begin s1-add-worker s2-create-table s3-use-schema s3-create-table s1-commit s2-commit s3-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -514,9 +514,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -543,11 +543,11 @@ step s3-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-table: step s2-create-table:
CREATE TABLE t1 (a int, b int); CREATE TABLE t1 (a int, b int);
-- session needs to have replication factor set to 1, can't do in setup -- session needs to have replication factor set to 1, can't do in setup
@ -604,11 +604,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s2-create-schema s1-begin s2-begin s3-begin s4-begin s1-add-worker s2-create-table s3-use-schema s3-create-table s4-use-schema s4-create-table s1-commit s2-commit s3-commit s4-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s2-create-schema s1-begin s2-begin s3-begin s4-begin s1-add-worker s2-create-table s3-use-schema s3-create-table s4-use-schema s4-create-table s1-commit s2-commit s3-commit s4-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -619,9 +619,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -651,11 +651,11 @@ step s4-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-table: step s2-create-table:
CREATE TABLE t1 (a int, b int); CREATE TABLE t1 (a int, b int);
-- session needs to have replication factor set to 1, can't do in setup -- session needs to have replication factor set to 1, can't do in setup
@ -728,11 +728,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-add-worker s2-create-schema s2-begin s3-begin s3-use-schema s2-create-table s3-create-table s2-commit s3-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-add-worker s2-create-schema s2-begin s3-begin s3-use-schema s2-create-table s3-create-table s2-commit s3-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -743,9 +743,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -759,11 +759,11 @@ master_remove_node
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-schema: step s2-create-schema:
CREATE SCHEMA myschema; CREATE SCHEMA myschema;
SET search_path TO myschema; SET search_path TO myschema;
@ -826,11 +826,11 @@ master_remove_node
starting permutation: s1-print-distributed-objects s1-begin s2-begin s4-begin s1-add-worker s2-create-schema s4-create-schema2 s2-create-table s4-create-table s1-commit s2-commit s4-commit s2-print-distributed-objects starting permutation: s1-print-distributed-objects s1-begin s2-begin s4-begin s1-add-worker s2-create-schema s4-create-schema2 s2-create-table s4-create-table s1-commit s2-commit s4-commit s2-print-distributed-objects
nodename nodeport isactive ?column?
localhost 57637 t 1
step s1-print-distributed-objects: step s1-print-distributed-objects:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;
@ -841,9 +841,9 @@ step s1-print-distributed-objects:
SELECT master_remove_node('localhost', 57638); SELECT master_remove_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
pg_identify_object_as_address pg_identify_object_as_address
count count
@ -866,11 +866,11 @@ step s4-begin:
BEGIN; BEGIN;
step s1-add-worker: step s1-add-worker:
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
nodename nodeport isactive ?column?
localhost 57638 t 1
step s2-create-schema: step s2-create-schema:
CREATE SCHEMA myschema; CREATE SCHEMA myschema;
SET search_path TO myschema; SET search_path TO myschema;

View File

@ -28,10 +28,10 @@ SELECT master_get_active_worker_nodes();
(2 rows) (2 rows)
-- try to add a node that is already in the cluster -- try to add a node that is already in the cluster
SELECT nodeid, groupid FROM master_add_node('localhost', :worker_1_port); SELECT * FROM master_add_node('localhost', :worker_1_port);
nodeid | groupid master_add_node
--------+--------- -----------------
1 | 1 1
(1 row) (1 row)
-- get the active nodes -- get the active nodes
@ -78,10 +78,10 @@ SELECT master_get_active_worker_nodes();
-- add some shard placements to the cluster -- add some shard placements to the cluster
SET citus.shard_count TO 16; SET citus.shard_count TO 16;
SET citus.shard_replication_factor TO 1; SET citus.shard_replication_factor TO 1;
SELECT isactive FROM master_activate_node('localhost', :worker_2_port); SELECT * FROM master_activate_node('localhost', :worker_2_port);
isactive master_activate_node
---------- ----------------------
t 3
(1 row) (1 row)
CREATE TABLE cluster_management_test (col_1 text, col_2 int); CREATE TABLE cluster_management_test (col_1 text, col_2 int);
@ -229,10 +229,10 @@ SELECT master_get_active_worker_nodes();
(1 row) (1 row)
-- restore the node for next tests -- restore the node for next tests
SELECT isactive FROM master_activate_node('localhost', :worker_2_port); SELECT * FROM master_activate_node('localhost', :worker_2_port);
isactive master_activate_node
---------- ----------------------
t 3
(1 row) (1 row)
-- try to remove a node with active placements and see that node removal is failed -- try to remove a node with active placements and see that node removal is failed
@ -281,7 +281,8 @@ DELETE FROM pg_dist_node WHERE nodeport=:worker_2_port;
SELECT * FROM cluster_management_test; SELECT * FROM cluster_management_test;
ERROR: there is a shard placement in node group 3 but there are no nodes in that group ERROR: there is a shard placement in node group 3 but there are no nodes in that group
-- clean-up -- clean-up
SELECT groupid as new_group FROM master_add_node('localhost', :worker_2_port) \gset SELECT master_add_node('localhost', :worker_2_port) AS new_node \gset
SELECT groupid AS new_group FROM pg_dist_node WHERE nodeid = :new_node \gset
UPDATE pg_dist_placement SET groupid = :new_group WHERE groupid = :worker_2_group; UPDATE pg_dist_placement SET groupid = :new_group WHERE groupid = :worker_2_group;
-- test that you are allowed to remove secondary nodes even if there are placements -- test that you are allowed to remove secondary nodes even if there are placements
SELECT 1 FROM master_add_node('localhost', 9990, groupid => :new_group, noderole => 'secondary'); SELECT 1 FROM master_add_node('localhost', 9990, groupid => :new_group, noderole => 'secondary');
@ -370,8 +371,8 @@ SELECT
master_add_node('localhost', :worker_1_port), master_add_node('localhost', :worker_1_port),
master_add_node('localhost', :worker_2_port); master_add_node('localhost', :worker_2_port);
master_add_node | master_add_node master_add_node | master_add_node
----------------------------------------------------+----------------------------------------------------- -----------------+-----------------
(11,9,localhost,57637,default,f,t,primary,default) | (12,10,localhost,57638,default,f,t,primary,default) 11 | 12
(1 row) (1 row)
SELECT * FROM pg_dist_node ORDER BY nodeid; SELECT * FROM pg_dist_node ORDER BY nodeid;
@ -557,14 +558,14 @@ SELECT 1 FROM master_add_inactive_node('localhost', 9996, groupid => :worker_2_g
-- check that you can add a seconary to a non-default cluster, and activate it, and remove it -- check that you can add a seconary to a non-default cluster, and activate it, and remove it
SELECT master_add_inactive_node('localhost', 9999, groupid => :worker_2_group, nodecluster => 'olap', noderole => 'secondary'); SELECT master_add_inactive_node('localhost', 9999, groupid => :worker_2_group, nodecluster => 'olap', noderole => 'secondary');
master_add_inactive_node master_add_inactive_node
--------------------------------------------------- --------------------------
(22,16,localhost,9999,default,f,f,secondary,olap) 22
(1 row) (1 row)
SELECT master_activate_node('localhost', 9999); SELECT master_activate_node('localhost', 9999);
master_activate_node master_activate_node
--------------------------------------------------- ----------------------
(22,16,localhost,9999,default,f,t,secondary,olap) 22
(1 row) (1 row)
SELECT master_disable_node('localhost', 9999); SELECT master_disable_node('localhost', 9999);
@ -601,8 +602,8 @@ DETAIL: Failing row contains (16, 14, localhost, 57637, default, f, t, primary,
SELECT groupid AS worker_2_group FROM pg_dist_node WHERE nodeport = :worker_2_port \gset SELECT groupid AS worker_2_group FROM pg_dist_node WHERE nodeport = :worker_2_port \gset
SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary', nodecluster=> 'olap'); SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary', nodecluster=> 'olap');
master_add_node master_add_node
--------------------------------------------------- -----------------
(23,14,localhost,8888,default,f,t,secondary,olap) 23
(1 row) (1 row)
-- check that super-long cluster names are truncated -- check that super-long cluster names are truncated
@ -614,8 +615,8 @@ SELECT master_add_node('localhost', 8887, groupid => :worker_1_group, noderole =
'overflow' 'overflow'
); );
master_add_node master_add_node
-------------------------------------------------------------------------------------------------------------- -----------------
(24,14,localhost,8887,default,f,t,secondary,thisisasixtyfourcharacterstringrepeatedfourtimestomake256chars.) 24
(1 row) (1 row)
SELECT * FROM pg_dist_node WHERE nodeport=8887; SELECT * FROM pg_dist_node WHERE nodeport=8887;
@ -629,22 +630,22 @@ SELECT * FROM pg_dist_node WHERE nodeport=8887;
-- master_add_secondary_node lets you skip looking up the groupid -- master_add_secondary_node lets you skip looking up the groupid
SELECT master_add_secondary_node('localhost', 9995, 'localhost', :worker_1_port); SELECT master_add_secondary_node('localhost', 9995, 'localhost', :worker_1_port);
master_add_secondary_node master_add_secondary_node
------------------------------------------------------ ---------------------------
(25,14,localhost,9995,default,f,t,secondary,default) 25
(1 row) (1 row)
SELECT master_add_secondary_node('localhost', 9994, primaryname => 'localhost', primaryport => :worker_2_port); SELECT master_add_secondary_node('localhost', 9994, primaryname => 'localhost', primaryport => :worker_2_port);
master_add_secondary_node master_add_secondary_node
------------------------------------------------------ ---------------------------
(26,16,localhost,9994,default,f,t,secondary,default) 26
(1 row) (1 row)
SELECT master_add_secondary_node('localhost', 9993, 'localhost', 2000); SELECT master_add_secondary_node('localhost', 9993, 'localhost', 2000);
ERROR: node at "localhost:2000" does not exist ERROR: node at "localhost:2000" does not exist
SELECT master_add_secondary_node('localhost', 9992, 'localhost', :worker_1_port, nodecluster => 'second-cluster'); SELECT master_add_secondary_node('localhost', 9992, 'localhost', :worker_1_port, nodecluster => 'second-cluster');
master_add_secondary_node master_add_secondary_node
------------------------------------------------------------- ---------------------------
(27,14,localhost,9992,default,f,t,secondary,second-cluster) 27
(1 row) (1 row)
SELECT nodeid AS worker_1_node FROM pg_dist_node WHERE nodeport=:worker_1_port \gset SELECT nodeid AS worker_1_node FROM pg_dist_node WHERE nodeport=:worker_1_port \gset

View File

@ -176,8 +176,8 @@ SELECT count(*) FROM pg_dist_node WHERE hasmetadata=true;
SELECT groupid AS worker_1_group FROM pg_dist_node WHERE nodeport = :worker_1_port \gset SELECT groupid AS worker_1_group FROM pg_dist_node WHERE nodeport = :worker_1_port \gset
SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary'); SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary');
master_add_node master_add_node
---------------------------------------------------- -----------------
(4,1,localhost,8888,default,f,t,secondary,default) 4
(1 row) (1 row)
SELECT start_metadata_sync_to_node('localhost', 8888); SELECT start_metadata_sync_to_node('localhost', 8888);
@ -207,8 +207,8 @@ SELECT hasmetadata FROM pg_dist_node WHERE nodeport = 8888;
-- Add a node to another cluster to make sure it's also synced -- Add a node to another cluster to make sure it's also synced
SELECT master_add_secondary_node('localhost', 8889, 'localhost', :worker_1_port, nodecluster => 'second-cluster'); SELECT master_add_secondary_node('localhost', 8889, 'localhost', :worker_1_port, nodecluster => 'second-cluster');
master_add_secondary_node master_add_secondary_node
----------------------------------------------------------- ---------------------------
(5,1,localhost,8889,default,f,t,secondary,second-cluster) 5
(1 row) (1 row)
-- Run start_metadata_sync_to_node and check that it marked hasmetadata for that worker -- Run start_metadata_sync_to_node and check that it marked hasmetadata for that worker
@ -1167,8 +1167,8 @@ SELECT create_distributed_table('mx_table', 'a');
\c - postgres - :master_port \c - postgres - :master_port
SELECT master_add_node('localhost', :worker_2_port); SELECT master_add_node('localhost', :worker_2_port);
master_add_node master_add_node
--------------------------------------------------- -----------------
(6,4,localhost,57638,default,f,t,primary,default) 6
(1 row) (1 row)
SELECT start_metadata_sync_to_node('localhost', :worker_2_port); SELECT start_metadata_sync_to_node('localhost', :worker_2_port);
@ -1394,8 +1394,8 @@ WHERE logicalrelid='mx_ref'::regclass;
SELECT master_add_node('localhost', :worker_2_port); SELECT master_add_node('localhost', :worker_2_port);
NOTICE: Replicating reference table "mx_ref" to the node localhost:57638 NOTICE: Replicating reference table "mx_ref" to the node localhost:57638
master_add_node master_add_node
--------------------------------------------------- -----------------
(7,5,localhost,57638,default,f,t,primary,default) 7
(1 row) (1 row)
SELECT shardid, nodename, nodeport SELECT shardid, nodename, nodeport

View File

@ -41,12 +41,13 @@ SELECT COUNT(*) FROM pg_dist_node WHERE nodeport = :worker_2_port;
(1 row) (1 row)
-- re-add the node for next tests -- re-add the node for next tests
SELECT groupid AS worker_2_group FROM master_add_node('localhost', :worker_2_port) \gset SELECT master_add_node('localhost', :worker_2_port) AS worker_2_nodeid \gset
SELECT groupid AS worker_2_group FROM pg_dist_node WHERE nodeid=:worker_2_nodeid \gset
-- add a secondary to check we don't attempt to replicate the table to it -- add a secondary to check we don't attempt to replicate the table to it
SELECT isactive FROM master_add_node('localhost', 9000, groupid=>:worker_2_group, noderole=>'secondary'); SELECT 1 FROM master_add_node('localhost', 9000, groupid=>:worker_2_group, noderole=>'secondary');
isactive ?column?
---------- ----------
t 1
(1 row) (1 row)
-- remove a node with reference table -- remove a node with reference table
@ -58,10 +59,10 @@ SELECT create_reference_table('remove_node_reference_table');
(1 row) (1 row)
-- make sure when we add a secondary we don't attempt to add placements to it -- make sure when we add a secondary we don't attempt to add placements to it
SELECT isactive FROM master_add_node('localhost', 9001, groupid=>:worker_2_group, noderole=>'secondary'); SELECT 1 FROM master_add_node('localhost', 9001, groupid=>:worker_2_group, noderole=>'secondary');
isactive ?column?
---------- ----------
t 1
(1 row) (1 row)
SELECT count(*) FROM pg_dist_placement WHERE groupid = :worker_2_group; SELECT count(*) FROM pg_dist_placement WHERE groupid = :worker_2_group;

View File

@ -654,11 +654,11 @@ ORDER BY
\c - - - :master_port \c - - - :master_port
-- try using the coordinator as a worker and then dropping the table -- try using the coordinator as a worker and then dropping the table
SELECT master_add_node('localhost', :master_port); SELECT 1 FROM master_add_node('localhost', :master_port);
NOTICE: Replicating reference table "transactional_drop_reference" to the node localhost:57636 NOTICE: Replicating reference table "transactional_drop_reference" to the node localhost:57636
master_add_node ?column?
--------------------------------------------------------------- ----------
(1380010,1380008,localhost,57636,default,f,t,primary,default) 1
(1 row) (1 row)
CREATE TABLE citus_local (id serial, k int); CREATE TABLE citus_local (id serial, k int);

View File

@ -2,7 +2,7 @@
# add single one of the nodes for the purpose of the test # add single one of the nodes for the purpose of the test
setup setup
{ {
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57637); SELECT 1 FROM master_add_node('localhost', 57637);
CREATE TABLE test_reference_table (test_id integer); CREATE TABLE test_reference_table (test_id integer);
SELECT create_reference_table('test_reference_table'); SELECT create_reference_table('test_reference_table');
@ -24,7 +24,7 @@ step "s1-begin"
step "s1-add-second-worker" step "s1-add-second-worker"
{ {
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
} }
step "s1-remove-second-worker" step "s1-remove-second-worker"

View File

@ -1,8 +1,8 @@
session "s1" session "s1"
step "s1a" step "s1a"
{ {
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57637); SELECT 1 FROM master_add_node('localhost', 57637);
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
} }
permutation "s1a" permutation "s1a"

View File

@ -3,7 +3,7 @@
setup setup
{ {
SELECT master_remove_node(nodename, nodeport) FROM pg_dist_node; SELECT master_remove_node(nodename, nodeport) FROM pg_dist_node;
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57637); SELECT 1 FROM master_add_node('localhost', 57637);
} }
# ensure that both nodes exists for the remaining of the isolation tests # ensure that both nodes exists for the remaining of the isolation tests
@ -32,7 +32,7 @@ step "s1-begin"
step "s1-add-worker" step "s1-add-worker"
{ {
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
} }
step "s1-commit" step "s1-commit"
@ -44,7 +44,7 @@ step "s1-commit"
# on that node as well. After counting objects is done we remove the node again. # on that node as well. After counting objects is done we remove the node again.
step "s1-print-distributed-objects" step "s1-print-distributed-objects"
{ {
SELECT nodename, nodeport, isactive FROM master_add_node('localhost', 57638); SELECT 1 FROM master_add_node('localhost', 57638);
-- print an overview of all 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; SELECT pg_identify_object_as_address(classid, objid, objsubid) FROM citus.pg_dist_object ORDER BY 1;

View File

@ -15,7 +15,7 @@ SELECT 1 FROM master_add_node('localhost', :worker_2_port);
SELECT master_get_active_worker_nodes(); SELECT master_get_active_worker_nodes();
-- try to add a node that is already in the cluster -- try to add a node that is already in the cluster
SELECT nodeid, groupid FROM master_add_node('localhost', :worker_1_port); SELECT * FROM master_add_node('localhost', :worker_1_port);
-- get the active nodes -- get the active nodes
SELECT master_get_active_worker_nodes(); SELECT master_get_active_worker_nodes();
@ -35,7 +35,7 @@ SELECT master_get_active_worker_nodes();
SET citus.shard_count TO 16; SET citus.shard_count TO 16;
SET citus.shard_replication_factor TO 1; SET citus.shard_replication_factor TO 1;
SELECT isactive FROM master_activate_node('localhost', :worker_2_port); SELECT * FROM master_activate_node('localhost', :worker_2_port);
CREATE TABLE cluster_management_test (col_1 text, col_2 int); CREATE TABLE cluster_management_test (col_1 text, col_2 int);
SELECT create_distributed_table('cluster_management_test', 'col_1', 'hash'); SELECT create_distributed_table('cluster_management_test', 'col_1', 'hash');
@ -95,7 +95,7 @@ ABORT;
SELECT master_get_active_worker_nodes(); SELECT master_get_active_worker_nodes();
-- restore the node for next tests -- restore the node for next tests
SELECT isactive FROM master_activate_node('localhost', :worker_2_port); SELECT * FROM master_activate_node('localhost', :worker_2_port);
-- try to remove a node with active placements and see that node removal is failed -- try to remove a node with active placements and see that node removal is failed
SELECT master_remove_node('localhost', :worker_2_port); SELECT master_remove_node('localhost', :worker_2_port);
@ -122,7 +122,8 @@ DELETE FROM pg_dist_node WHERE nodeport=:worker_2_port;
SELECT * FROM cluster_management_test; SELECT * FROM cluster_management_test;
-- clean-up -- clean-up
SELECT groupid as new_group FROM master_add_node('localhost', :worker_2_port) \gset SELECT master_add_node('localhost', :worker_2_port) AS new_node \gset
SELECT groupid AS new_group FROM pg_dist_node WHERE nodeid = :new_node \gset
UPDATE pg_dist_placement SET groupid = :new_group WHERE groupid = :worker_2_group; UPDATE pg_dist_placement SET groupid = :new_group WHERE groupid = :worker_2_group;
-- test that you are allowed to remove secondary nodes even if there are placements -- test that you are allowed to remove secondary nodes even if there are placements

View File

@ -31,16 +31,17 @@ SELECT master_remove_node('localhost', :worker_2_port);
SELECT COUNT(*) FROM pg_dist_node WHERE nodeport = :worker_2_port; SELECT COUNT(*) FROM pg_dist_node WHERE nodeport = :worker_2_port;
-- re-add the node for next tests -- re-add the node for next tests
SELECT groupid AS worker_2_group FROM master_add_node('localhost', :worker_2_port) \gset SELECT master_add_node('localhost', :worker_2_port) AS worker_2_nodeid \gset
SELECT groupid AS worker_2_group FROM pg_dist_node WHERE nodeid=:worker_2_nodeid \gset
-- add a secondary to check we don't attempt to replicate the table to it -- add a secondary to check we don't attempt to replicate the table to it
SELECT isactive FROM master_add_node('localhost', 9000, groupid=>:worker_2_group, noderole=>'secondary'); SELECT 1 FROM master_add_node('localhost', 9000, groupid=>:worker_2_group, noderole=>'secondary');
-- remove a node with reference table -- remove a node with reference table
CREATE TABLE remove_node_reference_table(column1 int); CREATE TABLE remove_node_reference_table(column1 int);
SELECT create_reference_table('remove_node_reference_table'); SELECT create_reference_table('remove_node_reference_table');
-- make sure when we add a secondary we don't attempt to add placements to it -- make sure when we add a secondary we don't attempt to add placements to it
SELECT isactive FROM master_add_node('localhost', 9001, groupid=>:worker_2_group, noderole=>'secondary'); SELECT 1 FROM master_add_node('localhost', 9001, groupid=>:worker_2_group, noderole=>'secondary');
SELECT count(*) FROM pg_dist_placement WHERE groupid = :worker_2_group; SELECT count(*) FROM pg_dist_placement WHERE groupid = :worker_2_group;
-- make sure when we disable a secondary we don't remove any placements -- make sure when we disable a secondary we don't remove any placements
SELECT master_disable_node('localhost', 9001); SELECT master_disable_node('localhost', 9001);

View File

@ -364,7 +364,7 @@ ORDER BY
\c - - - :master_port \c - - - :master_port
-- try using the coordinator as a worker and then dropping the table -- try using the coordinator as a worker and then dropping the table
SELECT master_add_node('localhost', :master_port); SELECT 1 FROM master_add_node('localhost', :master_port);
CREATE TABLE citus_local (id serial, k int); CREATE TABLE citus_local (id serial, k int);
SELECT create_distributed_table('citus_local', 'id'); SELECT create_distributed_table('citus_local', 'id');
INSERT INTO citus_local (k) VALUES (2); INSERT INTO citus_local (k) VALUES (2);