We were wrongly doing this check on the local node, which was clearly wrong.
char localStdin[MAXPATH+1];
char *gtmHost, *gtmPort;
char timestamp[MAXTOKEN+1];
+ char remoteDirCheck[MAXPATH * 2 + 128];
/* Reset coordinator master directory and run initdb */
if ((jj = coordIdx(nodeName)) < 0)
return(NULL);
}
- if ((pgxc_check_dir(aval(VAR_coordMasterDirs)[jj]) == 2) && !forceInit)
+ remoteDirCheck[0] = '\0';
+ if (!forceInit)
{
- elog(ERROR, "ERROR: target coordinator directory %s exists and is not empty. Skip initilialization.\n",
- aval(VAR_coordMasterDirs)[jj]);
- return NULL;
+ sprintf(remoteDirCheck, "if [ \"$(ls -A %s 2> /dev/null)\" ]; then echo 'ERROR: "
+ "target directory (%s) exists and not empty. "
+ "Skip Coordinator initilialization'; exit; fi",
+ aval(VAR_coordMasterDirs)[jj],
+ aval(VAR_coordMasterDirs)[jj]
+ );
}
cmd = cmdInitdb = initCmd(aval(VAR_coordMasterServers)[jj]);
snprintf(newCommand(cmdInitdb), MAXLINE,
+ "%s;"
"rm -rf %s;"
"mkdir -p %s;"
"initdb --nodename %s -D %s",
+ remoteDirCheck,
aval(VAR_coordMasterDirs)[jj],
aval(VAR_coordMasterDirs)[jj],
nodeName,
char **fileList = NULL;
FILE *f;
char timeStamp[MAXTOKEN+1];
+ char remoteDirCheck[MAXPATH * 2 + 128];
if ((idx = datanodeIdx(nodeName)) < 0)
return(NULL);
- if ((pgxc_check_dir(aval(VAR_datanodeMasterDirs)[idx]) == 2) && !forceInit)
+ remoteDirCheck[0] = '\0';
+ if (!forceInit)
{
- elog(ERROR, "ERROR: target datanode directory %s exists and is not empty. Skip initilialization.\n",
- aval(VAR_datanodeMasterDirs)[idx]);
- return NULL;
+ sprintf(remoteDirCheck, "if [ \"$(ls -A %s 2> /dev/null)\" ]; then echo 'ERROR: "
+ "target directory (%s) exists and not empty. "
+ "Skip Datanode initilialization'; exit; fi",
+ aval(VAR_datanodeMasterDirs)[idx],
+ aval(VAR_datanodeMasterDirs)[idx]
+ );
+
}
/* Build each datanode's initialize command */
cmd = cmdInitdb = initCmd(aval(VAR_datanodeMasterServers)[idx]);
snprintf(newCommand(cmdInitdb), MAXLINE,
- "rm -rf %s; mkdir -p %s; initdb --nodename %s -D %s",
+ "%s;"
+ "rm -rf %s;"
+ "mkdir -p %s; initdb --nodename %s -D %s",
+ remoteDirCheck,
aval(VAR_datanodeMasterDirs)[idx], aval(VAR_datanodeMasterDirs)[idx],
aval(VAR_datanodeNames)[idx], aval(VAR_datanodeMasterDirs)[idx]);
FILE *f;
char **fileList = NULL;
int result;
+ char remoteDirCheck[MAXPATH * 2 + 128];
- result = pgxc_check_dir(sval(VAR_gtmMasterDir));
-
- if ((result == 2) && !forceInit)
+ remoteDirCheck[0] = '\0';
+ if (!forceInit)
{
- elog(ERROR, "ERROR: target GTM directory %s exists and is not empty. Skip initilialization.\n",
- sval(VAR_gtmMasterDir));
- return NULL;
+ sprintf(remoteDirCheck, "if [ \"$(ls -A %s 2> /dev/null)\" ]; then echo 'ERROR: "
+ "target directory (%s) exists and not empty. "
+ "Skip GTM initilialization'; exit; fi",
+ sval(VAR_gtmMasterDir),
+ sval(VAR_gtmMasterDir)
+ );
}
/* Kill current gtm, bild work directory and run initgtm */
cmdInitGtmMaster = initCmd(sval(VAR_gtmMasterServer));
snprintf(newCommand(cmdInitGtmMaster), MAXLINE,
+ "%s;"
"gtm_ctl -D %s -m immediate -Z gtm stop; rm -rf %s; mkdir -p %s;initgtm -Z gtm -D %s",
+ remoteDirCheck,
sval(VAR_gtmMasterDir),
sval(VAR_gtmMasterDir), sval(VAR_gtmMasterDir), sval(VAR_gtmMasterDir));