Ensure that the session directory fields of orte_process_info have been initialized prior to cleaning up those directories as part of the initialization process that deals with stale session directory trees.
Fixes trac:4534 cmr=v1.8.1:reviewer=jsquyres This commit was SVN r31421. The following Trac tickets were found above: Ticket 4534 --> https://svn.open-mpi.org/trac/ompi/ticket/4534
Этот коммит содержится в:
родитель
a6a245b5b5
Коммит
8d72633acf
@ -112,11 +112,6 @@ int orte_ess_base_orted_setup(char **hosts)
|
|||||||
|
|
||||||
plm_in_use = false;
|
plm_in_use = false;
|
||||||
|
|
||||||
/* clear the session directory just in case there are
|
|
||||||
* stale directories laying around
|
|
||||||
*/
|
|
||||||
orte_session_dir_cleanup(ORTE_JOBID_WILDCARD);
|
|
||||||
|
|
||||||
/* setup callback for SIGPIPE */
|
/* setup callback for SIGPIPE */
|
||||||
setup_sighandler(SIGPIPE, &epipe_handler, epipe_signal_callback);
|
setup_sighandler(SIGPIPE, &epipe_handler, epipe_signal_callback);
|
||||||
/* Set signal handlers to catch kill signals so we can properly clean up
|
/* Set signal handlers to catch kill signals so we can properly clean up
|
||||||
@ -385,6 +380,23 @@ int orte_ess_base_orted_setup(char **hosts)
|
|||||||
(NULL == orte_process_info.tmpdir_base) ? "UNDEF" : orte_process_info.tmpdir_base,
|
(NULL == orte_process_info.tmpdir_base) ? "UNDEF" : orte_process_info.tmpdir_base,
|
||||||
orte_process_info.nodename));
|
orte_process_info.nodename));
|
||||||
|
|
||||||
|
/* take a pass thru the session directory code to fillin the
|
||||||
|
* tmpdir names - don't create anything yet
|
||||||
|
*/
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_session_dir(false,
|
||||||
|
orte_process_info.tmpdir_base,
|
||||||
|
orte_process_info.nodename, NULL,
|
||||||
|
ORTE_PROC_MY_NAME))) {
|
||||||
|
ORTE_ERROR_LOG(ret);
|
||||||
|
error = "orte_session_dir define";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
/* clear the session directory just in case there are
|
||||||
|
* stale directories laying around
|
||||||
|
*/
|
||||||
|
orte_session_dir_cleanup(ORTE_JOBID_WILDCARD);
|
||||||
|
|
||||||
|
/* now actually create the directory tree */
|
||||||
if (ORTE_SUCCESS != (ret = orte_session_dir(true,
|
if (ORTE_SUCCESS != (ret = orte_session_dir(true,
|
||||||
orte_process_info.tmpdir_base,
|
orte_process_info.tmpdir_base,
|
||||||
orte_process_info.nodename, NULL,
|
orte_process_info.nodename, NULL,
|
||||||
|
@ -301,11 +301,6 @@ static int rte_init(void)
|
|||||||
}
|
}
|
||||||
/* Setup the communication infrastructure */
|
/* Setup the communication infrastructure */
|
||||||
|
|
||||||
/* clear the session directory just in case there are
|
|
||||||
* stale directories laying around
|
|
||||||
*/
|
|
||||||
orte_session_dir_cleanup(ORTE_JOBID_WILDCARD);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OOB Layer
|
* OOB Layer
|
||||||
*/
|
*/
|
||||||
@ -596,6 +591,23 @@ static int rte_init(void)
|
|||||||
(NULL == orte_process_info.tmpdir_base) ? "UNDEF" : orte_process_info.tmpdir_base,
|
(NULL == orte_process_info.tmpdir_base) ? "UNDEF" : orte_process_info.tmpdir_base,
|
||||||
orte_process_info.nodename));
|
orte_process_info.nodename));
|
||||||
|
|
||||||
|
/* take a pass thru the session directory code to fillin the
|
||||||
|
* tmpdir names - don't create anything yet
|
||||||
|
*/
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_session_dir(false,
|
||||||
|
orte_process_info.tmpdir_base,
|
||||||
|
orte_process_info.nodename, NULL,
|
||||||
|
ORTE_PROC_MY_NAME))) {
|
||||||
|
ORTE_ERROR_LOG(ret);
|
||||||
|
error = "orte_session_dir define";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
/* clear the session directory just in case there are
|
||||||
|
* stale directories laying around
|
||||||
|
*/
|
||||||
|
orte_session_dir_cleanup(ORTE_JOBID_WILDCARD);
|
||||||
|
|
||||||
|
/* now actually create the directory tree */
|
||||||
if (ORTE_SUCCESS != (ret = orte_session_dir(true,
|
if (ORTE_SUCCESS != (ret = orte_session_dir(true,
|
||||||
orte_process_info.tmpdir_base,
|
orte_process_info.tmpdir_base,
|
||||||
orte_process_info.nodename, NULL,
|
orte_process_info.nodename, NULL,
|
||||||
|
@ -167,6 +167,16 @@ static int rte_init(void)
|
|||||||
/* flag that we are not routing since we have no HNP */
|
/* flag that we are not routing since we have no HNP */
|
||||||
orte_routing_is_enabled = false;
|
orte_routing_is_enabled = false;
|
||||||
|
|
||||||
|
/* take a pass thru the session directory code to fillin the
|
||||||
|
* tmpdir names - don't create anything yet
|
||||||
|
*/
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_session_dir(false,
|
||||||
|
orte_process_info.tmpdir_base,
|
||||||
|
orte_process_info.nodename, NULL,
|
||||||
|
ORTE_PROC_MY_NAME))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
/* clear the session directory just in case there are
|
/* clear the session directory just in case there are
|
||||||
* stale directories laying around
|
* stale directories laying around
|
||||||
*/
|
*/
|
||||||
|
@ -403,45 +403,17 @@ int orte_session_dir(bool create,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* if we are not creating, then just verify that the path is OK
|
|
||||||
*/
|
|
||||||
else {
|
|
||||||
if( ORTE_SUCCESS != (rc = opal_os_dirpath_access(fulldirpath, 0) )) {
|
|
||||||
/* it is okay for the path not to be found - don't error
|
|
||||||
* log that case, but do error log others
|
|
||||||
*/
|
|
||||||
if (ORTE_ERR_NOT_FOUND != rc) {
|
|
||||||
ORTE_ERROR_LOG(rc);
|
|
||||||
}
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/* update global structure fields */
|
||||||
* If we are creating the directory tree, then force overwrite of the
|
|
||||||
* global structure fields
|
|
||||||
*/
|
|
||||||
if (create) {
|
|
||||||
if (NULL != orte_process_info.tmpdir_base) {
|
if (NULL != orte_process_info.tmpdir_base) {
|
||||||
free(orte_process_info.tmpdir_base);
|
free(orte_process_info.tmpdir_base);
|
||||||
orte_process_info.tmpdir_base = NULL;
|
|
||||||
}
|
}
|
||||||
|
orte_process_info.tmpdir_base = strdup(local_prefix);
|
||||||
if (NULL != orte_process_info.top_session_dir) {
|
if (NULL != orte_process_info.top_session_dir) {
|
||||||
free(orte_process_info.top_session_dir);
|
free(orte_process_info.top_session_dir);
|
||||||
orte_process_info.top_session_dir = NULL;
|
orte_process_info.top_session_dir = NULL;
|
||||||
}
|
}
|
||||||
}
|
if (NULL != frontend) {
|
||||||
|
|
||||||
/*
|
|
||||||
* Update some of the global structures if they are empty
|
|
||||||
*/
|
|
||||||
if (NULL == orte_process_info.tmpdir_base) {
|
|
||||||
orte_process_info.tmpdir_base = strdup(local_prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NULL == orte_process_info.top_session_dir &&
|
|
||||||
NULL != frontend) {
|
|
||||||
orte_process_info.top_session_dir = strdup(frontend);
|
orte_process_info.top_session_dir = strdup(frontend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,15 +421,10 @@ int orte_session_dir(bool create,
|
|||||||
* Set the process session directory
|
* Set the process session directory
|
||||||
*/
|
*/
|
||||||
if (ORTE_VPID_INVALID != proc->vpid) {
|
if (ORTE_VPID_INVALID != proc->vpid) {
|
||||||
if (create) { /* overwrite if creating */
|
|
||||||
if (NULL != orte_process_info.proc_session_dir) {
|
if (NULL != orte_process_info.proc_session_dir) {
|
||||||
free(orte_process_info.proc_session_dir);
|
free(orte_process_info.proc_session_dir);
|
||||||
orte_process_info.proc_session_dir = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (NULL == orte_process_info.proc_session_dir) {
|
|
||||||
orte_process_info.proc_session_dir = strdup(fulldirpath);
|
orte_process_info.proc_session_dir = strdup(fulldirpath);
|
||||||
}
|
|
||||||
|
|
||||||
/* Strip off last part of directory structure */
|
/* Strip off last part of directory structure */
|
||||||
sav = opal_dirname(fulldirpath);
|
sav = opal_dirname(fulldirpath);
|
||||||
@ -470,16 +437,11 @@ int orte_session_dir(bool create,
|
|||||||
* Set the job session directory
|
* Set the job session directory
|
||||||
*/
|
*/
|
||||||
if (ORTE_JOBID_INVALID != proc->jobid) {
|
if (ORTE_JOBID_INVALID != proc->jobid) {
|
||||||
if (create) { /* overwrite if creating */
|
|
||||||
if (NULL != orte_process_info.job_session_dir) {
|
if (NULL != orte_process_info.job_session_dir) {
|
||||||
free(orte_process_info.job_session_dir);
|
free(orte_process_info.job_session_dir);
|
||||||
orte_process_info.job_session_dir = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (NULL == orte_process_info.job_session_dir) {
|
|
||||||
orte_process_info.job_session_dir = strdup(fulldirpath);
|
orte_process_info.job_session_dir = strdup(fulldirpath);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
opal_output(0, "procdir: %s",
|
opal_output(0, "procdir: %s",
|
||||||
@ -551,24 +513,32 @@ orte_session_dir_cleanup(orte_jobid_t jobid)
|
|||||||
|
|
||||||
if (NULL != job_session_dir && opal_os_dirpath_is_empty(job_session_dir)) {
|
if (NULL != job_session_dir && opal_os_dirpath_is_empty(job_session_dir)) {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
opal_output(0, "sess_dir_finalize: found job session dir empty - deleting");
|
opal_output(0, "sess_dir_cleanup: found job session dir empty - deleting");
|
||||||
}
|
}
|
||||||
rmdir(job_session_dir);
|
rmdir(job_session_dir);
|
||||||
} else {
|
} else {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
opal_output(0, "sess_dir_finalize: job session dir not empty - leaving");
|
if (OPAL_ERR_NOT_FOUND == opal_os_dirpath_access(job_session_dir, 0)) {
|
||||||
|
opal_output(0, "sess_dir_cleanup: job session dir does not exist");
|
||||||
|
} else {
|
||||||
|
opal_output(0, "sess_dir_cleanup: job session dir not empty - leaving");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opal_os_dirpath_is_empty(tmp)) {
|
if (opal_os_dirpath_is_empty(tmp)) {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
opal_output(0, "sess_dir_finalize: found top session dir empty - deleting");
|
opal_output(0, "sess_dir_cleanup: found top session dir empty - deleting");
|
||||||
}
|
}
|
||||||
rmdir(tmp);
|
rmdir(tmp);
|
||||||
} else {
|
} else {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
opal_output(0, "sess_dir_finalize: top session dir not empty - leaving");
|
if (OPAL_ERR_NOT_FOUND == opal_os_dirpath_access(tmp, 0)) {
|
||||||
|
opal_output(0, "sess_dir_cleanup: top session dir does not exist");
|
||||||
|
} else {
|
||||||
|
opal_output(0, "sess_dir_cleanup: top session dir not empty - leaving");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,8 +601,12 @@ orte_session_dir_finalize(orte_process_name_t *proc)
|
|||||||
rmdir(proc_session_dir);
|
rmdir(proc_session_dir);
|
||||||
} else {
|
} else {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
|
if (OPAL_ERR_NOT_FOUND == opal_os_dirpath_access(proc_session_dir, 0)) {
|
||||||
|
opal_output(0, "sess_dir_finalize: proc session dir does not exist");
|
||||||
|
} else {
|
||||||
opal_output(0, "sess_dir_finalize: proc session dir not empty - leaving");
|
opal_output(0, "sess_dir_finalize: proc session dir not empty - leaving");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,8 +617,12 @@ orte_session_dir_finalize(orte_process_name_t *proc)
|
|||||||
rmdir(job_session_dir);
|
rmdir(job_session_dir);
|
||||||
} else {
|
} else {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
|
if (OPAL_ERR_NOT_FOUND == opal_os_dirpath_access(job_session_dir, 0)) {
|
||||||
|
opal_output(0, "sess_dir_finalize: job session dir does not exist");
|
||||||
|
} else {
|
||||||
opal_output(0, "sess_dir_finalize: job session dir not empty - leaving");
|
opal_output(0, "sess_dir_finalize: job session dir not empty - leaving");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -655,9 +633,13 @@ orte_session_dir_finalize(orte_process_name_t *proc)
|
|||||||
rmdir(tmp);
|
rmdir(tmp);
|
||||||
} else {
|
} else {
|
||||||
if (orte_debug_flag) {
|
if (orte_debug_flag) {
|
||||||
|
if (OPAL_ERR_NOT_FOUND == opal_os_dirpath_access(tmp, 0)) {
|
||||||
|
opal_output(0, "sess_dir_finalize: top session dir does not exist");
|
||||||
|
} else {
|
||||||
opal_output(0, "sess_dir_finalize: top session dir not empty - leaving");
|
opal_output(0, "sess_dir_finalize: top session dir not empty - leaving");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP:
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user