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_RESULT_UNSET 0
00028 #define WORK_QUEUE_RESULT_INPUT_FAIL 1
00029 #define WORK_QUEUE_RESULT_FUNCTION_FAIL 2
00030 #define WORK_QUEUE_RESULT_OUTPUT_FAIL 3
00031
00032 #define WORK_QUEUE_SCHEDULE_UNSET 0 // default setting for task.
00033 #define WORK_QUEUE_SCHEDULE_FCFS 1
00034 #define WORK_QUEUE_SCHEDULE_FILES 2
00035 #define WORK_QUEUE_SCHEDULE_TIME 3
00036 #define WORK_QUEUE_SCHEDULE_MAX 3
00037 #define WORK_QUEUE_SCHEDULE_DEFAULT 3 // default setting for queue.
00038
00039
00040 extern double wq_option_fast_abort_multiplier;
00041 extern int wq_option_scheduler;
00045 struct work_queue_task {
00046 char *tag;
00047 char *command_line;
00048 int worker_selection_algorithm;
00049 char *output;
00050 struct list * input_files;
00051 struct list * output_files;
00052 int taskid;
00053 int return_status;
00054 int result;
00055 char* host;
00056 timestamp_t submit_time;
00057 timestamp_t start_time;
00058 timestamp_t finish_time;
00059 INT64_T total_bytes_transfered;
00060 timestamp_t total_transfer_time;
00061 };
00062
00065 struct work_queue_stats {
00066 int workers_init;
00067 int workers_ready;
00068 int workers_busy;
00069 int tasks_running;
00070 int tasks_waiting;
00071 int tasks_complete;
00072 int total_tasks_dispatched;
00073 int total_tasks_complete;
00074 int total_workers_joined;
00075 int total_workers_removed;
00076 };
00077
00083 struct work_queue * work_queue_create( int port , time_t stoptime);
00084
00088 void work_queue_delete( struct work_queue *q );
00089
00094 void work_queue_get_stats( struct work_queue *q, struct work_queue_stats *s );
00095
00101 int work_queue_activate_fast_abort(struct work_queue* q, double multiplier);
00102
00107 int work_queue_specify_scheduler( struct work_queue* q, int alg);
00108
00114 struct work_queue_task * work_queue_wait( struct work_queue *q, int timeout );
00115
00121 void work_queue_submit( struct work_queue *q, struct work_queue_task *t );
00122
00126 void work_queue_task_delete( struct work_queue_task *t );
00127
00131 struct work_queue_task * work_queue_task_create( const char *full_command);
00132
00138 void work_queue_task_specify_tag( struct work_queue_task *t, const char *tag );
00139
00144 int work_queue_task_specify_scheduler( struct work_queue_task *t, int alg );
00145
00152 void work_queue_task_specify_input_buf( struct work_queue_task *t, const char *buf, int length, const char *rname);
00153
00159 void work_queue_task_specify_input_file( struct work_queue_task *t, const char *fname, const char *rname);
00160
00166 void work_queue_task_specify_output_file( struct work_queue_task *t, const char *rname, const char *fname);
00167
00171 int work_queue_hungry (struct work_queue *q);
00172
00176 int work_queue_empty (struct work_queue *q);
00177
00182 int work_queue_shut_down_workers (struct work_queue *q, int n);
00183
00184 #endif