diff options
author | Pavan Deolasee | 2014-08-11 06:01:38 +0000 |
---|---|---|
committer | Pavan Deolasee | 2014-09-01 14:20:31 +0000 |
commit | d515c29afcc724b8988ff18c33e744243a8a2923 (patch) | |
tree | 1e667c3a14554537a5c874ee07e0b9e921a793a1 | |
parent | d97b491e8c76de9e62243d3a78bf4b860e61922b (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.c | 22 | ||||
-rw-r--r-- | contrib/pgxc_ctl/coord_cmd.h | 3 | ||||
-rw-r--r-- | contrib/pgxc_ctl/datanode_cmd.c | 26 | ||||
-rw-r--r-- | contrib/pgxc_ctl/datanode_cmd.h | 6 | ||||
-rw-r--r-- | contrib/pgxc_ctl/do_command.c | 15 | ||||
-rw-r--r-- | doc-xc/src/sgml/pgxc_ctl-ref.sgmlin | 11 |
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 |