#ifndef _SGE_FILE_PATH_H_ #define _SGE_FILE_PATH_H_ /*___INFO__MARK_BEGIN__*/ /************************************************************************* * * The Contents of this file are made available subject to the terms of * the Sun Industry Standards Source License Version 1.2 * * Sun Microsystems Inc., March, 2001 * * * Sun Industry Standards Source License Version 1.2 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.2 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2001 by Sun Microsystems, Inc. * * All Rights Reserved. * ************************************************************************/ /*___INFO__MARK_END__*/ #include "basis_types.h" #include "sge_dstring.h" #define COMMENT_CHAR '#' /****** uti/spool/sge_file_path_id_t ****************************************** * NAME * sge_file_path_id_t -- Type of filename or pathname * * SYNOPSIS * typedef enum { * JOBS_SPOOL_DIR, * JOB_SPOOL_DIR, * JOB_SPOOL_DIR_AS_FILE, * JOB_SPOOL_FILE, * TASKS_SPOOL_DIR, * TASK_SPOOL_DIR, * TASK_SPOOL_DIR_AS_FILE, * TASK_SPOOL_FILE, * PE_TASK_SPOOL_FILE, * JOB_SCRIPT_DIR, * JOB_SCRIPT_FILE, * JOB_ACTIVE_DIR * } sge_file_path_id_t; * * FUNCTION * Type of filename or pathname if no other sge_spool_flags_t * and/or sge_file_path_format_t are specified * with sge_get_file_path(): * * JOBS_SPOOL_DIR - "./jobs" * * JOB_SPOOL_DIR - "./jobs/xx/yyyy/zzzz" * zzzz is a directory * 'xxyyyyzzzz' is a job id * * JOB_SPOOL_DIR_AS_FILE - "./jobs/xx/yyyy/zzzz" * zzzz is a file * 'xxyyyyzzzz' is a job id * * JOB_SPOOL_FILE - "./jobs/xx/yyyy/zzzz/common" * * TASKS_SPOOL_DIR - "./jobs/xx/yyyy/zzzz/1-4096" * (example for task ids between 1 and 4096) * * TASK_SPOOL_DIR - "./jobs/xx/yyyy/zzzz/1-4096/1" * (example for task with id 1 (directory)) * * TASK_SPOOL_DIR_AS_FILE - "./jobs/xx/yyyy/zzzz/1-4096/1" * (example for task with id 1 (file)) * * TASK_SPOOL_FILE - "./jobs/xx/yyyy/zzzz/1-4096/1/common" * (example for task with id 1) * * PE_TASK_SPOOL_FILE - "./jobs/xx/yyyy/zzzz/1-4096/1/1" * (example for ja_task 1 pe_task 1) * * JOB_SCRIPT_DIR - "./job_scripts" * * JOB_SCRIPT_FILE - "./job_scripts/1234" * (if job id is 1234) * * JOB_ACTIVE_DIR - "./active_jobs" ******************************************************************************/ typedef enum { JOBS_SPOOL_DIR, JOB_SPOOL_DIR, JOB_SPOOL_DIR_AS_FILE, JOB_SPOOL_FILE, TASKS_SPOOL_DIR, TASK_SPOOL_DIR, TASK_SPOOL_DIR_AS_FILE, TASK_SPOOL_FILE, PE_TASK_SPOOL_FILE, JOB_SCRIPT_DIR, JOB_SCRIPT_FILE, JOB_ACTIVE_DIR } sge_file_path_id_t; /****** uti/spool/sge_spool_flags_t ******************************************* * NAME * sge_spool_flags_t -- Context information for spooling functions * * SYNOPSIS * typedef enum { * SPOOL_DEFAULT = 0x0000, * SPOOL_HANDLE_AS_ZOMBIE = 0x0001, * SPOOL_WITHIN_EXECD = 0x0002, * SPOOL_IGNORE_TASK_INSTANCES = 0x0004, * SPOOL_HANDLE_PARALLEL_TASKS = 0x0008, * } sge_spool_flags_t; * * FUNCTION * These constants are necessary to provide spooling functions * with context information where they are called and what they * should do. It depends on these spooling functions, how these * constants are interpreted. The documentation of these * routines may give you a more detailed description than you * may find here. * * SPOOL_DEFAULT - as it says the standard case * * SPOOL_HANDLE_AS_ZOMBIE - used mostly for jobs/array tasks * which are already finished and * stored in the list of zombie jobs. * * SPOOL_WITHIN_EXECD - Used for objects which are spooled * within the execd. * * SPOOL_IGNORE_TASK_INSTANCES - Dont't handle array tasks. * * SPOOL_HANDLE_PARALLEL_TASKS - Spool pe tasks individually. * * SPOOL_ONLY_JATASK - spool only the ja_task, neither job nor pe_tasks * * SPOOL_ONLY_PETASK - spool only the pe_task, neither job nor ja_task ******************************************************************************/ typedef enum { SPOOL_DEFAULT = 0x0000, SPOOL_HANDLE_AS_ZOMBIE = 0x0001, SPOOL_WITHIN_EXECD = 0x0002, SPOOL_IGNORE_TASK_INSTANCES = 0x0004, SPOOL_HANDLE_PARALLEL_TASKS = 0x0008, SPOOL_ONLY_JATASK = 0x0010, SPOOL_ONLY_PETASK = 0x0020 } sge_spool_flags_t; /****** uti/spool/sge_file_path_format_t ************************************** * NAME * sge_file_path_format_t -- Format of filename and pathname * * SYNOPSIS * typedef enum { * FORMAT_DEFAULT = 0x0000, * FORMAT_DOT_FILENAME = 0x0001, * FORMAT_FIRST_PART = 0x0002, * FORMAT_SECOND_PART = 0x0004, * FORMAT_THIRD_PART = 0x0008 * } sge_file_path_format_t; * * FUNCTION * These constants are used with sge_get_file_path() to retrieve * file and pathnames for objects which should be spooled onto * a filesystem. * * FORMAT_DEFAULT - as it says the default format * * FORMAT_DOT_FILENAME - insert a '.' in front of the filename * (e.g. '/path/path/.filename) * * FORMAT_FIRST_PART - first part of pathname (e.g /path) * * FORMAT_SECOND_PART - (e.g /path/part2) * * FORMAT_THIRD_PART - (e.g /path/part2/part3) ******************************************************************************/ typedef enum { FORMAT_DEFAULT = 0x0000, FORMAT_DOT_FILENAME = 0x0001, FORMAT_FIRST_PART = 0x0002, FORMAT_SECOND_PART = 0x0004, FORMAT_THIRD_PART = 0x0008 } sge_file_path_format_t; #if defined(CLASSIC_DEBUG) void sge_status_set_type(washing_machine_t type); void sge_status_next_turn(void); void sge_status_end_turn(void); typedef enum { STATUS_ROTATING_BAR, STATUS_DOTS } washing_machine_t; #endif typedef struct { const char *name; bool is_required; } bootstrap_entry_t; u_long32 sge_get_ja_tasks_per_directory(void); u_long32 sge_get_ja_tasks_per_file(void); char *sge_get_file_path(char *buffer, sge_file_path_id_t, sge_file_path_format_t format_flags, sge_spool_flags_t spool_flags, u_long32 ulong_val1, u_long32 ulong_val2, const char *string_val1); int sge_is_valid_filename2(const char *fname); int sge_is_valid_filename(const char *fname); int sge_spoolmsg_write(FILE *file, const char comment_char, const char *version); void sge_spoolmsg_append(dstring *ds, const char comment_char, const char *version); char *sge_get_confval(const char *conf_val, const char *file); int sge_get_confval_array(const char *fname, int n, int nmissing, bootstrap_entry_t name[], char value[][1025], dstring *error_dstring ); pid_t sge_readpid(const char *fname); void sge_write_pid(const char *pid_log_file); int sge_get_management_entry(const char *fname, int n, int nmissing, bootstrap_entry_t name[], char value[][SGE_PATH_MAX], dstring *error_dstring); /* get path to active_jobs directory (just for execd and shepherd) */ const char *sge_get_active_job_file_path(dstring *buffer, u_long32 job_id, u_long32 ja_task_id, const char *pe_task_id, const char *filename); #endif /* _SGE_FILE_PATH_H_ */