Grid Community Toolkit  6.2.1541705016
globus_gram_job_manager.h
1 /*
2  * Copyright 1999-2009 University of Chicago
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
18 
19 #ifndef GLOBUS_GRAM_JOB_MANAGER_INCLUDE
20 #define GLOBUS_GRAM_JOB_MANAGER_INCLUDE
21 
22 /* Includes */
23 #include "globus_common.h"
24 #include "globus_gram_protocol.h"
25 #include "globus_rsl.h"
26 #include "globus_gass_cache.h"
27 #include "globus_gsi_credential.h"
28 
29 /* Defines */
30 
31 #define GLOBUS_GRAM_AUTHZ_CALLOUT_TYPE "globus_gram_jobmanager_authz"
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #define GLOBUS_GRAM_JOB_MANAGER_EXPIRATION_ATTR "expiration"
38 
40 extern globus_thread_key_t globus_i_gram_request_key;
41 
42 /* Type definitions */
43 typedef enum
44 {
45  GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL = 1 << 0,
46  GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR = 1 << 1,
47  GLOBUS_GRAM_JOB_MANAGER_LOG_WARN = 1 << 2,
48  GLOBUS_GRAM_JOB_MANAGER_LOG_INFO = 1 << 3,
49  GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG = 1 << 4,
50  GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE = 1 << 5
51 }
52 globus_gram_job_manager_log_level_t;
53 
54 typedef enum
55 {
56  GLOBUS_GRAM_JOB_MANAGER_STATE_START,
57  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE,
58  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED,
59  GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN,
60  GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT,
61  GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1,
62  GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2,
63  GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT,
64  GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT,
65  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END,
66  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED,
67  GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP,
68  GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP,
69  GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP,
70  GLOBUS_GRAM_JOB_MANAGER_STATE_DONE,
71  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED,
72  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT,
73  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE,
74  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED,
75  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP,
76  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP,
77  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP,
78  GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE,
79  GLOBUS_GRAM_JOB_MANAGER_STATE_STOP,
80  GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1,
81  GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2,
82  /* GLOBUS_GRAM_JOB_MANAGER_STATE_PROXY_REFRESH OBSOLETE STATE, */
83  GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2+2,
84  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1,
85  GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2
86  /* GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_PROXY_REFRESH OBSOLETE STATE */
87 }
88 globus_gram_jobmanager_state_t;
89 
90 typedef enum
91 {
92  GLOBUS_GRAM_JOB_MANAGER_STAGE_IN,
93  GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED,
94  GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT,
95  GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS
96 }
97 globus_gram_job_manager_staging_type_t;
98 
99 typedef enum
100 {
101  GLOBUS_GRAM_JOB_MANAGER_SIGNAL,
102  GLOBUS_GRAM_JOB_MANAGER_CANCEL,
103  GLOBUS_GRAM_JOB_MANAGER_PROXY_REFRESH
104 }
105 globus_gram_job_manager_query_type_t;
106 
107 typedef enum
108 {
109  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_CANCEL,
110  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_SIGNAL,
111  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_SUBMIT,
112  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_STAGE_OUT,
113  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_STAGE_IN,
114  GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_POLL
115 }
116 globus_gram_script_priority_level_t;
117 
118 typedef struct
119 {
120  globus_gram_script_priority_level_t priority_level;
121  uint64_t sequence;
122 }
123 globus_gram_script_priority_t;
124 
125 typedef struct
126 {
127  globus_gram_job_manager_staging_type_t
128  type;
129  globus_rsl_value_t * from;
130  char * evaled_from;
131  globus_rsl_value_t * to;
132  char * evaled_to;
133 }
134 globus_gram_job_manager_staging_info_t;
135 
136 typedef struct
137 {
141  globus_gram_job_manager_query_type_t
142  type;
155 
162  char * signal_arg;
171  globus_rsl_t * rsl;
172 
173  globus_gram_protocol_error_t failure_code;
174 
175  /* When doing a proxy refresh, the newly delegated credential */
176  gss_cred_id_t delegated_credential;
177 }
178 globus_gram_job_manager_query_t;
179 
185 typedef struct
186 {
187  /*
188  * -------------------------------------------------------------------
189  * Values derived from command-line options and configuration file
190  * -------------------------------------------------------------------
191  */
195  globus_bool_t kerberos;
199  char * globus_location;
203  char * target_globus_location;
211  char * jobmanager_type;
215  char * job_history_dir;
219  char * cache_location;
228  char * scratch_dir_base;
235  char * condor_arch;
242  char * condor_os;
244  char * globus_gatekeeper_host;
246  char * globus_gatekeeper_port;
248  char * globus_gatekeeper_subject;
250  char * globus_host_manufacturer;
252  char * globus_host_cputype;
254  char * globus_host_osname;
256  char * globus_host_osversion;
261  char * tcp_port_range;
266  char * tcp_source_range;
268  char * job_state_file_dir;
272  char * x509_cert_dir;
278  globus_list_t * extra_envvars;
282  char * seg_module;
286  char * auditing_dir;
288  char * globus_version;
290  globus_bool_t usage_disabled;
296  char * usage_targets;
306  globus_bool_t streaming_disabled;
312  int proxy_timeout;
317  int log_levels;
321  globus_bool_t syslog_enabled;
325  const char * log_pattern;
326 
327  /*
328  * -------------------------------------------------------------------
329  * Values derived from job manager environment
330  * -------------------------------------------------------------------
331  */
333  char * subject;
335  char * home;
337  char * logname;
339  char * hostname;
341  char * short_hostname;
346  char * service_tag;
352  char * job_dir_home;
357  globus_bool_t enable_callout;
358 }
359 globus_gram_job_manager_config_t;
360 
361 typedef struct
362 {
363  globus_callback_handle_t session_timer_handle;
364  char * jm_id;
365  globus_abstime_t jm_start_time;
366 
367  int count_total_done;
368  int count_total_failed;
369  int count_total_canceled;
370  int count_restarted;
371  int count_dryrun;
372  int count_peak_jobs;
373  int count_current_jobs;
374 } globus_i_gram_usage_tracker_t;
375 
376 typedef struct globus_i_gram_usage_job_tracker_s
377 {
378  globus_abstime_t unsubmitted_timestamp;
379  globus_abstime_t file_stage_in_timestamp;
380  globus_abstime_t pending_timestamp;
381  globus_abstime_t active_timestamp;
382  globus_abstime_t failed_timestamp;
383  globus_abstime_t file_stage_out_timestamp;
384  globus_abstime_t done_timestamp;
385  int restart_count;
386  int callback_count;
387  int status_count;
388  int register_count;
389  int unregister_count;
390  int signal_count;
391  int refresh_count;
392  int file_clean_up_count;
393  int file_stage_in_http_count;
394  int file_stage_in_https_count;
395  int file_stage_in_ftp_count;
396  int file_stage_in_gsiftp_count;
397  int file_stage_in_shared_http_count;
398  int file_stage_in_shared_https_count;
399  int file_stage_in_shared_ftp_count;
400  int file_stage_in_shared_gsiftp_count;
401  int file_stage_out_http_count;
402  int file_stage_out_https_count;
403  int file_stage_out_ftp_count;
404  int file_stage_out_gsiftp_count;
405  char * client_address;
406  char * user_dn;
407 } globus_i_gram_usage_job_tracker_t;
408 
409 typedef struct
410 {
412  char * client_addr;
414  globus_priority_q_t script_queue;
416  int script_slots_available;
418  globus_fifo_t script_handles;
419 }
420 globus_gram_job_manager_scripts_t;
421 
427 typedef struct globus_gram_job_manager_s
428 {
430  globus_gram_job_manager_config_t * config;
434  globus_bool_t seg_started;
435 
440  time_t seg_last_timestamp;
444  globus_callback_handle_t fork_callback_handle;
446  globus_list_t * validation_records;
448  time_t validation_record_timestamp;
450  globus_bool_t validation_file_exists[4];
452  char * url_base;
454  time_t cred_expiration_time;
458  globus_callback_handle_t proxy_expiration_timer;
460  globus_hashtable_t request_hash;
462  globus_hashtable_t job_id_hash;
464  globus_mutex_t mutex;
466  globus_cond_t cond;
469  int socket_fd;
471  globus_xio_handle_t active_job_manager_handle;
473  int lock_fd;
475  char * socket_path;
477  char * lock_path;
479  char * pid_path;
485  globus_list_t * scripts_per_client;
487  globus_fifo_t state_callback_fifo;
489  int state_callback_slots;
491  char * cred_path;
493  globus_callback_handle_t grace_period_timer;
495  globus_bool_t done;
496  globus_fifo_t seg_event_queue;
497  int seg_pause_count;
499  globus_bool_t stop;
501  globus_list_t * pending_restarts;
503  globus_callback_handle_t pending_restart_handle;
505  globus_i_gram_usage_tracker_t * usagetracker;
510  char * gt3_failure_message;
511  globus_xio_attr_t script_attr;
512 
517  globus_callback_handle_t expiration_handle;
518 
522  globus_callback_handle_t lockcheck_handle;
523 
527  globus_callback_handle_t idle_script_handle;
528 }
529 globus_gram_job_manager_t;
530 
534 typedef struct globus_gram_job_manager_request_s
535 {
537  globus_gram_job_manager_config_t * config;
539  globus_gram_job_manager_t * manager;
550 
558  globus_gram_protocol_job_state_t expected_terminal_state;
559 
566  time_t status_update_time;
567 
575  int failure_code;
576 
580  char * gt3_failure_message;
581 
585  char * gt3_failure_type;
586 
590  char * gt3_failure_source;
591 
595  char * gt3_failure_destination;
596 
603  int exit_code;
604 
611  int stop_reason;
612 
620  char * job_id_string;
628  char * original_job_id_string;
629 
635  unsigned int poll_frequency;
636 
643  globus_bool_t dry_run;
644 
645 
654  int two_phase_commit;
655 
660  int commit_extend;
662  time_t creation_time;
664  time_t queued_time;
666  char * cache_tag;
668  globus_symboltable_t symbol_table;
670  globus_rsl_t * rsl;
672  char * rsl_spec;
679  char * jm_restart;
686  char * uniq_id;
688  char * job_contact;
690  char * job_contact_path;
692  char * job_state_file;
694  char * scratch_dir_base;
701  char * scratchdir;
703  char * remote_io_url;
705  char * remote_io_url_file;
707  char * x509_user_proxy;
709  globus_mutex_t mutex;
711  globus_cond_t cond;
713  globus_list_t * client_contacts;
715  globus_list_t * stage_in_todo;
717  globus_list_t * stage_in_shared_todo;
719  globus_list_t * stage_out_todo;
721  globus_list_t * stage_stream_todo;
723  globus_gram_jobmanager_state_t jobmanager_state;
725  globus_gram_jobmanager_state_t restart_state;
730  globus_bool_t unsent_status_change;
732  globus_callback_handle_t poll_timer;
737  globus_fifo_t pending_queries;
739  char * job_dir;
744  globus_bool_t streaming_requested;
746  char * cache_location;
748  globus_gass_cache_t cache_handle;
750  char * job_history_file;
752  int job_history_status;
756  char * cached_stdout;
760  char * cached_stderr;
762  gss_ctx_id_t response_context;
764  char * old_job_contact;
768  globus_fifo_t seg_event_queue;
773  time_t seg_last_timestamp;
777  char * gateway_user;
781  globus_i_gram_usage_job_tracker_t job_stats;
782 
787  int job_log_level;
791  char * log_pattern;
792 }
793 globus_gram_jobmanager_request_t;
794 
795 typedef struct globus_gram_job_manager_ref_s
796 {
797  /* Local copy of the unique hashtable key */
798  char * key;
799  /* Pointer to manager */
800  globus_gram_job_manager_t * manager;
801  /* Pointer to the request, may be NULL if the request is swapped out of
802  * memory because there is no active reference to it
803  */
804  globus_gram_jobmanager_request_t * request;
805  /* Count of callbacks, queries, etc that refer to this job.
806  * When 0, the request is eligible for removal from memory.
807  */
808  int reference_count;
809  /* Timer to delay cleaning up unreferenced requests */
810  globus_callback_handle_t cleanup_timer;
811  /* Current job state, for status updates without having to reload */
813  /* Current job failure code, for status updates without having to reload */
814  int failure_code;
815  /* Job exit code */
816  int exit_code;
817  /* Number of times status query was processed while the job is swapped
818  * out
819  */
820  int status_count;
821  /*
822  * True if the job has been loaded from the state file at recovery
823  * time, but hasn't yet had its state machine started. In that case,
824  * we have to go to the TWO_PHASE_COMMITTED state unless the job has
825  * completed execution.
826  */
827  globus_bool_t loaded_only;
828 
835  time_t expiration_time;
836 
837  /* The following are used for the internal fakeseg stuff for condor*/
838 
843  time_t seg_last_timestamp;
847  globus_off_t seg_last_size;
848 }
849 globus_gram_job_manager_ref_t;
850 
851 /* globus_gram_job_manager_config.c */
852 int
853 globus_gram_job_manager_config_init(
854  globus_gram_job_manager_config_t * config,
855  int argc,
856  char ** argv);
857 
858 void
859 globus_gram_job_manager_config_destroy(
860  globus_gram_job_manager_config_t * config);
861 
862 int
863 globus_i_gram_parse_log_levels(
864  const char * unparsed_string,
865  int * log_levels,
866  char ** error_string);
867 
868 /* globus_gram_job_manager_request.c */
869 #ifdef DEBUG_THREADS
870 #define GlobusGramJobManagerRequestLock(request) \
871  do { \
872  globus_gram_job_manager_request_log( \
873  request, \
874  "JM: [tid=%ld] Locking request (%s:%d) %p\n", \
875  (long) globus_thread_self(), \
876  __FILE__, \
877  __LINE__, \
878  (request)); \
879  globus_mutex_lock(&(request)->mutex); \
880  } while (0)
881 
882 #define GlobusGramJobManagerRequestUnlock(request) \
883  do { \
884  globus_gram_job_manager_request_log( \
885  request, \
886  "JM: [tid=%ld] Unlocking request (%s:%d) %p\n", \
887  (long) globus_thread_self() \
888  __FILE__, \
889  __LINE__, \
890  (request)); \
891  globus_mutex_unlock(&(request)->mutex); \
892  } while (0)
893 #else
894 #define GlobusGramJobManagerRequestLock(request) \
895  globus_mutex_lock(&(request)->mutex)
896 #define GlobusGramJobManagerRequestUnlock(request) \
897  globus_mutex_unlock(&(request)->mutex)
898 #endif
899 
900 int
901 globus_gram_job_manager_request_init(
902  globus_gram_jobmanager_request_t ** request,
903  globus_gram_job_manager_t * manager,
904  char * rsl,
905  gss_cred_id_t delegated_credential,
906  gss_ctx_id_t response_ctx,
907  const char * peer_address,
908  globus_gsi_cred_handle_t peer_cred,
909  globus_bool_t reinit,
910  char ** old_job_contact,
911  globus_gram_jobmanager_request_t ** old_job_request,
912  char ** gt3_failure_message);
913 
914 void
915 globus_gram_job_manager_request_destroy(
916  globus_gram_jobmanager_request_t * request);
917 
918 void
919 globus_gram_job_manager_request_free(
920  globus_gram_jobmanager_request_t * request);
921 
922 int
923 globus_gram_job_manager_request_set_status(
924  globus_gram_jobmanager_request_t * request,
926 
927 int
928 globus_gram_job_manager_request_set_status_time(
929  globus_gram_jobmanager_request_t * request,
931  time_t valid_time);
932 
933 void
934 globus_gram_job_manager_request_log(
935  globus_gram_jobmanager_request_t * request,
936  globus_gram_job_manager_log_level_t level,
937  const char * format,
938  ...);
939 
940 int
941 globus_gram_job_manager_request_acct(
942  globus_gram_jobmanager_request_t * request,
943  const char * format,
944  ...);
945 
946 int
947 globus_gram_job_manager_symbol_table_populate(
948  globus_gram_jobmanager_request_t * request);
949 
950 int
951 globus_gram_job_manager_history_file_set(
952  globus_gram_jobmanager_request_t * request);
953 
954 int
955 globus_gram_job_manager_history_file_create(
956  globus_gram_jobmanager_request_t * request);
957 
958 int
959 globus_gram_job_manager_request_load(
960  globus_gram_job_manager_t * manager,
961  int http_body_fd,
962  int context_fd,
963  gss_cred_id_t credential,
964  const char * peer_address,
965  globus_gsi_cred_handle_t peer_cred_handle,
966  size_t content_length,
967  globus_gram_jobmanager_request_t ** request,
968  gss_ctx_id_t * context,
969  char ** contact,
970  int * job_state_mask,
971  char ** old_job_contact,
972  globus_gram_jobmanager_request_t ** old_job_request,
973  globus_bool_t * version_only,
974  char ** gt3_failure_message);
975 
976 int
977 globus_gram_job_manager_request_start(
978  globus_gram_job_manager_t * manager,
979  globus_gram_jobmanager_request_t * request,
980  int response_fd,
981  const char * client_contact,
982  int job_state_mask);
983 
984 void
985 globus_gram_job_manager_destroy_directory(
986  globus_gram_jobmanager_request_t * request,
987  const char * directory);
988 
989 int
990 globus_gram_job_manager_request_load_all(
991  globus_gram_job_manager_t * manager);
992 
993 int
994 globus_i_gram_request_stdio_update(
995  globus_gram_jobmanager_request_t * request,
996  globus_rsl_t * update_rsl);
997 
998 int
999 globus_i_gram_symbol_table_populate(
1000  globus_gram_job_manager_config_t * config,
1001  globus_symboltable_t * symbol_table);
1002 
1003 /* globus_gram_job_manager_validate.c */
1004 
1009 typedef enum
1010 {
1011  GLOBUS_GRAM_VALIDATE_JOB_SUBMIT = 1,
1012  GLOBUS_GRAM_VALIDATE_JOB_MANAGER_RESTART = 2,
1013  GLOBUS_GRAM_VALIDATE_STDIO_UPDATE = 4
1014 }
1015 globus_gram_job_manager_validation_when_t;
1016 
1017 extern
1018 int
1019 globus_gram_job_manager_validation_destroy(
1020  globus_list_t * validation_records);
1021 
1022 extern
1023 int
1024 globus_gram_job_manager_validate_rsl(
1025  globus_gram_jobmanager_request_t * request,
1026  globus_rsl_t * rsl,
1027  globus_gram_job_manager_validation_when_t
1028  when);
1029 
1030 /* globus_gram_job_manager_contact.c */
1031 int
1032 globus_gram_job_manager_contact_add(
1033  globus_gram_jobmanager_request_t * request,
1034  const char * contact,
1035  int job_state_mask);
1036 
1037 int
1038 globus_gram_job_manager_contact_remove(
1039  globus_gram_jobmanager_request_t * request,
1040  const char * contact);
1041 int
1042 globus_gram_job_manager_contact_list_free(
1043  globus_gram_jobmanager_request_t * request);
1044 
1045 void
1046 globus_gram_job_manager_contact_state_callback(
1047  globus_gram_jobmanager_request_t * request,
1048  globus_bool_t restart_state_machine);
1049 
1050 int
1051 globus_gram_job_manager_write_callback_contacts(
1052  globus_gram_jobmanager_request_t * request,
1053  FILE * fp);
1054 
1055 int
1056 globus_gram_job_manager_read_callback_contacts(
1057  globus_gram_jobmanager_request_t * request,
1058  FILE * fp);
1059 
1060 /* globus_gram_job_manager_state.c */
1061 extern
1062 const char * globus_i_gram_job_manager_state_strings[];
1063 
1064 int
1065 globus_gram_job_manager_read_request(
1066  globus_gram_job_manager_t * manager,
1067  int fd,
1068  size_t content_length,
1069  char ** rsl,
1070  char ** client_contact,
1071  int * job_state_mask,
1072  globus_bool_t * version_only);
1073 
1074 int
1075 globus_gram_job_manager_reply(
1076  globus_gram_jobmanager_request_t * request,
1077  globus_gram_job_manager_t * manager,
1078  int response_code,
1079  const char * job_contact,
1080  int response_fd,
1081  gss_ctx_id_t response_context,
1082  const char * gt3_failure_message);
1083 
1084 int
1085 globus_gram_job_manager_validate_username(
1086  globus_gram_jobmanager_request_t * request);
1087 
1088 int
1089 globus_gram_job_manager_state_machine_register(
1090  globus_gram_job_manager_t * manager,
1091  globus_gram_jobmanager_request_t * request,
1092  globus_reltime_t * delay);
1093 
1094 int
1095 globus_i_gram_remote_io_url_update(
1096  globus_gram_jobmanager_request_t * request);
1097 
1098 void
1099 globus_gram_job_manager_state_machine_callback(
1100  void * user_arg);
1101 
1102 /* globus_gram_job_manager_gsi.c */
1103 int
1104 globus_gram_job_manager_import_sec_context(
1105  globus_gram_job_manager_t * manager,
1106  int context_fd,
1107  gss_ctx_id_t * response_contextp);
1108 
1110 globus_gram_job_manager_gsi_used(
1111  globus_gram_jobmanager_request_t * request);
1112 
1113 int
1114 globus_gram_job_manager_gsi_register_proxy_timeout(
1115  globus_gram_job_manager_t * manager,
1116  gss_cred_id_t cred,
1117  int timeout,
1118  globus_callback_handle_t * callback_handle);
1119 
1120 int
1121 globus_gram_job_manager_gsi_get_subject(
1122  char ** subject_name);
1123 
1124 int
1125 globus_gram_job_manager_gsi_update_credential(
1126  globus_gram_job_manager_t * manager,
1127  globus_gram_jobmanager_request_t * request,
1128  gss_cred_id_t credential);
1129 
1130 int
1131 globus_gram_job_manager_gsi_write_credential(
1132  globus_gram_jobmanager_request_t * request,
1133  gss_cred_id_t credential,
1134  const char * path);
1135 
1136 int
1137 globus_gram_job_manager_gsi_update_proxy_timeout(
1138  globus_gram_job_manager_t * manager,
1139  gss_cred_id_t cred,
1140  int timeout,
1141  globus_callback_handle_t * callback_handle);
1142 
1143 int
1144 globus_gram_job_manager_gsi_relocate_proxy(
1145  globus_gram_jobmanager_request_t * request,
1146  const char * new_proxy);
1147 
1148 int
1149 globus_gram_job_manager_call_authz_callout(
1150  globus_gram_job_manager_config_t * config,
1151  gss_ctx_id_t request_context,
1152  gss_ctx_id_t authz_context,
1153  const char * uniq_id,
1154  const globus_rsl_t * rsl,
1155  const char * auth_type);
1156 
1157 int
1158 globus_gram_job_manager_authz_query(
1159  globus_gram_job_manager_t * manager,
1161  const char * uri,
1162  const char * auth_type);
1163 
1164 int
1165 globus_gram_gsi_get_dn_hash(
1166  gss_cred_id_t cred,
1167  unsigned long * hash);
1168 
1169 /* globus_gram_job_manager_query.c */
1170 void
1171 globus_gram_job_manager_query_callback(
1172  void * arg,
1174  globus_byte_t * buf,
1175  globus_size_t nbytes,
1176  int errorcode,
1177  char * uri);
1178 
1179 void
1180 globus_gram_job_manager_query_reply(
1181  globus_gram_jobmanager_request_t * request,
1182  globus_gram_job_manager_query_t * query);
1183 
1184 /* globus_gram_job_manager_staging.c */
1185 int
1186 globus_gram_job_manager_staging_create_list(
1187  globus_gram_jobmanager_request_t * request);
1188 
1189 int
1190 globus_gram_job_manager_streaming_list_replace(
1191  globus_gram_jobmanager_request_t * request);
1192 int
1193 globus_gram_job_manager_staging_remove(
1194  globus_gram_jobmanager_request_t * request,
1195  globus_gram_job_manager_staging_type_t
1196  type,
1197  char * from,
1198  char * to);
1199 
1200 int
1201 globus_gram_job_manager_staging_write_state(
1202  globus_gram_jobmanager_request_t * request,
1203  FILE * fp);
1204 int
1205 globus_gram_job_manager_staging_read_state(
1206  globus_gram_jobmanager_request_t * request,
1207  FILE * fp);
1208 
1209 void
1210 globus_gram_job_manager_staging_free_all(
1211  globus_gram_jobmanager_request_t * request);
1212 
1213 /* globus_gram_job_manager_rsl.c */
1214 globus_rsl_t *
1216  globus_rsl_t * base_rsl,
1217  globus_rsl_t * override_rsl);
1218 
1221  globus_rsl_t * rsl,
1222  const char * attribute);
1223 
1225 globus_gram_job_manager_rsl_need_stage_in(
1226  globus_gram_jobmanager_request_t * request);
1227 
1229 globus_gram_job_manager_rsl_need_stage_out(
1230  globus_gram_jobmanager_request_t * request);
1231 
1233 globus_gram_job_manager_rsl_need_file_cleanup(
1234  globus_gram_jobmanager_request_t * request);
1235 
1237 globus_gram_job_manager_rsl_need_scratchdir(
1238  globus_gram_jobmanager_request_t * request);
1239 
1241 globus_gram_job_manager_rsl_need_restart(
1242  globus_gram_jobmanager_request_t * request);
1243 
1244 int
1246  globus_rsl_t * ast_node,
1247  const char * var,
1248  const char * value);
1249 
1250 int
1252  globus_gram_jobmanager_request_t * request,
1253  char * attribute,
1254  char ** value);
1255 
1256 int
1258  globus_rsl_t * rsl,
1259  char * attribute);
1260 
1261 globus_rsl_t *
1262 globus_gram_job_manager_rsl_extract_relation(
1263  globus_rsl_t * rsl,
1264  const char * attribute);
1265 
1266 int
1267 globus_gram_job_manager_rsl_add_relation(
1268  globus_rsl_t * rsl,
1269  globus_rsl_t * relation);
1270 
1271 int
1272 globus_gram_job_manager_rsl_parse_value(
1273  char * value_string,
1274  globus_rsl_value_t ** rsl_value);
1275 
1276 int
1277 globus_gram_job_manager_rsl_evaluate_value(
1278  globus_symboltable_t * symbol_table,
1279  globus_rsl_value_t * value,
1280  char ** value_string);
1281 
1282 int
1283 globus_gram_job_manager_rsl_eval_string(
1284  globus_symboltable_t * symbol_table,
1285  const char * string,
1286  char ** value_string);
1287 
1288 int
1290  globus_rsl_t * rsl,
1291  const char * attribute,
1292  const char ** value_ptr);
1293 
1294 int
1296  globus_rsl_t * rsl,
1297  const char * attribute,
1298  globus_bool_t * value_ptr);
1299 
1300 int
1302  globus_rsl_t * rsl,
1303  const char * attribute,
1304  int * value_ptr);
1305 
1306 int
1308  globus_gram_jobmanager_request_t * request,
1309  globus_rsl_t * rsl,
1310  const char * attribute,
1311  const char * value);
1312 
1313 int
1315  globus_gram_jobmanager_request_t * request,
1316  globus_rsl_t * rsl,
1317  const char * source,
1318  const char * destination);
1319 
1320 /* globus_gram_job_manager_state_file.c */
1321 int
1322 globus_gram_job_manager_state_file_set(
1323  globus_gram_jobmanager_request_t * request,
1324  char ** state_file);
1325 
1326 int
1327 globus_gram_job_manager_file_lock(
1328  int fd);
1329 
1330 int
1331 globus_gram_job_manager_state_file_read(
1332  globus_gram_jobmanager_request_t * request);
1333 int
1334 globus_gram_job_manager_state_file_write(
1335  globus_gram_jobmanager_request_t * request);
1336 
1337 int
1338 globus_gram_job_manager_state_file_register_update(
1339  globus_gram_jobmanager_request_t * request);
1340 
1341 /* globus_gram_job_manager_script.c */
1342 int
1343 globus_gram_job_manager_script_stage_in(
1344  globus_gram_jobmanager_request_t * request);
1345 int
1346 globus_gram_job_manager_script_stage_out(
1347  globus_gram_jobmanager_request_t * request);
1348 int
1349 globus_gram_job_manager_script_submit(
1350  globus_gram_jobmanager_request_t * request);
1351 int
1352 globus_gram_job_manager_script_poll(
1353  globus_gram_jobmanager_request_t * request);
1354 int
1355 globus_gram_job_manager_script_signal(
1356  globus_gram_jobmanager_request_t * request,
1357  globus_gram_job_manager_query_t * query);
1358 int
1359 globus_gram_job_manager_script_cancel(
1360  globus_gram_jobmanager_request_t * request,
1361  globus_gram_job_manager_query_t * query);
1362 
1364 globus_i_gram_job_manager_script_valid_state_change(
1365  globus_gram_jobmanager_request_t * request,
1367 
1368 void
1369 globus_gram_job_manager_script_close_all(
1370  globus_gram_job_manager_t * manager);
1371 
1372 void
1373 globus_gram_script_close_idle(
1374  void * arg);
1375 
1376 extern globus_xio_driver_t globus_i_gram_job_manager_popen_driver;
1377 extern globus_xio_stack_t globus_i_gram_job_manager_popen_stack;
1378 
1379 /* globus_gram_job_manager_seg.c */
1381 globus_gram_job_manager_init_seg(
1382  globus_gram_job_manager_t * request);
1383 
1385 globus_gram_job_manager_shutdown_seg(
1386  globus_gram_job_manager_t * manager);
1387 
1388 void
1389 globus_gram_job_manager_seg_handle_event(
1390  globus_gram_jobmanager_request_t * request);
1391 
1392 void
1393 globus_gram_job_manager_seg_pause(
1394  globus_gram_job_manager_t * manager);
1395 
1396 void
1397 globus_gram_job_manager_seg_resume(
1398  globus_gram_job_manager_t * manager);
1399 
1400 int
1401 globus_gram_job_manager_seg_parse_condor_id(
1402  globus_gram_jobmanager_request_t * request,
1403  char ** condor_id);
1404 
1405 /* globus_gram_job_manager_auditing.c */
1406 int
1407 globus_gram_job_manager_auditing_file_write(
1408  globus_gram_jobmanager_request_t * request);
1409 
1410 /* globus_gram_job_manager.c */
1411 #ifdef DEBUG_THREADS
1412 #define GlobusGramJobManagerLock(manager) \
1413  do { \
1414  globus_gram_job_manager_log( \
1415  manager, \
1416  "JM: [tid=%ld] Locking manager (%s:%d) %p\n", \
1417  (long) globus_thread_self() \
1418  __FILE__, \
1419  __LINE__, \
1420  (manager)); \
1421  globus_mutex_lock(&(manager)->mutex); \
1422  } while (0)
1423 
1424 #define GlobusGramJobManagerUnlock(manager) \
1425  do { \
1426  globus_gram_job_manager_log( \
1427  manager, \
1428  "JM: [tid=%d] Unlocking manager (%s:%d) %p\n", \
1429  (long) globus_thread_self() \
1430  __FILE__, \
1431  __LINE__, \
1432  (manager)); \
1433  globus_mutex_unlock(&(manager)->mutex); \
1434  } while (0)
1435 #define GlobusGramJobManagerWait(manager) \
1436  do { \
1437  globus_gram_job_manager_log( \
1438  manager, \
1439  GLOBUS_GRAM_LOG_TRACE, \
1440  "JM: [tid=%ld] Condition Wait: Unlocking manager (%s:%d) %p\n", \
1441  (long) globus_thread_self() \
1442  __FILE__, \
1443  __LINE__, \
1444  (manager)); \
1445  globus_cond_wait(&(manager)->cond, &(manager)->mutex); \
1446  globus_gram_job_manager_log( \
1447  manager, \
1448  GLOBUS_GRAM_LOG_TRACE, \
1449  "JM: [tid=%ld] Condition Wait Returns: Locking manager (%s:%d) %p\n", \
1450  (long) globus_thread_self() \
1451  __FILE__, \
1452  __LINE__, \
1453  (manager)); \
1454  } while (0)
1455 #else
1456 #define GlobusGramJobManagerLock(manager) \
1457  globus_mutex_lock(&(manager)->mutex)
1458 #define GlobusGramJobManagerUnlock(manager) \
1459  globus_mutex_unlock(&(manager)->mutex)
1460 #define GlobusGramJobManagerWait(manager) \
1461  globus_cond_wait(&(manager)->cond, &(manager)->mutex);
1462 #endif
1463 int
1464 globus_gram_job_manager_init(
1465  globus_gram_job_manager_t * manager,
1466  gss_cred_id_t cred,
1467  globus_gram_job_manager_config_t * config);
1468 
1469 void
1470 globus_gram_job_manager_destroy(
1471  globus_gram_job_manager_t * manager);
1472 
1473 void
1474 globus_gram_job_manager_log(
1475  globus_gram_job_manager_t * manager,
1476  globus_gram_job_manager_log_level_t level,
1477  const char * format,
1478  ...);
1479 
1480 int
1481 globus_gram_job_manager_add_request(
1482  globus_gram_job_manager_t * manager,
1483  const char * key,
1484  globus_gram_jobmanager_request_t * request);
1485 
1486 int
1487 globus_gram_job_manager_add_reference(
1488  globus_gram_job_manager_t * manager,
1489  const char * key,
1490  const char * reason,
1491  globus_gram_jobmanager_request_t ** request);
1492 
1493 int
1494 globus_gram_job_manager_remove_reference(
1495  globus_gram_job_manager_t * manager,
1496  const char * reason,
1497  const char * key);
1498 
1499 int
1500 globus_gram_job_manager_register_job_id(
1501  globus_gram_job_manager_t * manager,
1502  char * job_id,
1503  globus_gram_jobmanager_request_t * request,
1504  globus_bool_t prelocked);
1505 
1506 int
1507 globus_gram_job_manager_unregister_job_id(
1508  globus_gram_job_manager_t * manager,
1509  char * job_id);
1510 
1511 int
1512 globus_gram_job_manager_add_reference_by_jobid(
1513  globus_gram_job_manager_t * manager,
1514  const char * jobid,
1515  const char * reason,
1516  globus_gram_jobmanager_request_t ** request);
1517 
1518 int
1519 globus_gram_job_manager_get_job_id_list(
1520  globus_gram_job_manager_t * manager,
1521  globus_list_t ** job_id_list);
1522 
1524 globus_gram_job_manager_request_exists(
1525  globus_gram_job_manager_t * manager,
1526  const char * key);
1527 
1528 void
1529 globus_gram_job_manager_set_grace_period_timer(
1530  globus_gram_job_manager_t * manager);
1531 
1532 void
1533 globus_gram_job_manager_expire_old_jobs(
1534  void * arg);
1535 
1536 int
1537 globus_gram_job_manager_set_status(
1538  globus_gram_job_manager_t * manager,
1539  const char * key,
1541  int failure_code,
1542  int exit_code);
1543 
1544 int
1545 globus_gram_job_manager_get_status(
1546  globus_gram_job_manager_t * manager,
1547  const char * key,
1549  int * failure_code,
1550  int * exit_code);
1551 
1552 void
1553 globus_gram_job_manager_stop_all_jobs(
1554  globus_gram_job_manager_t * manager);
1555 
1556 int
1557 globus_gram_split_subjobs(
1558  const char * job_id,
1559  globus_list_t ** subjobs);
1560 
1561 int
1562 globus_i_gram_mkdir(
1563  char * path);
1564 /* globus_gram_job_manager_usagestats.c */
1565 
1567 globus_i_gram_usage_start_session_stats(
1568  globus_gram_job_manager_t * manager);
1569 
1571 globus_i_gram_usage_end_session_stats(
1572  globus_gram_job_manager_t * manager);
1573 
1574 void
1575 globus_i_gram_send_session_stats(
1576  globus_gram_job_manager_t * manager);
1577 
1578 void
1579 globus_i_gram_send_job_stats(
1580  globus_gram_jobmanager_request_t * request);
1581 
1582 void
1583 globus_i_gram_send_job_failure_stats(
1584  globus_gram_job_manager_t * manager,
1585  int rc);
1586 
1588 globus_i_gram_usage_stats_init(
1589  globus_gram_job_manager_t * manager);
1590 
1592 globus_i_gram_usage_stats_destroy(
1593  globus_gram_job_manager_t * manager);
1594 
1595 /* startup_socket.c */
1596 int
1597 globus_gram_job_manager_startup_lock(
1598  globus_gram_job_manager_t * manager,
1599  int * lock_fd);
1600 
1601 int
1602 globus_gram_job_manager_startup_socket_init(
1603  globus_gram_job_manager_t * manager,
1604  globus_xio_handle_t * handle,
1605  int * socket_fd);
1606 
1607 int
1608 globus_gram_job_manager_starter_send(
1609  globus_gram_job_manager_t * manager,
1610  int http_body_fd,
1611  int context_fd,
1612  int response_fd,
1613  gss_cred_id_t cred);
1614 
1615 int
1616 globus_gram_job_manager_starter_send_v2(
1617  globus_gram_job_manager_t * manager,
1618  gss_cred_id_t cred);
1619 
1620 extern globus_xio_driver_t globus_i_gram_job_manager_file_driver;
1621 extern globus_xio_stack_t globus_i_gram_job_manager_file_stack;
1622 
1623 /* tg_gateway.c */
1624 int
1625 globus_i_gram_get_tg_gateway_user(
1626  gss_ctx_id_t context,
1627  globus_gsi_cred_handle_t peer_cred,
1628  char ** gateway_user);
1629 
1630 
1631 /* logging.c */
1632 extern globus_logging_handle_t globus_i_gram_job_manager_log_stdio;
1633 extern globus_logging_handle_t globus_i_gram_job_manager_log_sys;
1634 
1635 extern
1636 void
1637 globus_i_job_manager_log_rotate(int sig);
1638 
1639 extern
1640 int
1641 globus_gram_job_manager_logging_init(
1642  globus_gram_job_manager_config_t * config);
1643 
1644 extern
1645 void
1646 globus_gram_job_manager_logging_destroy(void);
1647 
1648 extern
1649 char *
1650 globus_gram_prepare_log_string(
1651  const char * instr);
1652 
1653 extern char globus_i_gram_default_rvf[];
1654 
1655 #ifdef __cplusplus
1656 }
1657 #endif
1658 
1659 #endif /* GLOBUS_GRAM_JOB_MANAGER_INCLUDE */
1660 #endif /* ! GLOBUS_DONT_DOCUMENT_INTERNAL */
Globus GSI Credential Library.
int globus_gram_job_manager_rsl_attribute_get_boolean_value(globus_rsl_t *rsl, const char *attribute, globus_bool_t *value_ptr)
Definition: globus_gram_job_manager_rsl.c:1140
int globus_gram_rsl_add_output(globus_gram_jobmanager_request_t *request, globus_rsl_t *rsl, const char *attribute, const char *value)
Add an output attribute to an RSL.
Definition: globus_gram_job_manager_rsl.c:350
globus_gram_protocol_error_t
Definition: globus_gram_protocol_constants.h:25
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
struct globus_i_gass_cache_t * globus_gass_cache_t
GASS Cache Handle.
Definition: globus_gass_cache.h:84
int globus_callback_handle_t
Periodic callback handle.
Definition: globus_callback.h:102
struct globus_fifo_s * globus_fifo_t
Definition: globus_fifo.h:48
struct globus_l_gsi_cred_handle_s * globus_gsi_cred_handle_t
Definition: globus_gsi_credential.h:156
globus_gram_protocol_job_signal_t
Definition: globus_gram_protocol_constants.h:212
unsigned long globus_gram_protocol_handle_t
Unique GRAM protocol identifier.
Definition: globus_gram_protocol.h:72
int globus_gram_job_manager_rsl_remove_attribute(globus_rsl_t *rsl, char *attribute)
Remove an RSL attribute.
Definition: globus_gram_job_manager_rsl.c:781
GASS Cache API.
List data type.
Definition: globus_list.h:43
int globus_gram_job_manager_rsl_attribute_get_string_value(globus_rsl_t *rsl, const char *attribute, const char **value_ptr)
Definition: globus_gram_job_manager_rsl.c:1088
int globus_gram_job_manager_rsl_eval_one_attribute(globus_gram_jobmanager_request_t *request, char *attribute, char **value)
Definition: globus_gram_job_manager_rsl.c:829
globus_rsl_t * globus_gram_job_manager_rsl_merge(globus_rsl_t *base_rsl, globus_rsl_t *override_rsl)
Merge two sets of RSL relations.
Definition: globus_gram_job_manager_rsl.c:51
Mutex.
Definition: globus_thread.h:107
Condition variable.
Definition: globus_thread.h:124
Globus RSL Parsing.
size_t globus_size_t
Standard size of memory objectThe globus_size_t is the size of a memory object. It is identical to si...
Definition: globus_types.h:48
unsigned char globus_byte_t
Unsigned byte datatypeThis is used for byte-addressable arrays of arbitrary data which is not subject...
Definition: globus_types.h:85
Thread-specific data key.
Definition: globus_thread.h:201
Headers common to all of Globus.
uint32_t globus_result_t
Definition: globus_types.h:99
int globus_gram_job_manager_rsl_env_add(globus_rsl_t *ast_node, const char *var, const char *value)
Add an environment variable to the job RSL.
Definition: globus_gram_job_manager_rsl.c:686
Priority Queue Structure.
Definition: globus_priority_q.h:97
int globus_gram_job_manager_rsl_attribute_get_int_value(globus_rsl_t *rsl, const char *attribute, int *value_ptr)
Definition: globus_gram_job_manager_rsl.c:1193
int globus_gram_rsl_add_stream_out(globus_gram_jobmanager_request_t *request, globus_rsl_t *rsl, const char *source, const char *destination)
Add a stage out value to the RSL.
Definition: globus_gram_job_manager_rsl.c:471
globus_gram_protocol_job_state_t
Definition: globus_gram_protocol_constants.h:270
GRAM Protocol API.
globus_bool_t globus_gram_job_manager_rsl_attribute_exists(globus_rsl_t *rsl, const char *attribute)
Attribute exists in an RSL.
Definition: globus_gram_job_manager_rsl.c:105