work_queue.h

Go to the documentation of this file.
00001 /*
00002 Copyright (C) 2008- The University of Notre Dame
00003 This software is distributed under the GNU General Public License.
00004 See the file COPYING for details.
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_DEFAULT 3   // default setting for queue.
00042 #define WORK_QUEUE_SCHEDULE_PREFERRED_HOSTS 4
00043 #define WORK_QUEUE_SCHEDULE_RAND 5
00044 #define WORK_QUEUE_SCHEDULE_MAX 5
00045 
00046 #define WORK_QUEUE_INPUT  0
00047 #define WORK_QUEUE_OUTPUT 1
00048 
00049 #define WORK_QUEUE_NOCACHE 0
00050 #define WORK_QUEUE_CACHE 1
00051 #define WORK_QUEUE_SYMLINK 2
00052 #define WORK_QUEUE_PREEXIST 4
00053 #define WORK_QUEUE_THIRDGET 8
00054 #define WORK_QUEUE_THIRDPUT 8   // THIRDPUT/THIRDGET identical flags, including both for readability
00055 
00056 #define WORK_QUEUE_MASTER_MODE_STANDALONE 0
00057 #define WORK_QUEUE_MASTER_MODE_CATALOG 1
00058 #define WORK_QUEUE_NAME_MAX 256
00059 #define WORK_QUEUE_MASTER_PRIORITY_MAX 100
00060 #define WORK_QUEUE_MASTER_PRIORITY_DEFAULT 10
00061 #define WORK_QUEUE_WORKER_MODE_SHARED 0
00062 #define WORK_QUEUE_WORKER_MODE_EXCLUSIVE 1
00063 #define WORK_QUEUE_CATALOG_LINE_MAX 1024
00064 #define WORK_QUEUE_CATALOG_UPDATE_INTERVAL 60
00065 #define WORK_QUEUE_CATALOG_LIFETIME     180
00066 
00067 #define WORK_QUEUE_FS_CMD 1
00068 #define WORK_QUEUE_FS_PATH 2
00069 #define WORK_QUEUE_FS_SYMLINK 3
00070 
00071 
00072 extern double wq_option_fast_abort_multiplier; 
00073 extern int wq_option_scheduler; 
00077 struct work_queue_task {
00078         char *tag;                      
00079         char *command_line;             
00080         int worker_selection_algorithm;           
00081         char *output;                   
00082         struct list *input_files;       
00083         struct list *output_files;      
00084         char *preferred_host;           
00085         int taskid;                     
00086         int status;     
00087         int return_status;              
00088         int result;                     
00089         char *host;                     
00090         timestamp_t submit_time;        
00091         timestamp_t start_time;         
00092         timestamp_t finish_time;        
00093         timestamp_t transfer_start_time;        
00094         timestamp_t computation_time;   
00095         INT64_T total_bytes_transferred;
00096         timestamp_t total_transfer_time;    
00097 };
00098 
00101 struct work_queue_stats {
00102         int workers_init;               
00103         int workers_ready;              
00104         int workers_busy;               
00105         int tasks_running;              
00106         int tasks_waiting;              
00107         int tasks_complete;             
00108         int total_tasks_dispatched;     
00109         int total_tasks_complete;       
00110         int total_workers_joined;       
00111         int total_workers_removed;      
00112         INT64_T total_bytes_sent;   
00113         INT64_T total_bytes_received;   
00114         timestamp_t total_send_time;
00115         timestamp_t total_receive_time;
00117 };
00118 
00122 
00126 struct work_queue_task *work_queue_task_create(const char *full_command);
00127 
00141 void work_queue_task_specify_file(struct work_queue_task *t, const char *local_name, const char *remote_name, int type, int flags);
00142 
00150 void work_queue_task_specify_buffer(struct work_queue_task *t, const char *data, int length, const char *remote_name, int flags);
00151 
00162 void work_queue_task_specify_file_command(struct work_queue_task *t, const char *remote_name, const char *cmd, int type, int flags);
00163 
00169 void work_queue_task_specify_tag(struct work_queue_task *t, const char *tag);
00170 
00175 int work_queue_task_specify_algorithm(struct work_queue_task *t, int alg);
00176 
00181 void work_queue_task_specify_preferred_host(struct work_queue_task *t, const char *hostname);
00182 
00186 void work_queue_task_delete(struct work_queue_task *t);
00187 
00189 
00193 
00210 struct work_queue *work_queue_create(int port);
00211 
00217 void work_queue_submit(struct work_queue *q, struct work_queue_task *t);
00218 
00224 struct work_queue_task *work_queue_wait(struct work_queue *q, int timeout);
00225 
00229 int work_queue_hungry(struct work_queue *q);
00230 
00234 int work_queue_empty(struct work_queue *q);
00235 
00240 int work_queue_port(struct work_queue *q);
00241 
00246 void work_queue_get_stats(struct work_queue *q, struct work_queue_stats *s);
00247 
00253 int work_queue_activate_fast_abort(struct work_queue *q, double multiplier);
00254 
00259 int work_queue_specify_algorithm(struct work_queue *q, int alg);
00260 
00265 int work_queue_specify_name(struct work_queue *q, const char *name);
00266 
00272 int work_queue_specify_priority(struct work_queue *q, int priority);
00273 
00281 int work_queue_specify_master_mode(struct work_queue *q, int mode);
00282 
00290 int work_queue_specify_worker_mode(struct work_queue *q, int mode);
00291 
00296 int work_queue_shut_down_workers(struct work_queue *q, int n);
00297 
00301 void work_queue_delete(struct work_queue *q);
00302 
00304 
00308 
00316 void work_queue_task_specify_input_buf(struct work_queue_task *t, const char *buf, int length, const char *rname);
00317 
00324 void work_queue_task_specify_input_file(struct work_queue_task *t, const char *fname, const char *rname);
00325 
00332 void work_queue_task_specify_input_file_do_not_cache(struct work_queue_task *t, const char *fname, const char *rname);
00333 
00340 void work_queue_task_specify_output_file(struct work_queue_task *t, const char *rname, const char *fname);
00341 
00348 void work_queue_task_specify_output_file_do_not_cache(struct work_queue_task *t, const char *rname, const char *fname);
00349 
00351 
00352 #endif
Generated on Sun Aug 14 20:55:54 2011 for cctools by  doxygen 1.6.3