work_queue.h
Go to the documentation of this file.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_RANDOM_PORT 0
00024 #define WORK_QUEUE_WAITFORTASK -1
00026 #define WORK_QUEUE_SCHEDULE_UNSET 0
00027 #define WORK_QUEUE_SCHEDULE_FCFS 1
00028 #define WORK_QUEUE_SCHEDULE_FILES 2
00029 #define WORK_QUEUE_SCHEDULE_TIME 3
00030 #define WORK_QUEUE_SCHEDULE_RAND 4
00032 #define WORK_QUEUE_TASK_ORDER_FIFO 0
00033 #define WORK_QUEUE_TASK_ORDER_LIFO 1
00035 #define WORK_QUEUE_INPUT 0
00036 #define WORK_QUEUE_OUTPUT 1
00038 #define WORK_QUEUE_NOCACHE 0
00039 #define WORK_QUEUE_CACHE 1
00040 #define WORK_QUEUE_SYMLINK 2
00041 #define WORK_QUEUE_PREEXIST 4
00042 #define WORK_QUEUE_THIRDGET 8
00043 #define WORK_QUEUE_THIRDPUT 8
00044
00045 #define WORK_QUEUE_MASTER_MODE_STANDALONE 0
00046 #define WORK_QUEUE_MASTER_MODE_CATALOG 1
00048 extern double wq_option_fast_abort_multiplier;
00049 extern int wq_option_scheduler;
00053 struct work_queue_task {
00054 char *tag;
00055 char *command_line;
00056 int worker_selection_algorithm;
00057 char *output;
00058 struct list *input_files;
00059 struct list *output_files;
00060 int taskid;
00061 int return_status;
00062 int result;
00063 char *host;
00064 char *hostname;
00066 timestamp_t time_task_submit;
00067 timestamp_t time_task_finish;
00068 timestamp_t time_app_delay;
00069 timestamp_t time_send_input_start;
00070 timestamp_t time_send_input_finish;
00071 timestamp_t time_execute_cmd_start;
00072 timestamp_t time_execute_cmd_finish;
00073 timestamp_t time_receive_output_start;
00074 timestamp_t time_receive_output_finish;
00076 INT64_T total_bytes_transferred;
00077 timestamp_t total_transfer_time;
00078 timestamp_t cmd_execution_time;
00079 };
00080
00083 struct work_queue_stats {
00084 int port;
00085 int priority;
00086 int workers_init;
00087 int workers_ready;
00088 int workers_busy;
00089 int workers_cancelling;
00090 int tasks_running;
00091 int tasks_waiting;
00092 int tasks_complete;
00093 int total_tasks_dispatched;
00094 int total_tasks_complete;
00095 int total_workers_joined;
00096 int total_workers_removed;
00097 INT64_T total_bytes_sent;
00098 INT64_T total_bytes_received;
00099 timestamp_t start_time;
00100 timestamp_t total_send_time;
00101 timestamp_t total_receive_time;
00102 double efficiency;
00103 double idle_percentage;
00104 int capacity;
00105 int avg_capacity;
00106 int total_workers_connected;
00107 };
00108
00109
00113
00120 struct work_queue_task *work_queue_task_create(const char *full_command);
00121
00133 void work_queue_task_specify_file(struct work_queue_task *t, const char *local_name, const char *remote_name, int type, int flags);
00134
00144 void work_queue_task_specify_buffer(struct work_queue_task *t, const char *data, int length, const char *remote_name, int flags);
00145
00157 void work_queue_task_specify_file_command(struct work_queue_task *t, const char *remote_name, const char *cmd, int type, int flags);
00158
00165 void work_queue_task_specify_tag(struct work_queue_task *t, const char *tag);
00166
00176 void work_queue_task_specify_algorithm(struct work_queue_task *t, int algo );
00177
00182 void work_queue_task_delete(struct work_queue_task *t);
00183
00185
00189
00206 struct work_queue *work_queue_create(int port);
00207
00216 int work_queue_submit(struct work_queue *q, struct work_queue_task *t);
00217
00232 struct work_queue_task *work_queue_wait(struct work_queue *q, int timeout);
00233
00245 int work_queue_hungry(struct work_queue *q);
00246
00254 int work_queue_empty(struct work_queue *q);
00255
00262 int work_queue_port(struct work_queue *q);
00263
00268 const char *work_queue_name(struct work_queue *q);
00269
00274 void work_queue_get_stats(struct work_queue *q, struct work_queue_stats *s);
00275
00282 char * work_queue_get_worker_summary( struct work_queue *q );
00283
00289 int work_queue_activate_fast_abort(struct work_queue *q, double multiplier);
00290
00302 void work_queue_specify_algorithm(struct work_queue *q, int algo);
00303
00313 void work_queue_specify_task_order(struct work_queue *q, int order);
00314
00319 void work_queue_specify_name(struct work_queue *q, const char *name);
00320
00325 void work_queue_specify_priority(struct work_queue *q, int priority);
00326
00333 void work_queue_specify_master_mode(struct work_queue *q, int mode);
00334
00340 struct work_queue_task *work_queue_cancel_by_taskid(struct work_queue *q, int id);
00341
00347 struct work_queue_task *work_queue_cancel_by_tasktag(struct work_queue *q, const char *tag);
00348
00353 int work_queue_shut_down_workers(struct work_queue *q, int n);
00354
00359 void work_queue_delete(struct work_queue *q);
00360
00365 void work_queue_specify_log(struct work_queue *q, const char *logfile);
00366
00368
00372
00380 void work_queue_task_specify_input_buf(struct work_queue_task *t, const char *buf, int length, const char *rname);
00381
00388 void work_queue_task_specify_input_file(struct work_queue_task *t, const char *fname, const char *rname);
00389
00396 void work_queue_task_specify_input_file_do_not_cache(struct work_queue_task *t, const char *fname, const char *rname);
00397
00404 void work_queue_task_specify_output_file(struct work_queue_task *t, const char *rname, const char *fname);
00405
00412 void work_queue_task_specify_output_file_do_not_cache(struct work_queue_task *t, const char *rname, const char *fname);
00413
00415
00416 #endif