1
1

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
Этот коммит содержится в:
Ralph Castain 2014-04-18 14:25:48 +00:00
родитель a6a245b5b5
Коммит 8d72633acf
4 изменённых файлов: 88 добавлений и 72 удалений

Просмотреть файл

@ -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
*/ */

Просмотреть файл

@ -379,11 +379,11 @@ int orte_session_dir(bool create,
/* /*
* Get the session directory full name * Get the session directory full name
*/ */
if( ORTE_SUCCESS != ( rc = orte_session_dir_get_name(&fulldirpath, if (ORTE_SUCCESS != (rc = orte_session_dir_get_name(&fulldirpath,
&local_prefix, &local_prefix,
&frontend, &frontend,
hostid, hostid,
batchid, proc) ) ) { batchid, proc))) {
if (ORTE_ERR_FATAL == rc) { if (ORTE_ERR_FATAL == rc) {
/* this indicates we should abort quietly */ /* this indicates we should abort quietly */
rc = ORTE_ERR_SILENT; rc = ORTE_ERR_SILENT;
@ -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);