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_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    /* Create a symlink to the file rather than copying it, if possible. */
00041 #define WORK_QUEUE_PREEXIST 4   /* If the filename already exists on the host, use it in place. */
00042 #define WORK_QUEUE_THIRDGET 8   /* Access the file on the client from a shared filesystem */
00043 #define WORK_QUEUE_THIRDPUT 8   /* Access the file on the client from a shared filesystem (included for readability) */
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

Generated on 11 Feb 2013 for cctools by  doxygen 1.6.1