summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2014-08-11 06:01:38 +0000
committerPavan Deolasee2014-09-01 14:20:31 +0000
commitd515c29afcc724b8988ff18c33e744243a8a2923 (patch)
tree1e667c3a14554537a5c874ee07e0b9e921a793a1
parentd97b491e8c76de9e62243d3a78bf4b860e61922b (diff)
Add ability to specify extra server and pg_hba configuration while adding a new
datanode master or slave This makes "add" command compatible with what you can do through configuration file. User now must either specify extra conf files for server and pg_hba conf or say "none"
-rw-r--r--contrib/pgxc_ctl/coord_cmd.c22
-rw-r--r--contrib/pgxc_ctl/coord_cmd.h3
-rw-r--r--contrib/pgxc_ctl/datanode_cmd.c26
-rw-r--r--contrib/pgxc_ctl/datanode_cmd.h6
-rw-r--r--contrib/pgxc_ctl/do_command.c15
-rw-r--r--doc-xc/src/sgml/pgxc_ctl-ref.sgmlin11
6 files changed, 66 insertions, 17 deletions
diff --git a/contrib/pgxc_ctl/coord_cmd.c b/contrib/pgxc_ctl/coord_cmd.c
index bdf40dc703..7e090108f2 100644
--- a/contrib/pgxc_ctl/coord_cmd.c
+++ b/contrib/pgxc_ctl/coord_cmd.c
@@ -922,7 +922,8 @@ int clean_coordinator_slave_all(void)
* Add command
*
*-----------------------------------------------------------------------*/
-int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *dir)
+int add_coordinatorMaster(char *name, char *host, int port, int pooler,
+ char *dir, char *extraConf, char *extraPgHbaConf)
{
FILE *f, *lockf;
int size, idx;
@@ -935,6 +936,7 @@ int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *di
char **nodelist = NULL;
int ii, jj;
char **confFiles = NULL;
+ char **pgHbaConfFiles = NULL;
/* Check if all the coordinator masters are running */
if (!check_AllCoordRunning())
@@ -1009,8 +1011,8 @@ int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *di
assign_arrayEl(VAR_coordSlavePoolerPorts, idx, "none", NULL);
assign_arrayEl(VAR_coordSlaveDirs, idx, "none", NULL);
assign_arrayEl(VAR_coordArchLogDirs, idx, "none", NULL);
- assign_arrayEl(VAR_coordSpecificExtraConfig, idx, "none", NULL);
- assign_arrayEl(VAR_coordSpecificExtraPgHba, idx, "none", NULL);
+ assign_arrayEl(VAR_coordSpecificExtraConfig, idx, extraConf, NULL);
+ assign_arrayEl(VAR_coordSpecificExtraPgHba, idx, extraPgHbaConf, NULL);
handle_no_slaves();
/*
* Update the configuration file and backup it
@@ -1022,6 +1024,15 @@ int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *di
AddMember(confFiles, sval(VAR_coordExtraConfig));
if (doesExist(VAR_coordSpecificExtraConfig, idx) && !is_none(aval(VAR_coordSpecificExtraConfig)[idx]))
AddMember(confFiles, aval(VAR_coordSpecificExtraConfig)[idx]);
+
+ /*
+ * Take care of extra pg_hba conf file
+ */
+ if (doesExist(VAR_coordExtraPgHba, 0) && !is_none(sval(VAR_coordExtraPgHba)))
+ AddMember(pgHbaConfFiles, sval(VAR_coordExtraPgHba));
+ if (doesExist(VAR_coordSpecificExtraPgHba, idx) && !is_none(aval(VAR_coordSpecificExtraPgHba)[idx]))
+ AddMember(pgHbaConfFiles, aval(VAR_coordSpecificExtraPgHba)[idx]);
+
/*
* Main part
*/
@@ -1084,6 +1095,11 @@ int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *di
if ((f = pgxc_popen_w(host, "cat >> %s/pg_hba.conf", dir)))
{
int kk;
+
+ fprintf(f, "#===========================================\n");
+ fprintf(f, "# Added at initialization.\n");
+
+ appendFiles(f, pgHbaConfFiles);
for (kk = 0; aval(VAR_coordPgHbaEntries)[kk]; kk++)
{
fprintf(f,"host all %s %s trust\n", sval(VAR_pgxcOwner), aval(VAR_coordPgHbaEntries)[kk]);
diff --git a/contrib/pgxc_ctl/coord_cmd.h b/contrib/pgxc_ctl/coord_cmd.h
index e1f2a25579..84a7b4d141 100644
--- a/contrib/pgxc_ctl/coord_cmd.h
+++ b/contrib/pgxc_ctl/coord_cmd.h
@@ -52,7 +52,8 @@ extern int stop_coordinator_slave_all(char *immediate);
extern cmd_t *prepare_stopCoordinatorMaster(char *nodeName, char *immediate);
extern cmd_t *prepare_stopCoordinatorSlave(char *nodeName, char *immediate);
-extern int add_coordinatorMaster(char *name, char *host, int port, int pooler, char *dir);
+extern int add_coordinatorMaster(char *name, char *host, int port, int pooler,
+ char *dir, char *extraConf, char *extraPgHbaConf);
extern int add_coordinatorSlave(char *name, char *host, int port, int pooler, char *dir, char *archDir);
extern int remove_coordinatorMaster(char *name, int clean_opt);
extern int remove_coordinatorSlave(char *name, int clean_opt);
diff --git a/contrib/pgxc_ctl/datanode_cmd.c b/contrib/pgxc_ctl/datanode_cmd.c
index 265f1107e6..ae296466b0 100644
--- a/contrib/pgxc_ctl/datanode_cmd.c
+++ b/contrib/pgxc_ctl/datanode_cmd.c
@@ -921,9 +921,11 @@ static int failover_oneDatanode(int datanodeIdx)
*
*-----------------------------------------------------------------------*/
#ifdef XCP
-int add_datanodeMaster(char *name, char *host, int port, int pooler, char *dir, char *restore_dname)
+int add_datanodeMaster(char *name, char *host, int port, int pooler, char *dir,
+ char *restore_dname, char *extraConf, char *extraPgHbaConf)
#else
-int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restore_dname)
+int add_datanodeMaster(char *name, char *host, int port, char *dir,
+ char *restore_dname, char *extraConf, char *extraPgHbaConf)
#endif
{
FILE *f, *lockf;
@@ -939,6 +941,7 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
char **nodelist = NULL;
int ii, jj, restore_dnode_idx;
char **confFiles = NULL;
+ char **pgHbaConfFiles = NULL;
char *only_globals = "-g";
/* Check if all the datanodes are running */
@@ -1037,18 +1040,26 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
#endif
assign_arrayEl(VAR_datanodeSlaveDirs, idx, "none", NULL);
assign_arrayEl(VAR_datanodeArchLogDirs, idx, "none", NULL);
- assign_arrayEl(VAR_datanodeSpecificExtraConfig, idx, "none", NULL);
- assign_arrayEl(VAR_datanodeSpecificExtraPgHba, idx, "none", NULL);
+ assign_arrayEl(VAR_datanodeSpecificExtraConfig, idx, extraConf, NULL);
+ assign_arrayEl(VAR_datanodeSpecificExtraPgHba, idx, extraPgHbaConf, NULL);
/*
* Update the configuration file and backup it
*/
/*
* Take care of exrtra conf file
*/
- if (doesExist(VAR_datanodeExtraConfig, 0) && !is_none(sval(VAR_coordExtraConfig)))
+ if (doesExist(VAR_datanodeExtraConfig, 0) && !is_none(sval(VAR_datanodeExtraConfig)))
AddMember(confFiles, sval(VAR_datanodeExtraConfig));
if (doesExist(VAR_datanodeSpecificExtraConfig, idx) && !is_none(aval(VAR_datanodeSpecificExtraConfig)[idx]))
AddMember(confFiles, aval(VAR_datanodeSpecificExtraConfig)[idx]);
+
+ /*
+ * Take care of exrtra conf pg_hba file
+ */
+ if (doesExist(VAR_datanodeExtraPgHba, 0) && !is_none(sval(VAR_datanodeExtraPgHba)))
+ AddMember(pgHbaConfFiles, sval(VAR_datanodeExtraPgHba));
+ if (doesExist(VAR_datanodeSpecificExtraPgHba, idx) && !is_none(aval(VAR_datanodeSpecificExtraPgHba)[idx]))
+ AddMember(pgHbaConfFiles, aval(VAR_datanodeSpecificExtraPgHba)[idx]);
/*
* Main part
*/
@@ -1120,6 +1131,11 @@ int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restor
if ((f = pgxc_popen_w(host, "cat >> %s/pg_hba.conf", dir)))
{
int kk;
+
+ fprintf(f, "#===========================================\n");
+ fprintf(f, "# Added at initialization.\n");
+
+ appendFiles(f, pgHbaConfFiles);
for (kk = 0; aval(VAR_datanodePgHbaEntries)[kk]; kk++)
{
fprintf(f,"host all %s %s trust\n", sval(VAR_pgxcOwner), aval(VAR_datanodePgHbaEntries)[kk]);
diff --git a/contrib/pgxc_ctl/datanode_cmd.h b/contrib/pgxc_ctl/datanode_cmd.h
index 0c619e547a..7f0224dc77 100644
--- a/contrib/pgxc_ctl/datanode_cmd.h
+++ b/contrib/pgxc_ctl/datanode_cmd.h
@@ -52,9 +52,11 @@ extern cmd_t *prepare_cleanDatanodeMaster(char *nodeName);
extern cmd_t *prepare_cleanDatanodeSlave(char *nodeName);
#ifdef XCP
-extern int add_datanodeMaster(char *name, char *host, int port, int pooler, char *dir, char *restore_dname);
+extern int add_datanodeMaster(char *name, char *host, int port, int pooler,
+ char *dir, char *restore_dname, char *extraConf, char *extraPgHbaConf);
#else
-extern int add_datanodeMaster(char *name, char *host, int port, char *dir, char *restore_dname);
+extern int add_datanodeMaster(char *name, char *host, int port, char *dir,
+ char *restore_dname, char *extraConf, char *extraPgHbaConf);
#endif
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);
diff --git a/contrib/pgxc_ctl/do_command.c b/contrib/pgxc_ctl/do_command.c
index 8a7cf0c4dc..1b013dd942 100644
--- a/contrib/pgxc_ctl/do_command.c
+++ b/contrib/pgxc_ctl/do_command.c
@@ -853,6 +853,8 @@ static void do_add_command(char *line)
char *dir;
char *archDir;
char *dnode;
+ char *extraConf;
+ char *extraPgHbaConf;
if (!GetToken())
{
@@ -918,7 +920,10 @@ static void do_add_command(char *line)
GetAndSet(port, "ERROR: please specify the port number for the coordinator master\n");
GetAndSet(pooler, "ERROR: please specify the pooler port number for the coordinator master.\n");
GetAndSet(dir, "ERROR: please specify the working director for the coordinator master\n");
- add_coordinatorMaster(name, host, atoi(port), atoi(pooler), dir);
+ GetAndSet(extraConf, "ERROR: please specify file to read extra configuration. Specify 'none' if nothig extra to be added.\n");
+ GetAndSet(extraPgHbaConf, "ERROR: please specify file to read extra pg_hba configuration. Specify 'none' if nothig extra to be added.\n");
+ add_coordinatorMaster(name, host, atoi(port), atoi(pooler), dir,
+ extraConf, extraPgHbaConf);
freeAndReset(name);
freeAndReset(host);
freeAndReset(port);
@@ -956,10 +961,14 @@ static void do_add_command(char *line)
#endif
GetAndSet(dir, "ERROR: please specify the working director for the datanode master\n");
GetAndSet(dnode, "ERROR: please specify name of existing datanode of which this will be a copy of. Specify 'none' for a bare datanode\n");
+ GetAndSet(extraConf, "ERROR: please specify file to read extra configuration. Specify 'none' if nothig extra to be added.\n");
+ GetAndSet(extraPgHbaConf, "ERROR: please specify file to read extra pg_hba configuration. Specify 'none' if nothig extra to be added.\n");
#ifdef XCP
- add_datanodeMaster(name, host, atoi(port), atoi(pooler), dir, dnode);
+ add_datanodeMaster(name, host, atoi(port), atoi(pooler), dir,
+ dnode, extraConf, extraPgHbaConf);
#else
- add_datanodeMaster(name, host, atoi(port), dir, dnode);
+ add_datanodeMaster(name, host, atoi(port), dir, dnode, extraConf,
+ extraPgHbaConf);
#endif
freeAndReset(name);
freeAndReset(host);
diff --git a/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin b/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin
index 1df2feca52..8928855576 100644
--- a/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin
+++ b/doc-xc/src/sgml/pgxc_ctl-ref.sgmlin
@@ -1562,9 +1562,12 @@ PGXC$ prepare config my_config.conf
<varlistentry>
<term><literal>add gtm slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
<term><literal>add gtm_proxy <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
- <term><literal>add coordinator master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">pooler</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add coordinator master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">pooler</replaceable> <replaceable class="parameter">dir</replaceable>< <replaceable class="parameter">extraServerConf</replaceable> <replaceable class="parameter">extraPgHbaConf</replaceable>/literal></term>
<term><literal>add coordinator slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">dir</replaceable> <replaceable class="parameter">archDir</replaceable></literal></term>
<term><literal>add datanode master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable></literal></term>
+ <term><literal>add datanode master <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">port</replaceable> <replaceable class="parameter">dir</replaceable> <replaceable
+class="parameter">extraServerConf</replaceable> <replaceable
+class="parameter">extraPgHbaConf</replaceable></literal></term>
<term><literal>add datanode slave <replaceable class="parameter">name</replaceable> <replaceable class="parameter">host</replaceable> <replaceable class="parameter">dir</replaceable> <replaceable class="parameter">archDir</replaceable></literal></term>
<listitem>
<para>
@@ -1572,8 +1575,10 @@ PGXC$ prepare config my_config.conf
Each node need host name and its work directory. gtm slave,
gtm_proxy, coordinator master and datanode master need its own port
to listen to. Coordinator needs its pooler port to pool
- connections to datanodes. Coordinator and datanode slave need a
- directory to receive WAL segments from their master.
+ connections to datanodes. Coordinator and datanode slave need a
+ directory to receive WAL segments from their master. While adding coordinator
+ master and datanode master, extra server configuration and extra pg_hba
+ configuration can be specified in a file.
</para>
<para>
When you add coordinator and datanode master, node information at