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_MAX 3
00042 #define WORK_QUEUE_SCHEDULE_DEFAULT 3 // default setting for queue.
00043 
00044 #define WORK_QUEUE_INPUT  0
00045 #define WORK_QUEUE_OUTPUT 1
00046 
00047 #define WORK_QUEUE_NOCACHE 0
00048 #define WORK_QUEUE_CACHE 1
00049 
00050 
00051 #define WORK_QUEUE_MASTER_MODE_STANDALONE 0
00052 #define WORK_QUEUE_MASTER_MODE_CATALOG 1
00053 #define WORK_QUEUE_NAME_MAX 256
00054 #define WORK_QUEUE_MASTER_PRIORITY_MAX 100
00055 #define WORK_QUEUE_MASTER_PRIORITY_DEFAULT 10
00056 #define WORK_QUEUE_WORKER_MODE_SHARED 0
00057 #define WORK_QUEUE_WORKER_MODE_EXCLUSIVE 1
00058 #define WORK_QUEUE_CATALOG_LINE_MAX 1024
00059 #define WORK_QUEUE_CATALOG_UPDATE_INTERVAL 60
00060 #define WORK_QUEUE_CATALOG_LIFETIME     180
00061 
00062 extern double wq_option_fast_abort_multiplier; 
00063 extern int wq_option_scheduler; 
00067 struct work_queue_task {
00068         char *tag;                      
00069         char *command_line;             
00070         int worker_selection_algorithm;           
00071         char *output;                   
00072         struct list * input_files;      
00073         struct list * output_files;     
00074         int taskid;                     
00075     int status;         
00076         int return_status;              
00077         int result;                     
00078         char* host;                     
00079         timestamp_t submit_time;        
00080         timestamp_t start_time;         
00081         timestamp_t finish_time;        
00082         timestamp_t transfer_start_time;        
00083     timestamp_t computation_time;       
00084     INT64_T total_bytes_transferred;    
00085         timestamp_t total_transfer_time;    
00086 };
00087 
00090 struct work_queue_stats {
00091         int workers_init;               
00092         int workers_ready;              
00093         int workers_busy;               
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 total_send_time;    
00104     timestamp_t total_receive_time; 
00105 };
00106 
00110 
00114 struct work_queue_task * work_queue_task_create( const char *full_command);
00115 
00126 void work_queue_task_specify_file( struct work_queue_task *t, const char *local_name, const char *remote_name, int type, int flags );
00127 
00135 void work_queue_task_specify_buffer( struct work_queue_task *t, const char *data, int length, const char *remote_name, int flags );
00136 
00142 void work_queue_task_specify_tag( struct work_queue_task *t, const char *tag );
00143 
00148 int work_queue_task_specify_algorithm( struct work_queue_task *t, int alg );
00149 
00153 void work_queue_task_delete( struct work_queue_task *t );
00154 
00156 
00160 
00177 struct work_queue * work_queue_create( int port );
00178 
00184 void work_queue_submit( struct work_queue *q, struct work_queue_task *t );
00185 
00191 struct work_queue_task * work_queue_wait( struct work_queue *q, int timeout );
00192 
00196 int work_queue_hungry (struct work_queue *q);
00197 
00201 int work_queue_empty (struct work_queue *q);
00202 
00207 int work_queue_port( struct work_queue *q );
00208 
00213 void work_queue_get_stats( struct work_queue *q, struct work_queue_stats *s );
00214 
00220 int work_queue_activate_fast_abort(struct work_queue* q, double multiplier );
00221 
00226 int work_queue_specify_algorithm( struct work_queue* q, int alg );
00227 
00232 int work_queue_specify_name( struct work_queue* q, const char *name );
00233 
00239 int work_queue_specify_priority( struct work_queue* q, int priority );
00240 
00248 int work_queue_specify_master_mode(struct work_queue* q, int mode);
00249 
00257 int work_queue_specify_worker_mode(struct work_queue* q, int mode);
00258 
00263 int work_queue_shut_down_workers (struct work_queue *q, int n);
00264 
00268 void work_queue_delete( struct work_queue *q );
00269 
00271 
00275 
00283 void work_queue_task_specify_input_buf( struct work_queue_task *t, const char *buf, int length, const char *rname);
00284 
00291 void work_queue_task_specify_input_file( struct work_queue_task *t, const char *fname, const char *rname);
00292 
00299 void work_queue_task_specify_input_file_do_not_cache( struct work_queue_task *t, const char *fname, const char *rname);
00300 
00307 void work_queue_task_specify_output_file( struct work_queue_task *t, const char *rname, const char *fname);
00308 
00315 void work_queue_task_specify_output_file_do_not_cache( struct work_queue_task* t, const char* rname, const char* fname);
00316 
00318 
00319 #endif

Generated on Wed May 4 15:09:45 2011 for cctools by  doxygen 1.4.7