summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2014-07-31 10:13:12 +0000
committerPavan Deolasee2014-09-01 14:20:30 +0000
commit2f4b65dfed44785aea10a5953696717b41c36ae5 (patch)
tree2b0a5b30803c904b48abd54e74d6678347dd29eb
parent55700225386484f8a0b2d96b66e3cca64a142541 (diff)
Add ability to specify datanode slave ports and datanode slave pooler ports
separately. Currently pgxc_ctl requires that datanode master and slave must have the same server and poole ports. While this is nice for easier configuration and management of datanode master/slave, its quite constraining, especially while testing master/slave on a single node
-rw-r--r--contrib/pgxc_ctl/config.c25
-rw-r--r--contrib/pgxc_ctl/datanode_cmd.c78
-rw-r--r--contrib/pgxc_ctl/datanode_cmd.h2
-rw-r--r--contrib/pgxc_ctl/do_command.c15
-rw-r--r--contrib/pgxc_ctl/monitor.c4
-rw-r--r--contrib/pgxc_ctl/pgxc_ctl_bash.c4
-rwxr-xr-xcontrib/pgxc_ctl/pgxc_ctl_bash_24
-rw-r--r--contrib/pgxc_ctl/signature.h2
-rw-r--r--contrib/pgxc_ctl/varnames.h4
9 files changed, 113 insertions, 25 deletions
diff --git a/contrib/pgxc_ctl/config.c b/contrib/pgxc_ctl/config.c
index 2d09826dc1..92e28398c2 100644
--- a/contrib/pgxc_ctl/config.c
+++ b/contrib/pgxc_ctl/config.c
@@ -369,6 +369,10 @@ static void emptyDatanodeSlaves()
reset_var_val(VAR_datanodeSlave, "n");
reset_var(VAR_datanodeSlaveServers);
+ reset_var(VAR_datanodeSlavePorts);
+#ifdef XCP
+ reset_var(VAR_datanodeSlavePoolerPorts);
+#endif
reset_var(VAR_datanodeSlaveDirs);
reset_var(VAR_datanodeArchLogDirs);
for (ii = 0; ii < arraySizeName(VAR_datanodeSlaveServers); ii++)
@@ -631,7 +635,7 @@ int checkPortConflict(char *host, int port)
if (isVarYes(VAR_datanodeSlave))
for (ii = 0; aval(VAR_datanodeNames)[ii]; ii++)
if (doesExist(VAR_datanodeSlaveServers, ii) && !is_none(aval(VAR_datanodeSlaveServers)[ii]) &&
- (strcasecmp(host, aval(VAR_datanodeSlaveServers)[ii]) == 0) && (atoi(aval(VAR_datanodePorts)[ii]) == port))
+ (strcasecmp(host, aval(VAR_datanodeSlaveServers)[ii]) == 0) && (atoi(aval(VAR_datanodeSlavePorts)[ii]) == port))
return 1;
return 0;
}
@@ -860,6 +864,10 @@ static void verifyResource(void)
NULL};
char *datanodeSlaveVars[] = {VAR_datanodeNames,
VAR_datanodeSlaveServers,
+ VAR_datanodeSlavePorts,
+#ifdef XCP
+ VAR_datanodeSlavePoolerPorts,
+#endif
VAR_datanodeSlaveDirs,
VAR_datanodeArchLogDirs,
NULL};
@@ -932,7 +940,7 @@ static void verifyResource(void)
/* GTM and datanode slaves, if any */
if(isVarYes(VAR_datanodeSlave))
checkResourceConflict(VAR_gtmName, VAR_gtmMasterServer, VAR_gtmMasterPort, NULL, VAR_gtmMasterDir,
- VAR_datanodeNames, VAR_datanodeMasterServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeMasterServers, VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, TRUE);
/*
* GTM slave and others ------------
@@ -960,7 +968,7 @@ static void verifyResource(void)
/* GTM slave and datanode slave, if any */
if (isVarYes(VAR_datanodeSlave))
checkResourceConflict(VAR_gtmName, VAR_gtmSlaveServer, VAR_gtmSlavePort, NULL, VAR_gtmSlaveDir,
- VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, TRUE);
}
/*
@@ -984,7 +992,7 @@ static void verifyResource(void)
/* GTM proxy and datanode slave, if any */
if (sval(VAR_datanodeSlave) && (strcmp(sval(VAR_datanodeSlave), "y") == 0))
checkResourceConflict(VAR_gtmProxyNames, VAR_gtmProxyServers, VAR_gtmProxyPorts, NULL, VAR_gtmProxyDirs,
- VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, TRUE);
}
/*
@@ -1002,7 +1010,8 @@ static void verifyResource(void)
/* Coordinator masters and datanode slave, if any */
if (isVarYes(VAR_datanodeSlave))
checkResourceConflict(VAR_coordNames, VAR_coordMasterServers, VAR_coordPorts, VAR_poolerPorts, VAR_coordMasterDirs,
- VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeSlaveServers,
+ VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, TRUE);
/*
* Coordinator slaves and others
@@ -1016,7 +1025,8 @@ static void verifyResource(void)
/* Coordinator slave and datanode slave, if any */
if (isVarYes(VAR_datanodeSlave))
checkResourceConflict(VAR_coordNames, VAR_coordSlaveServers, VAR_coordPorts, VAR_poolerPorts, VAR_coordSlaveDirs,
- VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeSlaveServers,
+ VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, TRUE);
}
/*
@@ -1029,7 +1039,8 @@ static void verifyResource(void)
/* Datanode master and datanode slave, if any */
if (sval(VAR_datanodeSlave) && (strcmp(sval(VAR_datanodeSlave), "y") == 0))
checkResourceConflict(VAR_datanodeNames, VAR_datanodeMasterServers, VAR_datanodePorts, NULL, VAR_datanodeMasterDirs,
- VAR_datanodeNames, VAR_datanodeSlaveServers, VAR_datanodePorts, NULL, VAR_datanodeSlaveDirs,
+ VAR_datanodeNames, VAR_datanodeSlaveServers,
+ VAR_datanodeSlavePorts, NULL, VAR_datanodeSlaveDirs,
TRUE, FALSE);
if (anyConfigErrors)
{
diff --git a/contrib/pgxc_ctl/datanode_cmd.c b/contrib/pgxc_ctl/datanode_cmd.c
index 3b5a4569a7..69f7e75ca5 100644
--- a/contrib/pgxc_ctl/datanode_cmd.c
+++ b/contrib/pgxc_ctl/datanode_cmd.c
@@ -284,7 +284,7 @@ cmd_t *prepare_initDatanodeSlave(char *nodeName)
"#==========================================\n"
"# Added to initialize the slave, %s\n"
"standby_mode = on\n"
- "primary_conninfo = 'host = %s port = %sd user = %s application_name = %s'\n"
+ "primary_conninfo = 'host = %s port = %s user = %s application_name = %s'\n"
"restore_command = 'cp %s/%%f %%p'\n"
"archive_cleanup_command = 'pg_archivecleanup %s %%r'\n",
timeStampString(timestamp, MAXTOKEN),
@@ -309,9 +309,11 @@ cmd_t *prepare_initDatanodeSlave(char *nodeName)
"# Added to startup the slave, %s\n"
"hot_standby = on\n"
"port = %s\n"
+ "pooler_port = %s\n"
"# End of addition\n",
timeStampString(timestamp, MAXTOKEN),
- aval(VAR_datanodePorts)[idx]);
+ aval(VAR_datanodeSlavePorts)[idx],
+ aval(VAR_datanodeSlavePoolerPorts)[idx]);
fclose(f);
/* Stp datanode master if needed */
@@ -589,7 +591,7 @@ cmd_t *prepare_stopDatanodeSlave(char *nodeName, char *immediate)
/* The next step might need improvement. When GTM is dead, the following may
* fail even though the master is running.
*/
- if (pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodePorts)[idx]) == 0)
+ if (pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodeSlavePorts)[idx]) == 0)
{
cmd_t *cmdReloadMaster;
@@ -753,7 +755,14 @@ static int failover_oneDatanode(int datanodeIdx)
var_assign(&(aval(VAR_datanodeSlaveServers)[datanodeIdx]), Strdup("none"));
var_assign(&(aval(VAR_datanodeMasterDirs)[datanodeIdx]), Strdup(aval(VAR_datanodeSlaveDirs)[datanodeIdx]));
var_assign(&(aval(VAR_datanodeSlaveDirs)[datanodeIdx]), Strdup("none"));
-
+ var_assign(&(aval(VAR_datanodePorts)[datanodeIdx]), Strdup(aval(VAR_datanodeSlavePorts)[datanodeIdx]));
+#ifdef XCP
+ var_assign(&(aval(VAR_datanodePoolerPorts)[datanodeIdx]), Strdup(aval(VAR_datanodeSlavePoolerPorts)[datanodeIdx]));
+#endif
+ var_assign(&(aval(VAR_datanodeSlavePorts)[datanodeIdx]), Strdup("none"));
+#ifdef XCP
+ var_assign(&(aval(VAR_datanodeSlavePoolerPorts)[datanodeIdx]), Strdup("none"));
+#endif
/*
* Update the configuration file
*/
@@ -766,14 +775,30 @@ static int failover_oneDatanode(int datanodeIdx)
"#=====================================================\n"
"# Updated due to the datanode failover, %s, %s\n"
"datanodeMasterServers=( %s )\n"
+ "datanodePorts=( %s )\n"
+#ifdef XCP
+ "datanodePoolerPorts=( %s )\n"
+#endif
"datanodeMasterDirs=( %s )\n"
"datanodeSlaveServers=( %s )\n"
+ "datanodeSlavePorts=( %s )\n"
+#ifdef XCP
+ "datanodeSlavePoolerPorts=( %s )\n"
+#endif
"datanodeSlaveDirs=( %s )\n"
"# End of the update\n",
aval(VAR_datanodeNames)[datanodeIdx], timeStampString(timestamp, MAXTOKEN),
listValue(VAR_datanodeMasterServers),
+ listValue(VAR_datanodePorts),
+#ifdef XCP
+ listValue(VAR_datanodePoolerPorts),
+#endif
listValue(VAR_datanodeMasterDirs),
listValue(VAR_datanodeSlaveServers),
+ listValue(VAR_datanodeSlavePorts),
+#ifdef XCP
+ listValue(VAR_datanodeSlavePoolerPorts),
+#endif
listValue(VAR_datanodeSlaveDirs));
fclose(f);
@@ -913,6 +938,10 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
assign_arrayEl(VAR_datanodeMasterDirs, idx, dir, NULL);
assign_arrayEl(VAR_datanodeMaxWALSenders, idx, aval(VAR_datanodeMaxWALSenders)[0], NULL); /* Could be vulnerable */
assign_arrayEl(VAR_datanodeSlaveServers, idx, "none", NULL);
+ assign_arrayEl(VAR_datanodeSlavePorts, idx, "-1", NULL);
+#ifdef XCP
+ assign_arrayEl(VAR_datanodeSlavePoolerPorts, idx, "-1", NULL);
+#endif
assign_arrayEl(VAR_datanodeSlaveDirs, idx, "none", NULL);
assign_arrayEl(VAR_datanodeArchLogDirs, idx, "none", NULL);
assign_arrayEl(VAR_datanodeSpecificExtraConfig, idx, "none", NULL);
@@ -950,6 +979,10 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
fprintAval(f, VAR_datanodeMasterDirs);
fprintAval(f, VAR_datanodeMaxWALSenders);
fprintAval(f, VAR_datanodeSlaveServers);
+ fprintAval(f, VAR_datanodeSlavePorts);
+#ifdef XCP
+ fprintAval(f, VAR_datanodeSlavePoolerPorts);
+#endif
fprintAval(f, VAR_datanodeSlaveDirs);
fprintAval(f, VAR_datanodeArchLogDirs);
fprintAval(f, VAR_datanodeSpecificExtraConfig);
@@ -1109,10 +1142,14 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
}
-int add_datanodeSlave(char *name, char *host, char *dir, char *archDir)
+int add_datanodeSlave(char *name, char *host, int port, int pooler, char *dir, char *archDir)
{
int idx;
FILE *f;
+ char port_s[MAXTOKEN+1];
+#ifdef XCP
+ char pooler_s[MAXTOKEN+1];
+#endif
/* Check if the name is valid datanode */
if ((idx = datanodeIdx(name)) < 0)
@@ -1136,7 +1173,7 @@ int add_datanodeSlave(char *name, char *host, char *dir, char *archDir)
* We dont check the name conflict here because acquiring datanode index means that
* there's no name conflict.
*/
- if (checkPortConflict(host, atoi(aval(VAR_datanodePorts)[idx])))
+ if (checkPortConflict(host, port))
{
elog(ERROR, "ERROR: the port %s has already been used in the host %s.\n", aval(VAR_datanodePorts)[idx], host);
return 1;
@@ -1201,9 +1238,19 @@ int add_datanodeSlave(char *name, char *host, char *dir, char *archDir)
return 1;
}
#endif
+
+ snprintf(port_s, MAXTOKEN, "%d", port);
+#ifdef XCP
+ snprintf(pooler_s, MAXTOKEN, "%d", pooler);
+#endif
+
if (!isVarYes(VAR_datanodeSlave))
assign_sval(VAR_datanodeSlave, "y");
assign_arrayEl(VAR_datanodeSlaveServers, idx, host, NULL);
+ assign_arrayEl(VAR_datanodeSlavePorts, idx, port_s, NULL);
+#ifdef XCP
+ assign_arrayEl(VAR_datanodeSlavePoolerPorts, idx, pooler_s, NULL);
+#endif
assign_arrayEl(VAR_datanodeSlaveDirs, idx, dir, NULL);
assign_arrayEl(VAR_datanodeArchLogDirs, idx, archDir, NULL);
/* Update the configuration file and backup it */
@@ -1220,6 +1267,10 @@ int add_datanodeSlave(char *name, char *host, char *dir, char *archDir)
timeStampString(date, MAXTOKEN+1));
fprintSval(f, VAR_datanodeSlave);
fprintAval(f, VAR_datanodeSlaveServers);
+ fprintAval(f, VAR_datanodeSlavePorts);
+#ifdef XCP
+ fprintAval(f, VAR_datanodeSlavePoolerPorts);
+#endif
fprintAval(f, VAR_datanodeArchLogDirs);
fprintAval(f, VAR_datanodeSlaveDirs);
fprintf(f, "%s", "#----End of reconfiguration -------------------------\n");
@@ -1265,9 +1316,9 @@ int add_datanodeSlave(char *name, char *host, char *dir, char *archDir)
"max_wal_senders = 0\n" /* Minimum WAL senders */
"# End of Addition\n",
#ifdef XCP
- timeStampString(date, MAXTOKEN), aval(VAR_datanodePorts)[idx], aval(VAR_datanodePoolerPorts)[idx]);
+ timeStampString(date, MAXTOKEN), aval(VAR_datanodeSlavePorts)[idx], aval(VAR_datanodeSlavePoolerPorts)[idx]);
#else
- timeStampString(date, MAXTOKEN), aval(VAR_datanodePorts)[idx]);
+ timeStampString(date, MAXTOKEN), aval(VAR_datanodeSlavePorts)[idx]);
#endif
pclose(f);
/* Update the slave recovery.conf */
@@ -1464,6 +1515,7 @@ int remove_datanodeMaster(char *name, int clean_opt)
fprintAval(f, VAR_datanodeMasterServers);
fprintAval(f, VAR_datanodeMaxWALSenders);
fprintAval(f, VAR_datanodeSlaveServers);
+ fprintAval(f, VAR_datanodeSlavePorts);
fprintAval(f, VAR_datanodeSlaveDirs);
fprintAval(f, VAR_datanodeArchLogDirs);
fprintAval(f, VAR_datanodeSpecificExtraConfig);
@@ -1495,7 +1547,7 @@ int remove_datanodeSlave(char *name, int clean_opt)
return 1;
}
AddMember(nodelist, name);
- if (pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodePorts)[idx]) == 0)
+ if (pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodeSlavePorts)[idx]) == 0)
stop_datanode_slave(nodelist, "immediate");
{
FILE *f;
@@ -1723,10 +1775,10 @@ int show_config_datanodeSlave(int flag, int idx, char *hostname)
elog(NOTICE, "%s", outBuf);
#ifdef XCP
elog(NOTICE, " Nodename: '%s', port: %s, pooler port: %s\n",
- aval(VAR_datanodeNames)[idx], aval(VAR_datanodePorts)[idx], aval(VAR_poolerPorts)[idx]);
+ aval(VAR_datanodeNames)[idx], aval(VAR_datanodeSlavePorts)[idx], aval(VAR_poolerPorts)[idx]);
#else
elog(NOTICE, " Nodename: '%s', port: %s\n",
- aval(VAR_datanodeNames)[idx], aval(VAR_datanodePorts)[idx]);
+ aval(VAR_datanodeNames)[idx], aval(VAR_datanodeSlavePorts)[idx]);
#endif
elog(NOTICE," Dir: '%s', Archive Log Dir: '%s'\n",
aval(VAR_datanodeSlaveDirs)[idx], aval(VAR_datanodeArchLogDirs)[idx]);
@@ -1908,7 +1960,7 @@ cmd_t *prepare_killDatanodeSlave(char *nodeName)
elog(WARNING, "WARNING: pid for datanode slave \"%s\" slave was not found. Remove socket only.\n", nodeName);
snprintf(newCommand(cmd), MAXLINE,
"rm -rf /tmp/.s.'*'%s'*'", /* Remove the socket */
- aval(VAR_datanodePorts)[dnIndex]);
+ aval(VAR_datanodeSlavePorts)[dnIndex]);
}
else
{
@@ -1919,7 +1971,7 @@ cmd_t *prepare_killDatanodeSlave(char *nodeName)
"rm -rf /tmp/.s.'*'%d'*'", /* Remove the socket */
postmasterPid,
pidList,
- atoi(aval(VAR_datanodePorts)[dnIndex]));
+ atoi(aval(VAR_datanodeSlavePorts)[dnIndex]));
freeAndReset(pidList);
}
return(cmd);
diff --git a/contrib/pgxc_ctl/datanode_cmd.h b/contrib/pgxc_ctl/datanode_cmd.h
index d8e58dfe36..0c619e547a 100644
--- a/contrib/pgxc_ctl/datanode_cmd.h
+++ b/contrib/pgxc_ctl/datanode_cmd.h
@@ -56,7 +56,7 @@ extern int add_datanodeMaster(char *name, char *host, int port, int pooler, char
#else
extern int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restore_dname);
#endif
-extern int add_datanodeSlave(char *name, char *host, char *dir, char *archDir);
+extern int add_datanodeSlave(char *name, char *host, int port, int pooler, char *dir, char *archDir);
extern int remove_datanodeMaster(char *name, int clean_opt);
extern int remove_datanodeSlave(char *name, int clean_opt);
diff --git a/contrib/pgxc_ctl/do_command.c b/contrib/pgxc_ctl/do_command.c
index d7382de8d5..bfc7517f92 100644
--- a/contrib/pgxc_ctl/do_command.c
+++ b/contrib/pgxc_ctl/do_command.c
@@ -971,11 +971,24 @@ static void do_add_command(char *line)
{
GetAndSet(name, "ERROR: please specify the name of the datanode slave\n");
GetAndSet(host, "ERROR: please specify the host for the datanode slave\n");
+ GetAndSet(port, "ERROR: please specify the port number for the datanode slave\n");
+#ifdef XCP
+ GetAndSet(pooler, "ERROR: please specify the pooler port number for the datanode slave.\n");
+#endif
GetAndSet(dir, "ERROR: please specify the working director for datanode slave\n");
GetAndSet(archDir, "ERROR: please specify WAL archive directory for datanode slave\n");
- add_datanodeSlave(name, host, dir, archDir);
+
+#ifdef XCP
+ add_datanodeSlave(name, host, atoi(port), atoi(pooler), dir, archDir);
+#else
+ add_datanodeSlave(name, host, atoi(port), dir, archDir);
+#endif
freeAndReset(name);
freeAndReset(host);
+ freeAndReset(port);
+#ifdef XCP
+ freeAndReset(pooler);
+#endif
freeAndReset(dir);
}
}
diff --git a/contrib/pgxc_ctl/monitor.c b/contrib/pgxc_ctl/monitor.c
index 2323bd00a1..92c01adbed 100644
--- a/contrib/pgxc_ctl/monitor.c
+++ b/contrib/pgxc_ctl/monitor.c
@@ -195,7 +195,7 @@ static void monitor_datanode_slave(char **nodeList)
continue;
}
if (doesExist(VAR_datanodeSlaveServers, idx) && !is_none(aval(VAR_datanodeSlaveServers)[idx]))
- printResult(pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodePorts)[idx]),
+ printResult(pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodeSlavePorts)[idx]),
"datanode slave", actualNodeList[ii]);
else
elog(ERROR, "ERROR: datanode slave %s is not configured.\n", actualNodeList[ii]);
@@ -219,7 +219,7 @@ static void monitor_datanode(char **nodeList)
printResult(pingNode(aval(VAR_datanodeMasterServers)[idx], aval(VAR_datanodePorts)[idx]),
"datanode master", actualNodeList[ii]);
if (doesExist(VAR_datanodeSlaveServers, idx) && !is_none(aval(VAR_datanodeSlaveServers)[idx]))
- printResult(pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodePorts)[idx]),
+ printResult(pingNode(aval(VAR_datanodeSlaveServers)[idx], aval(VAR_datanodeSlavePorts)[idx]),
"datanode slave", actualNodeList[ii]);
}
}
diff --git a/contrib/pgxc_ctl/pgxc_ctl_bash.c b/contrib/pgxc_ctl/pgxc_ctl_bash.c
index 1e40e66149..30fae0c445 100644
--- a/contrib/pgxc_ctl/pgxc_ctl_bash.c
+++ b/contrib/pgxc_ctl/pgxc_ctl_bash.c
@@ -156,6 +156,10 @@ char *pgxc_ctl_bash_script[] = {
" echo datanodeSlave $datanodeSlave",
" echo datanodeSlaveSync $datanodeSlaveSync",
" print_array datanodeSlaveServers",
+" print_array datanodeSlavePorts",
+#ifdef XCP
+" print_array datanodeSlavePoolerPorts",
+#endif
" print_array datanodeSlaveDirs",
" print_array datanodeArchLogDirs",
"",
diff --git a/contrib/pgxc_ctl/pgxc_ctl_bash_2 b/contrib/pgxc_ctl/pgxc_ctl_bash_2
index c83adda40b..c98864ba0b 100755
--- a/contrib/pgxc_ctl/pgxc_ctl_bash_2
+++ b/contrib/pgxc_ctl/pgxc_ctl_bash_2
@@ -123,6 +123,10 @@ function print_values
echo datanodeSlave $datanodeSlave
echo datanodeSlaveSync $datanodeSlaveSync
print_array datanodeSlaveServers
+ print_array datanodeSlavePorts
+#ifdef XCP
+ print_array datanodeSlavePoolerPorts
+#endif
print_array datanodeSlaveDirs
print_array datanodeArchLogDirs
diff --git a/contrib/pgxc_ctl/signature.h b/contrib/pgxc_ctl/signature.h
index 3998195cc4..8484b398b7 100644
--- a/contrib/pgxc_ctl/signature.h
+++ b/contrib/pgxc_ctl/signature.h
@@ -11,5 +11,5 @@
#ifndef SIGNATURE_H
#define SIGNATURE_H
/* Signature file to identify the make */
-#define signature "140308_0826_521531776"
+#define signature "140725_1610_N"
#endif /* SIGNATURE_H */
diff --git a/contrib/pgxc_ctl/varnames.h b/contrib/pgxc_ctl/varnames.h
index 313141b721..4bb54a32f2 100644
--- a/contrib/pgxc_ctl/varnames.h
+++ b/contrib/pgxc_ctl/varnames.h
@@ -103,6 +103,10 @@
/* Datanode slaves */
#define VAR_datanodeSlave "datanodeSlave"
#define VAR_datanodeSlaveServers "datanodeSlaveServers"
+#define VAR_datanodeSlavePorts "datanodeSlavePorts"
+#ifdef XCP
+#define VAR_datanodeSlavePoolerPorts "datanodeSlavePoolerPorts"
+#endif
#define VAR_datanodeSlaveSync "datanodeSlaveSync"
#define VAR_datanodeSlaveDirs "datanodeSlaveDirs"
#define VAR_datanodeArchLogDirs "datanodeArchLogDirs"