00001 #ifndef WORK_QUEUE_H
00002 #define WORK_QUEUE_H
00003
00014 #include "timestamp.h"
00015
00016 #define WORK_QUEUE_LINE_MAX 1024
00017 #define FNAME 0
00018 #define LITERAL 1
00019
00020 #define WAITFORTASK -1
00021
00023 struct task_file {
00024 short fname_or_literal;
00025 short cacheable;
00026 int length;
00027 void* payload;
00028 char* remote_name;
00029 };
00030
00033 struct work_queue_task {
00034 char *tag;
00035 char *program;
00036 char *args;
00037 char *output;
00038 struct list * standard_input_files;
00039 struct list * extra_staged_files;
00040 struct list * extra_created_files;
00041 char *command;
00042 int taskid;
00043 int result;
00044 char host[32];
00045 timestamp_t submit_time;
00046 timestamp_t start_time;
00047 timestamp_t finish_time;
00048 INT64_T total_bytes_transfered;
00049 timestamp_t total_transfer_time;
00050 };
00051
00054 struct work_queue_stats {
00055 int workers_init;
00056 int workers_ready;
00057 int workers_busy;
00058 int tasks_running;
00059 int tasks_waiting;
00060 int tasks_complete;
00061 int total_tasks_dispatched;
00062 int total_tasks_complete;
00063 int total_workers_joined;
00064 int total_workers_removed;
00065 };
00066
00071 struct work_queue * work_queue_create( int port , time_t stoptime);
00072
00076 void work_queue_delete( struct work_queue *q );
00077
00082 void work_queue_get_stats( struct work_queue *q, struct work_queue_stats *s );
00083
00089 struct work_queue_task * work_queue_wait( struct work_queue *q , time_t timeout);
00090
00095 void work_queue_submit( struct work_queue *q, struct work_queue_task *t );
00096
00100 void work_queue_task_delete( struct work_queue_task *t );
00101
00102
00103
00104
00109 struct work_queue_task * work_queue_task_create( const char* program, const char *args);
00110
00115 INT64_T work_queue_task_add_tag( struct work_queue_task* t, const char* tag);
00116
00121 INT64_T work_queue_task_add_standard_input_buf( struct work_queue_task* t, const char* buf, int length);
00122
00127 INT64_T work_queue_task_add_standard_input_file( struct work_queue_task* t, const char* fname);
00128
00134 INT64_T work_queue_task_add_extra_created_file( struct work_queue_task* t, const char* rname, const char* fname);
00135
00141 INT64_T work_queue_task_add_extra_staged_buf( struct work_queue_task* t, const char* buf, int length, const char* rname);
00142
00148 INT64_T work_queue_task_add_extra_staged_file( struct work_queue_task* t, const char* fname, const char* rname);
00149
00153 int work_queue_hungry (struct work_queue* q);
00154
00158 int work_queue_empty (struct work_queue* q);
00159
00164
00165
00166
00167
00172 int work_queue_shut_down_workers (struct work_queue* q, int n);
00173
00178
00179
00180
00181 #endif