diff options
author | Pavan Deolasee | 2014-07-24 05:10:13 +0000 |
---|---|---|
committer | Pavan Deolasee | 2014-09-01 14:20:29 +0000 |
commit | d6c2db5819ca3f9185eb6b5359a8025c7439eb32 (patch) | |
tree | b1ce282923af7d2471e45c8c4ca85e2f66d5e813 | |
parent | d4b0c619cc26b70938d0e33948549907ed0ad9a1 (diff) |
Don't use killall to kill unwanted gtm, gtm_proxy or postgres processes. That
can have damages much more than what we intend to cause. Instead, use
pg_ctl/gtm_ctl with -m immediate stop to stop the servers or send kill signal
to specific PID. In case, we can't find PID, just flash a
warning and remove the socket files, if any.
Note: The logic to clean socket files also need another look because
currently it assumes that those files are always created under /tmp directory.
This may not be true of some distributions where they tend to create them under
/var/..
-rw-r--r-- | contrib/pgxc_ctl/coord_cmd.c | 22 | ||||
-rw-r--r-- | contrib/pgxc_ctl/datanode_cmd.c | 6 | ||||
-rw-r--r-- | contrib/pgxc_ctl/gtm_cmd.c | 38 | ||||
-rw-r--r-- | contrib/pgxc_ctl/varnames.h | 2 |
4 files changed, 39 insertions, 29 deletions
diff --git a/contrib/pgxc_ctl/coord_cmd.c b/contrib/pgxc_ctl/coord_cmd.c index f28245873c..c26f9518e2 100644 --- a/contrib/pgxc_ctl/coord_cmd.c +++ b/contrib/pgxc_ctl/coord_cmd.c @@ -703,9 +703,10 @@ cmd_t * prepare_killCoordinatorMaster(char *nodeName) } else { + elog(WARNING, "WARNING: pid for coordinator master \"%s\" was not found. Remove socket only.\n", nodeName); snprintf(newCommand(cmdKill), MAXLINE, - "killall -u %s -9 postgres; rm -f /tmp/.s.'*'%d'*'", - sval(VAR_pgxcUser), atoi(aval(VAR_coordPorts)[idx])); + "rm -f /tmp/.s.'*'%d'*'", + atoi(aval(VAR_coordPorts)[idx])); } return cmd; } @@ -748,29 +749,28 @@ cmd_t *prepare_killCoordinatorSlave(char *nodeName) { int idx; pid_t pmPid; - cmd_t *cmd = NULL, *cmdKill = NULL, *cmdRmSock; + cmd_t *cmd = NULL; if ((idx = coordIdx(nodeName)) < 0) { elog(WARNING, "WARNING: %s is not a coordinator.\n", nodeName); return(NULL); } + cmd = initCmd(aval(VAR_coordSlaveServers)[idx]); if ((pmPid = get_postmaster_pid(aval(VAR_coordSlaveServers)[idx], aval(VAR_coordSlaveDirs)[idx])) > 0) { char *pidList = getChPidList(aval(VAR_coordSlaveServers)[idx], pmPid); - cmd = cmdKill = initCmd(aval(VAR_coordSlaveServers)[idx]); - snprintf(newCommand(cmdKill), MAXLINE, - "kill -9 %d %s", - pmPid, pidList); + snprintf(newCommand(cmd), MAXLINE, + "kill -9 %d %s", pmPid, pidList); freeAndReset(pidList); } - if (cmd == NULL) - cmd = cmdRmSock = initCmd(aval(VAR_coordSlaveServers)[idx]); else - appendCmdEl(cmd, (cmdRmSock = initCmd(aval(VAR_coordSlaveServers)[idx]))); - snprintf(newCommand(cmdRmSock), MAXLINE, + { + elog(WARNING, "WARNING: pid for coordinator slave \"%s\" was not found. Remove socket only.\n", nodeName); + snprintf(newCommand(cmd), MAXLINE, "rm -f /tmp/.s.'*'%d'*'", atoi(aval(VAR_coordPorts)[idx])); + } return(cmd); } diff --git a/contrib/pgxc_ctl/datanode_cmd.c b/contrib/pgxc_ctl/datanode_cmd.c index cef987641c..3aee7668ed 100644 --- a/contrib/pgxc_ctl/datanode_cmd.c +++ b/contrib/pgxc_ctl/datanode_cmd.c @@ -1832,10 +1832,12 @@ cmd_t *prepare_killDatanodeMaster(char *nodeName) freeAndReset(pidList); } else + { + elog(WARNING, "WARNING: pid for datanode master \"%s\" was not found. Remove socket only.\n", nodeName); snprintf(newCommand(cmd), MAXLINE, - "killall -u %s -9 postgres;" /* Kill the postmaster and all its children */ "rm -rf /tmp/.s.'*'%d'*'", /* Remove the socket */ - sval(VAR_pgxcUser), atoi(aval(VAR_datanodePorts)[dnIndex])); + atoi(aval(VAR_datanodePorts)[dnIndex])); + } return(cmd); } diff --git a/contrib/pgxc_ctl/gtm_cmd.c b/contrib/pgxc_ctl/gtm_cmd.c index b537870ad5..be832df4c1 100644 --- a/contrib/pgxc_ctl/gtm_cmd.c +++ b/contrib/pgxc_ctl/gtm_cmd.c @@ -57,8 +57,8 @@ cmd_t *prepare_initGtmMaster(void) /* Kill current gtm, bild work directory and run initgtm */ cmdInitGtmMaster = initCmd(sval(VAR_gtmMasterServer)); snprintf(newCommand(cmdInitGtmMaster), MAXLINE, - "killall -u %s -9 gtm; rm -rf %s; mkdir -p %s;initgtm -Z gtm -D %s", - sval(VAR_pgxcUser), + "gtm_ctl -D %s -m immediate -Z gtm stop; rm -rf %s; mkdir -p %s;initgtm -Z gtm -D %s", + sval(VAR_gtmMasterDir), sval(VAR_gtmMasterDir), sval(VAR_gtmMasterDir), sval(VAR_gtmMasterDir)); /* Then prepare gtm.conf file */ @@ -259,8 +259,8 @@ cmd_t *prepare_initGtmSlave(void) /* Kill current gtm, build work directory and run initgtm */ cmdInitGtm = initCmd(sval(VAR_gtmSlaveServer)); snprintf(newCommand(cmdInitGtm), MAXLINE, - "killall -u %s -9 gtm; rm -rf %s; mkdir -p %s; initgtm -Z gtm -D %s", - sval(VAR_pgxcUser), + "gtm_ctl -D %s -m immediate -Z gtm stop; rm -rf %s; mkdir -p %s; initgtm -Z gtm -D %s", + sval(VAR_gtmSlaveDir), sval(VAR_gtmSlaveDir), sval(VAR_gtmSlaveDir), sval(VAR_gtmSlaveDir)); /* Prepare gtm.conf file */ @@ -471,9 +471,12 @@ cmd_t *prepare_killGtmMaster(void) "kill -9 %d; rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", gtmPid, atoi(sval(VAR_gtmMasterPort)), sval(VAR_gtmMasterDir)); else + { + elog(WARNING, "WARNING: pid for gtm master was not found. Remove socket only.\n"); snprintf(newCommand(cmdKill), MAXLINE, - "killall -u %s -9 gtm; rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", - sval(VAR_pgxcUser), atoi(sval(VAR_gtmMasterPort)), sval(VAR_gtmMasterDir)); + "rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", + atoi(sval(VAR_gtmMasterPort)), sval(VAR_gtmMasterDir)); + } return(cmdKill); } @@ -519,10 +522,12 @@ cmd_t *prepare_killGtmSlave(void) "kill -9 %d; rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", gtmPid, atoi(sval(VAR_gtmSlavePort)), sval(VAR_gtmSlaveDir)); else + { + elog(WARNING, "WARNING: pid for gtm slave was not found. Remove socket only.\n"); snprintf(newCommand(cmdKill), MAXLINE, - "killall -u %s -9 gtm; rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", - sval(VAR_pgxcUser), atoi(sval(VAR_gtmSlavePort)), sval(VAR_gtmSlaveDir)); - cmdKill = initCmd(sval(VAR_gtmSlaveServer)); + "rm -rf /tmp/.s.'*'%d'*' %s/gtm.pid", + atoi(sval(VAR_gtmSlavePort)), sval(VAR_gtmSlaveDir)); + } return(cmdKill); } @@ -872,11 +877,11 @@ cmd_t *prepare_initGtmProxy(char *nodeName) /* Build directory and run initgtm */ cmdInitGtm = initCmd(aval(VAR_gtmProxyServers)[idx]); snprintf(newCommand(cmdInitGtm), MAXLINE, - "killall -u %s -9 gtm_proxy;" + "gtm_ctl -D %s -m immediate -Z gtm_proxy stop;" "rm -rf %s;" "mkdir -p %s;" "initgtm -Z gtm_proxy -D %s", - sval(VAR_pgxcUser), + aval(VAR_gtmProxyDirs)[idx], aval(VAR_gtmProxyDirs)[idx], aval(VAR_gtmProxyDirs)[idx], aval(VAR_gtmProxyDirs)[idx]); @@ -971,9 +976,9 @@ cmd_t *prepare_startGtmProxy(char *nodeName) } cmd = initCmd(aval(VAR_gtmProxyServers)[idx]); snprintf(newCommand(cmd), MAXLINE, - "killall -u %s -9 gtm_proxy;" + "gtm_ctl -D %s -m immediate -Z gtm_proxy stop;" "gtm_ctl start -Z gtm_proxy -D %s", - sval(VAR_pgxcUser), + aval(VAR_gtmProxyDirs)[idx], aval(VAR_gtmProxyDirs)[idx]); return(cmd); } @@ -1098,9 +1103,12 @@ cmd_t *prepare_killGtmProxy(char *nodeName) "kill -9 %d; rm -rf /tmp/.s.'*'%d'*' %s/gtm_proxy.pid", gtmPxyPid, atoi(aval(VAR_gtmProxyPorts)[idx]), aval(VAR_gtmProxyDirs)[idx]); else + { + elog(WARNING, "WARNING: pid for gtm proxy \"%s\" was not found. Remove socket only.\n", nodeName); snprintf(newCommand(cmd), MAXLINE, - "killall -u %s -9 gtm; rm -rf /tmp/.s.'*'%d'*' %s/gtm_proxy.pid", - sval(VAR_pgxcUser), atoi(aval(VAR_gtmProxyPorts)[idx]), aval(VAR_gtmProxyDirs)[idx]); + "rm -rf /tmp/.s.'*'%d'*' %s/gtm_proxy.pid", + atoi(aval(VAR_gtmProxyPorts)[idx]), aval(VAR_gtmProxyDirs)[idx]); + } return(cmd); } diff --git a/contrib/pgxc_ctl/varnames.h b/contrib/pgxc_ctl/varnames.h index 9494b76b70..313141b721 100644 --- a/contrib/pgxc_ctl/varnames.h +++ b/contrib/pgxc_ctl/varnames.h @@ -11,7 +11,7 @@ *------------------------------------------------------------------------- */ #ifndef VARNAMES_H -#define VAR_VARNAMES_H +#define VARNAMES_H /* Install Directory */ #define VAR_pgxcInstallDir "pgxcInstallDir" /* Not mandatory */ |