summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2014-07-24 05:10:13 +0000
committerPavan Deolasee2014-09-01 14:20:29 +0000
commitd6c2db5819ca3f9185eb6b5359a8025c7439eb32 (patch)
treeb1ce282923af7d2471e45c8c4ca85e2f66d5e813
parentd4b0c619cc26b70938d0e33948549907ed0ad9a1 (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.c22
-rw-r--r--contrib/pgxc_ctl/datanode_cmd.c6
-rw-r--r--contrib/pgxc_ctl/gtm_cmd.c38
-rw-r--r--contrib/pgxc_ctl/varnames.h2
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 */