1
1
openmpi/src/util/session_dir.h

143 строки
7.1 KiB
C
Исходник Обычный вид История

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/** @file:
*
* Find and/or create Open MPI session directory.
*
* The orte_session_dir() function searches for a temporary directory
* that is used by the Open MPI system for storing system-critical
* information. For a given system and user, the function attempts to
* find (or create, if not found and create is requested) a directory
* that will be used to independently house information for multiple
* universes, as the user creates them. Thus, the function pursues a
* directory tree of the form:
*
* \par \em [prefix-dir] An absolute path that identifies a temporary
* directory that is read-write-execute accessible to everyone. The
* function first checks to see if the user has specified the [prefix]
* directory on the command line. If so, then the function will use
* that [prefix] if the access permissions are correct, or will return
* an error condition if not - the function will not search for
* alternative locations if the user provides the [prefix] name.
*
* \par If the [prefix] is not provided by the user, the function
* searches for a suitable directory in a specific order, taking the
* first option that meets the access permission requirement, using:
* (a) the "OMPI_PREFIX_ENV" environment variable; (b) the "TMPDIR"
* environment variable; and (c) the "TMP" environment variabley. If
* none of those environmental variables have been defined and/or the
* function was unable to create a suitable directory within any of
* them, then the function tries to use a default location of "/tmp",
* where the "/" represents the top-level directory of the local
* system. If none of these options are successful, the function
* returns an error code.
*
* \par \em [openmpi-sessions]-[user-id]@[host]:[batchid] This serves
* as a concentrator for all Open MPI session directories for this
* user on the local system. If it doesn't already exist, this
* directory is created with read-write-execute permissions
* exclusively restricted to the user. If it does exist, the access
* permissions are checked to ensure they are correct - if not, the
* program attempts to correct them. If they can't' be changed to the
* correct values, an error condition is returned. The [host] and
* [batchid] fields are included to provide uniqueness on shared file
* systems and batch schedulers, respectively.
*
* \par Note: The [prefix]/openmpi-sessions-[user-id]@[host]:[batchid]
* directory is left on the system upon termination of an application
* and/or an Open MPI universe for future use by the user. Thus, when
* checking a potential location for the directory, the
* orte_session_tree_init() function first checks to see if an
* appropriate directory already exists, and uses it if it does.
*
* \par \em [universe-name] A directory is created for the specified
* universe name. This is the directory that will be used to house all
* information relating to the specific universe. If the directory
* already exists (indicating that the user is joining an existing
* universe), then the function ensures that the user has exclusive
* read-write-execute permissions on the directory.
*
* \par \em [job] A directory is created for the specified job
* name. This will house all information relating to that specific
* job, including directories for each process within that job on this
* host.
*
* \par \em [process] A directory for the specific process, will house
* all information for that process.
*
* \par If \c create is \c true, the directory will be created and the
* proc_info structure will be updated. If proc_info is false,
*
*/
#include "orte_config.h"
/** @param create A boolean variable that indicates whether or not to
* create the specified directory. If set to "false",
* the function only checks to see if an existing
* directory can be found. This is typically used to
* locate an already existing universe for reconnection
* purposes. If set to "true", then the function
* creates the directory, if possible.
* @param prefix A string variable indicating where the user
* stipulated the directory should be found or
* placed. A value of "NULL" indicates that the user
* specified no location - hence, the function explores
* a range of "standard" locations.
* @param user Name of the user to whom the universe belongs. This will
* be used to build the name of the
* "openmpi-sessions-[user]@[host]:[batch]" branch of
* the directory tree.
* @param hostid Name of the host on which the session directory is
* being built. Used to build the name of the
* "openmpi-sessions-[user]@[host]:[batch]" branch of
* the directory tree. NULL indicates that the nodename
* found in orte_system_info is to be used.
* @param batchid Batch job name, used in batch scheduling
* systems. NULL indicates that the default of "0" is
* to be used.
* @param universe name of the universe being setup.
* @param job String version of the jobid for which a session
* directory is to be created/found. NULL indicates
* that only the universe directory is to be
* created/found.
* @param vpid String version of the vpid for which a session
* directory is to be created/found. NULL indicates
* that only the job directory is to be created/found.
*
* @retval OMPI_SUCCESS The directory was found and/or created with
* the proper permissions.
* @retval OMPI_ERROR The directory cannot be found (if create is
* "false") or created (if create is "true").
*/
OMPI_DECLSPEC int orte_session_dir(bool create, char *prefix, char *user, char *hostid,
char *batchid, char *universe, char *job, char *vpid);
/** The orte_session_dir_finalize() function performs a cleanup of the
* session directory tree. It first removes the session directory for
* the calling process. It then checks to see if the job-level session
* directory is now empty - if so, it removes that level as
* well. Finally, it checks to see if the universe-level session
* directory is now empty - if so, it also removes that level. This
* three-part "last-one-out" procedure ensures that the directory tree
* is properly removed if all processes and applications within a
* universe have completed.
*
* @param None
* @retval OMPI_SUCCESS If the directory tree is properly cleaned up.
* @retval OMPI_ERROR If something prevents the tree from being
* properly cleaned up.
*/
OMPI_DECLSPEC int orte_session_dir_finalize(void);