00001
00002
00003
00004
00005
00006
00007 #ifndef WORK_QUEUE_H
00008 #define WORK_QUEUE_H
00009
00020 #include "timestamp.h"
00021
00022 #define WORK_QUEUE_DEFAULT_PORT 9123
00023 #define WORK_QUEUE_LINE_MAX 1024
00024
00025 #define WORK_QUEUE_WAITFORTASK -1
00026
00027 #define WORK_QUEUE_RETURN_STATUS_UNSET -1
00028
00029 #define WORK_QUEUE_RESULT_UNSET 0
00030 #define WORK_QUEUE_RESULT_INPUT_FAIL 1
00031 #define WORK_QUEUE_RESULT_INPUT_MISSING 2
00032 #define WORK_QUEUE_RESULT_FUNCTION_FAIL 4
00033 #define WORK_QUEUE_RESULT_OUTPUT_FAIL 8
00034 #define WORK_QUEUE_RESULT_OUTPUT_MISSING 16
00035 #define WORK_QUEUE_RESULT_LINK_FAIL 32
00036
00037 #define WORK_QUEUE_SCHEDULE_UNSET 0 // default setting for task.
00038 #define WORK_QUEUE_SCHEDULE_FCFS 1
00039 #define WORK_QUEUE_SCHEDULE_FILES 2
00040 #define WORK_QUEUE_SCHEDULE_TIME 3
00041 #define WORK_QUEUE_SCHEDULE_MAX 3
00042 #define WORK_QUEUE_SCHEDULE_DEFAULT 3 // default setting for queue.
00043
00044 #define WORK_QUEUE_INPUT 0
00045 #define WORK_QUEUE_OUTPUT 1
00046
00047 #define WORK_QUEUE_NOCACHE 0
00048 #define WORK_QUEUE_CACHE 1
00049
00050
00051 #define WORK_QUEUE_MASTER_MODE_STANDALONE 0
00052 #define WORK_QUEUE_MASTER_MODE_CATALOG 1
00053 #define WORK_QUEUE_NAME_MAX 256
00054 #define WORK_QUEUE_MASTER_PRIORITY_MAX 100
00055 #define WORK_QUEUE_MASTER_PRIORITY_DEFAULT 10
00056 #define WORK_QUEUE_WORKER_MODE_SHARED 0
00057 #define WORK_QUEUE_WORKER_MODE_EXCLUSIVE 1
00058 #define WORK_QUEUE_CATALOG_LINE_MAX 1024
00059 #define WORK_QUEUE_CATALOG_UPDATE_INTERVAL 60
00060 #define WORK_QUEUE_CATALOG_LIFETIME 180
00061
00062 extern double wq_option_fast_abort_multiplier;
00063 extern int wq_option_scheduler;
00067 struct work_queue_task {
00068 char *tag;
00069 char *command_line;
00070 int worker_selection_algorithm;
00071 char *output;
00072 struct list * input_files;
00073 struct list * output_files;
00074 int taskid;
00075 int status;
00076 int return_status;
00077 int result;
00078 char* host;
00079 timestamp_t submit_time;
00080 timestamp_t start_time;
00081 timestamp_t finish_time;
00082 timestamp_t transfer_start_time;
00083 timestamp_t computation_time;
00084 INT64_T total_bytes_transferred;
00085 timestamp_t total_transfer_time;
00086 };
00087
00090 struct work_queue_stats {
00091 int workers_init;
00092 int workers_ready;
00093 int workers_busy;
00094 int tasks_running;
00095 int tasks_waiting;
00096 int tasks_complete;
00097 int total_tasks_dispatched;
00098 int total_tasks_complete;
00099 int total_workers_joined;
00100 int total_workers_removed;
00101 INT64_T total_bytes_sent;
00102 INT64_T total_bytes_received;
00103 timestamp_t total_send_time;
00104 timestamp_t total_receive_time;
00105 };
00106
00110
00114 struct work_queue_task * work_queue_task_create( const char *full_command);
00115
00126 void work_queue_task_specify_file( struct work_queue_task *t, const char *local_name, const char *remote_name, int type, int flags );
00127
00135 void work_queue_task_specify_buffer( struct work_queue_task *t, const char *data, int length, const char *remote_name, int flags );
00136
00142 void work_queue_task_specify_tag( struct work_queue_task *t, const char *tag );
00143
00148 int work_queue_task_specify_algorithm( struct work_queue_task *t, int alg );
00149
00153 void work_queue_task_delete( struct work_queue_task *t );
00154
00156
00160
00177 struct work_queue * work_queue_create( int port );
00178
00184 void work_queue_submit( struct work_queue *q, struct work_queue_task *t );
00185
00191 struct work_queue_task * work_queue_wait( struct work_queue *q, int timeout );
00192
00196 int work_queue_hungry (struct work_queue *q);
00197
00201 int work_queue_empty (struct work_queue *q);
00202
00207 int work_queue_port( struct work_queue *q );
00208
00213 void work_queue_get_stats( struct work_queue *q, struct work_queue_stats *s );
00214
00220 int work_queue_activate_fast_abort(struct work_queue* q, double multiplier );
00221
00226 int work_queue_specify_algorithm( struct work_queue* q, int alg );
00227
00232 int work_queue_specify_name( struct work_queue* q, const char *name );
00233
00239 int work_queue_specify_priority( struct work_queue* q, int priority );
00240
00248 int work_queue_specify_master_mode(struct work_queue* q, int mode);
00249
00257 int work_queue_specify_worker_mode(struct work_queue* q, int mode);
00258
00263 int work_queue_shut_down_workers (struct work_queue *q, int n);
00264
00268 void work_queue_delete( struct work_queue *q );
00269
00271
00275
00283 void work_queue_task_specify_input_buf( struct work_queue_task *t, const char *buf, int length, const char *rname);
00284
00291 void work_queue_task_specify_input_file( struct work_queue_task *t, const char *fname, const char *rname);
00292
00299 void work_queue_task_specify_input_file_do_not_cache( struct work_queue_task *t, const char *fname, const char *rname);
00300
00307 void work_queue_task_specify_output_file( struct work_queue_task *t, const char *rname, const char *fname);
00308
00315 void work_queue_task_specify_output_file_do_not_cache( struct work_queue_task* t, const char* rname, const char* fname);
00316
00318
00319 #endif