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 <sys/types.h>
00021 #include "timestamp.h"
00022 
00023 #define WORK_QUEUE_DEFAULT_PORT 9123  
00024 #define WORK_QUEUE_RANDOM_PORT  0    
00025 #define WORK_QUEUE_WAITFORTASK  -1    
00027 #define WORK_QUEUE_SCHEDULE_UNSET 0
00028 #define WORK_QUEUE_SCHEDULE_FCFS         1 
00029 #define WORK_QUEUE_SCHEDULE_FILES        2 
00030 #define WORK_QUEUE_SCHEDULE_TIME         3 
00031 #define WORK_QUEUE_SCHEDULE_RAND         4 
00033 #define WORK_QUEUE_TASK_ORDER_FIFO 0  
00034 #define WORK_QUEUE_TASK_ORDER_LIFO 1  
00036 #define WORK_QUEUE_INPUT  0     
00037 #define WORK_QUEUE_OUTPUT 1     
00039 #define WORK_QUEUE_NOCACHE 0    
00040 #define WORK_QUEUE_CACHE 1      
00041 #define WORK_QUEUE_SYMLINK 2    /* Create a symlink to the file rather than copying it, if possible. */
00042 #define WORK_QUEUE_PREEXIST 4   /* If the filename already exists on the host, use it in place. */
00043 #define WORK_QUEUE_THIRDGET 8   /* Access the file on the client from a shared filesystem */
00044 #define WORK_QUEUE_THIRDPUT 8   /* Access the file on the client from a shared filesystem (included for readability) */
00045 
00046 #define WORK_QUEUE_MASTER_MODE_STANDALONE 0 
00047 #define WORK_QUEUE_MASTER_MODE_CATALOG 1    
00049 #define WORK_QUEUE_DEFAULT_KEEPALIVE_INTERVAL 300  
00050 #define WORK_QUEUE_DEFAULT_KEEPALIVE_TIMEOUT 30    
00052 extern double wq_option_fast_abort_multiplier; 
00053 extern int wq_option_scheduler; 
00057 struct work_queue_task {
00058         char *tag;                      
00059         char *command_line;             
00060         int worker_selection_algorithm;           
00061         char *output;                   
00062         struct list *input_files;       
00063         struct list *output_files;      
00064         int taskid;                     
00065         int return_status;              
00066         int result;                     
00067         char *host;                     
00068         char *hostname;                 
00070         timestamp_t time_task_submit;   
00071         timestamp_t time_task_finish;   
00072         timestamp_t time_app_delay;      
00073         timestamp_t time_send_input_start;      
00074         timestamp_t time_send_input_finish;     
00075         timestamp_t time_execute_cmd_start;                 
00076         timestamp_t time_execute_cmd_finish;            
00077         timestamp_t time_receive_output_start;  
00078         timestamp_t time_receive_output_finish; 
00080         INT64_T total_bytes_transferred;
00081         timestamp_t total_transfer_time;    
00082         timestamp_t cmd_execution_time;    
00083 };
00084 
00087 struct work_queue_stats {
00088         int port;
00089         int priority;
00090         int workers_init;               
00091         int workers_ready;              
00092         int workers_busy;               
00093         int workers_cancelling; 
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 start_time;         
00104         timestamp_t total_send_time;    
00105         timestamp_t total_receive_time; 
00106         double efficiency;
00107         double idle_percentage;
00108         int capacity;
00109         int avg_capacity;
00110         int total_workers_connected;
00111 };
00112 
00113 
00117 
00124 struct work_queue_task *work_queue_task_create(const char *full_command);
00125 
00138 int work_queue_task_specify_file(struct work_queue_task *t, const char *local_name, const char *remote_name, int type, int flags);
00139 
00154 int work_queue_task_specify_file_piece(struct work_queue_task *t, const char *local_name, const char *remote_name, off_t start_byte, off_t end_byte, int type, int flags);
00155 
00166 int work_queue_task_specify_buffer(struct work_queue_task *t, const char *data, int length, const char *remote_name, int flags);
00167 
00180 int work_queue_task_specify_file_command(struct work_queue_task *t, const char *remote_name, const char *cmd, int type, int flags);
00181 
00188 void work_queue_task_specify_tag(struct work_queue_task *t, const char *tag);
00189 
00199 void work_queue_task_specify_algorithm(struct work_queue_task *t, int algo );
00200 
00205 void work_queue_task_delete(struct work_queue_task *t);
00206 
00208 
00212 
00229 struct work_queue *work_queue_create(int port);
00230 
00239 int work_queue_submit(struct work_queue *q, struct work_queue_task *t);
00240 
00255 struct work_queue_task *work_queue_wait(struct work_queue *q, int timeout);
00256 
00268 int work_queue_hungry(struct work_queue *q);
00269 
00277 int work_queue_empty(struct work_queue *q);
00278 
00285 int work_queue_port(struct work_queue *q);
00286 
00291 const char *work_queue_name(struct work_queue *q);
00292 
00297 void work_queue_get_stats(struct work_queue *q, struct work_queue_stats *s);
00298 
00305 char * work_queue_get_worker_summary( struct work_queue *q );
00306 
00312 int work_queue_activate_fast_abort(struct work_queue *q, double multiplier);
00313 
00325 void work_queue_specify_algorithm(struct work_queue *q, int algo);
00326 
00336 void work_queue_specify_task_order(struct work_queue *q, int order);
00337 
00342 void work_queue_specify_name(struct work_queue *q, const char *name);
00343 
00348 void work_queue_specify_priority(struct work_queue *q, int priority);
00349 
00354 void work_queue_specify_estimate_capacity_on(struct work_queue *q, int estimate_capacity_on);
00355 
00362 void work_queue_specify_master_mode(struct work_queue *q, int mode);
00363 
00369 struct work_queue_task *work_queue_cancel_by_taskid(struct work_queue *q, int id);
00370 
00376 struct work_queue_task *work_queue_cancel_by_tasktag(struct work_queue *q, const char *tag);
00377 
00382 int work_queue_shut_down_workers(struct work_queue *q, int n);
00383 
00388 void work_queue_delete(struct work_queue *q);
00389 
00394 void work_queue_specify_log(struct work_queue *q, const char *logfile);
00395 
00400 void work_queue_specify_keepalive_interval(struct work_queue *q, int interval);
00401 
00406 void work_queue_specify_keepalive_timeout(struct work_queue *q, int timeout);
00408 
00412 
00421 int work_queue_task_specify_input_buf(struct work_queue_task *t, const char *buf, int length, const char *rname);
00422 
00430 int work_queue_task_specify_input_file(struct work_queue_task *t, const char *fname, const char *rname);
00431 
00439 int work_queue_task_specify_input_file_do_not_cache(struct work_queue_task *t, const char *fname, const char *rname);
00440 
00448 int work_queue_task_specify_output_file(struct work_queue_task *t, const char *rname, const char *fname);
00449 
00457 int work_queue_task_specify_output_file_do_not_cache(struct work_queue_task *t, const char *rname, const char *fname);
00458 
00460 
00461 #endif

Generated on 18 Feb 2013 for cctools by  doxygen 1.4.7