WorkflowTask.h
1 
10 #ifndef WRENCH_WORKFLOWTASK_H
11 #define WRENCH_WORKFLOWTASK_H
12 
13 #include <map>
14 #include <stack>
15 #include <set>
16 
17 #include "wrench/workflow/job/WorkflowJob.h"
18 #include "wrench/workflow/WorkflowFile.h"
19 #include "wrench/workflow/parallel_model/ParallelModel.h"
20 #include "wrench/workflow/parallel_model/AmdahlParallelModel.h"
21 #include "wrench/workflow/parallel_model/ConstantEfficiencyParallelModel.h"
22 #include "wrench/workflow/parallel_model/CustomParallelModel.h"
23 
24 #include <boost/graph/adjacency_list.hpp>
25 
26 namespace wrench {
27 
31  class WorkflowTask {
32 
33  public:
34  std::string getID() const;
35 
36  double getFlops() const;
37 
38  unsigned long getMinNumCores() const;
39 
40  unsigned long getMaxNumCores() const;
41 
42  std::shared_ptr<ParallelModel> getParallelModel();
43 
44  void setParallelModel(std::shared_ptr<ParallelModel> model);
45 
46  double getMemoryRequirement() const;
47 
48  unsigned long getNumberOfChildren() const;
49 
50  std::vector<WorkflowTask *> getChildren() const;
51 
52  unsigned long getNumberOfParents() const;
53 
54  std::vector<WorkflowTask *> getParents() const;
55 
56  void addInputFile(WorkflowFile *file);
57 
58  void addOutputFile(WorkflowFile *file);
59 
60  unsigned int getFailureCount();
61 
62 
63  /***********************/
65  /***********************/
66 
68  enum State {
79  };
80 
81  static std::string stateToString(WorkflowTask::State state);
82 
83  WorkflowJob *getJob() const;
84 
85  Workflow *getWorkflow() const;
86 
87  std::string getClusterID() const;
88 
89  void setClusterID(std::string);
90 
91  void setPriority(long);
92 
93  unsigned long getPriority() const;
94 
95  void setAverageCPU(double);
96 
97  double getAverageCPU() const;
98 
99  void setBytesRead(unsigned long);
100 
101  unsigned long getBytesRead() const;
102 
103  void setBytesWritten(unsigned long);
104 
105  unsigned long getBytesWritten() const;
106 
107  std::vector<WorkflowFile *> getInputFiles();
108 
109  std::vector<WorkflowFile *> getOutputFiles();
110 
111  unsigned long getTopLevel();
112 
113  double getStartDate();
114 
115  double getEndDate();
116 
117  double getFailureDate();
118 
119  double getTerminationDate();
120 
121  double getReadInputStartDate();
122 
123  double getReadInputEndDate();
124 
125  double getComputationStartDate();
126 
127  double getComputationEndDate();
128 
129  double getWriteOutputStartDate();
130 
131  double getWriteOutputEndDate();
132 
133  unsigned long getNumCoresAllocated();
134 
135  struct WorkflowTaskExecution;
136 
137  std::stack<WorkflowTaskExecution> getExecutionHistory();
138 
139  std::string getExecutionHost();
140 
141  std::string getPhysicalExecutionHost();
142 
144 
145  std::string getColor();
146 
147  void setColor(std::string);
148 
149  /***********************/
151  /***********************/
152 
153 
154  /***********************/
156  /***********************/
157 
160  TASK_NOT_READY,
161  TASK_READY,
162  TASK_RUNNING,
163  TASK_COMPLETED,
164  TASK_FAILED
165  };
166 
167  static std::string stateToString(WorkflowTask::InternalState state);
168 
169  unsigned long updateTopLevel();
170 
172 
174 
176 
178 
180 
181  void setJob(WorkflowJob *job);
182 
183  void setStartDate(double date);
184 
185  void setEndDate(double date);
186 
187  void setReadInputStartDate(double date);
188 
189  void setReadInputEndDate(double date);
190 
191  void setComputationStartDate(double date);
192 
193  void setComputationEndDate(double date);
194 
195  void setWriteOutputStartDate(double date);
196 
197  void setWriteOutputEndDate(double date);
198 
199  void setFailureDate(double date);
200 
201  void setTerminationDate(double date);
202 
203  void incrementFailureCount();
204 
205  void setExecutionHost(std::string hostname);
206 
207  void setNumCoresAllocated(unsigned long num_cores);
208 
214  double task_start = -1.0;
216  double read_input_start = -1.0;
218  double read_input_end = -1.0;
220  double computation_start = -1.0;
222  double computation_end = -1.0;
224  double write_output_start = -1.0;
226  double write_output_end = -1.0;
228  double task_end = -1.0;
230  double task_failed = -1.0;
232  double task_terminated = -1.0;
233 
235  std::string execution_host = "";
237  std::string physical_execution_host = "";
239  unsigned long num_cores_allocated = 0;
240 
247 
248 
249  };
250 
251 
252  /***********************/
254  /***********************/
255 
256  private:
257  friend class Workflow;
258 
259  std::string id; // Task ID
260  std::string cluster_id; // ID for clustered task
261  std::string color; // A RGB color formatted as "#rrggbb"
262  double flops; // Number of flops
263  double average_cpu = -1; // Average CPU utilization
264  unsigned long bytes_read = -1; // Total bytes read in KB
265  unsigned long bytes_written = -1; // Total bytes written in KB
266  unsigned long min_num_cores;
267  unsigned long max_num_cores;
268  std::shared_ptr<ParallelModel> parallel_model;
269  double memory_requirement;
270  unsigned long priority = 0; // Task priority
271  unsigned long toplevel; // 0 if entry task
272  unsigned int failure_count = 0; // Number of times the tasks has failed
273  std::string execution_host; // Host on which the task executed ("" if not executed successfully - yet)
274  State visible_state; // To be exposed to developer level
275  State upcoming_visible_state; // A visible state that will become active once a WMS has process a previously sent workflow execution event
276  InternalState internal_state; // Not to be exposed to developer level
277 
278  Workflow *workflow; // Containing workflow
279 
280  std::map<std::string, WorkflowFile *> output_files; // List of output files
281  std::map<std::string, WorkflowFile *> input_files; // List of input files
282 
283  // Private constructor (called by Workflow)
284  WorkflowTask(std::string id,
285  double t,
286  unsigned long min_num_cores,
287  unsigned long max_num_cores,
288  double memory_requirement);
289 
290  // Containing job
291  WorkflowJob *job;
292 
293  std::stack<WorkflowTaskExecution> execution_history;
294 
295  friend class DagOfTasks;
296  };
297 };
298 
299 #endif //WRENCH_WORKFLOWTASK_H
@ PENDING
Pending (has been submitted to a compute service)
Definition: WorkflowTask.h:74
std::shared_ptr< ParallelModel > getParallelModel()
Get the task's parallel model.
Definition: WorkflowTask.cpp:833
void setUpcomingState(WorkflowTask::State)
Set the upcoming visible state of the task.
Definition: WorkflowTask.cpp:338
@ READY
Ready (parents have completed)
Definition: WorkflowTask.h:72
double getComputationEndDate()
Get the task's most recent computation end date.
Definition: WorkflowTask.cpp:660
An internal class that uses the Boost Graph Library to implement a DAG of WorkflowTask objects.
Definition: DagOfTasks.h:50
std::string execution_host
Task's execution host (could be a virtual host)
Definition: WorkflowTask.h:235
void incrementFailureCount()
Increment the failure count of a task.
Definition: WorkflowTask.cpp:602
double write_output_end
Task's write output end time.
Definition: WorkflowTask.h:226
@ UNKNOWN
Some Unknown state (should not happen)
Definition: WorkflowTask.h:78
WorkflowTask::State getState() const
Get the state of the task.
Definition: WorkflowTask.cpp:198
std::string getID() const
Get the id of the task.
Definition: WorkflowTask.cpp:117
State
Task states.
Definition: WorkflowTask.h:68
unsigned long updateTopLevel()
Update the task's top level (looking only at the parents, and updating children)
Definition: WorkflowTask.cpp:716
void setComputationEndDate(double date)
Set the date when the computation portion of a WorkflowTask has ended.
Definition: WorkflowTask.cpp:484
double getAverageCPU() const
Get the task average CPU usage.
Definition: WorkflowTask.cpp:396
void setClusterID(std::string)
Set the cluster id for the task.
Definition: WorkflowTask.cpp:372
std::string getPhysicalExecutionHost()
Returns the name of the PHYSICAL host on which the task has most recently been executed,...
Definition: WorkflowTask.cpp:757
void setExecutionHost(std::string hostname)
Sets the host on which this task is running.If the hostname is a VM name, then the corresponding phys...
Definition: WorkflowTask.cpp:774
double read_input_end
Task's read input end time.
Definition: WorkflowTask.h:218
std::vector< WorkflowTask * > getChildren() const
Get the children of a task.
Definition: WorkflowTask.cpp:171
WorkflowTask::InternalState getInternalState() const
Get the state of the task (as known to the "internal" layer)
Definition: WorkflowTask.cpp:216
void setTerminationDate(double date)
Set the date when the task was terminated.
Definition: WorkflowTask.cpp:572
std::vector< WorkflowFile * > getOutputFiles()
Get the list of output WorkflowFile objects for the task.
Definition: WorkflowTask.cpp:623
void addInputFile(WorkflowFile *file)
Add an input file to the task.
Definition: WorkflowTask.cpp:57
void setNumCoresAllocated(unsigned long num_cores)
Sets the number of cores allocated for this task.
Definition: WorkflowTask.cpp:796
double write_output_start
Task's write output start time.
Definition: WorkflowTask.h:224
void setComputationStartDate(double date)
Set the date when the computation portion of a WorkflowTask has begun.
Definition: WorkflowTask.cpp:469
unsigned long getMaxNumCores() const
Get the maximum number of cores that the task can use.
Definition: WorkflowTask.cpp:144
double task_end
Task's end time.
Definition: WorkflowTask.h:228
unsigned long getNumberOfChildren() const
Get the number of children of a task.
Definition: WorkflowTask.cpp:162
std::string getColor()
Get the task's color ("" if none)
Definition: WorkflowTask.cpp:809
double read_input_start
Task's read input start time.
Definition: WorkflowTask.h:216
void setBytesWritten(unsigned long)
Set the number of bytes written by the task.
Definition: WorkflowTask.cpp:436
void setReadInputEndDate(double date)
Set the date when the read input portion of a WorkflowTask has completed.
Definition: WorkflowTask.cpp:514
void setFailureDate(double date)
Set the date when the task has failed.
Definition: WorkflowTask.cpp:558
double getWriteOutputStartDate()
Get the task's most recent write output start date.
Definition: WorkflowTask.cpp:684
double getStartDate()
Get the task's most recent start date.
Definition: WorkflowTask.cpp:636
Definition: Alarm.cpp:20
A workflow (to be executed by a WMS)
Definition: Workflow.h:34
@ COMPLETED
Completed (successfully completed)
Definition: WorkflowTask.h:76
static std::string stateToString(WorkflowTask::State state)
Convert task state to a string (useful for output, debugging, logging, etc.)
Definition: WorkflowTask.cpp:225
double getTerminationDate()
Get the tasks's most recent termination date (when it was explicitly requested to be terminated by th...
Definition: WorkflowTask.cpp:708
void setPriority(long)
Set the task priority.
Definition: WorkflowTask.cpp:388
unsigned long num_cores_allocated
Task's number of allocated cores.
Definition: WorkflowTask.h:239
unsigned long getMinNumCores() const
Get the minimum number of cores required for running the task.
Definition: WorkflowTask.cpp:135
unsigned long getBytesWritten() const
Get the number of bytes written by the task.
Definition: WorkflowTask.cpp:428
double task_failed
Task's failed time.
Definition: WorkflowTask.h:230
unsigned long getNumCoresAllocated()
Returns the number of cores allocated for this task's most recent execution or 0 if an execution atte...
Definition: WorkflowTask.cpp:765
Workflow * getWorkflow() const
Get the workflow that contains the task.
Definition: WorkflowTask.cpp:269
void setState(WorkflowTask::State)
Set the visible state of the task.
Definition: WorkflowTask.cpp:288
double computation_end
Task's computation end time.
Definition: WorkflowTask.h:222
double getWriteOutputEndDate()
Get the task's most recent write output end date.
Definition: WorkflowTask.cpp:692
void setParallelModel(std::shared_ptr< ParallelModel > model)
Set the task's parallel model.
Definition: WorkflowTask.cpp:825
A computational task in a Workflow.
Definition: WorkflowTask.h:31
double getEndDate()
Get the task's most recent end date.
Definition: WorkflowTask.cpp:644
double computation_start
Task's computation start time.
Definition: WorkflowTask.h:220
std::string physical_execution_host
Task's execution physucal host.
Definition: WorkflowTask.h:237
unsigned int getFailureCount()
Get the number of times a task has failed.
Definition: WorkflowTask.cpp:595
double getMemoryRequirement() const
Get the memory_manager_service requirement of the task.
Definition: WorkflowTask.cpp:153
A data structure that keeps track of a task's execution event times.
Definition: WorkflowTask.h:212
WorkflowTask::State getUpcomingState() const
Get the state of the task.
Definition: WorkflowTask.cpp:207
Abstraction of a job used for executing tasks in a Workflow.
Definition: WorkflowJob.h:34
void setBytesRead(unsigned long)
Set the number of bytes read by the task.
Definition: WorkflowTask.cpp:420
double getFailureDate()
Get the task's most recent failure date.
Definition: WorkflowTask.cpp:700
std::string getExecutionHost()
Returns the name of the host on which the task has most recently been executed, or "" if the task has...
Definition: WorkflowTask.cpp:748
void setStartDate(double date)
Set the task's start date.
Definition: WorkflowTask.cpp:445
WorkflowTaskExecution(double task_start)
Constructor.
Definition: WorkflowTask.h:246
void setJob(WorkflowJob *job)
Set the task's containing job.
Definition: WorkflowTask.cpp:347
unsigned long getPriority() const
Get the task priority. By default, priority is 0.
Definition: WorkflowTask.cpp:380
unsigned long getTopLevel()
Returns the task's top level (max number of hops on a reverse path up to an entry task....
Definition: WorkflowTask.cpp:739
std::string getClusterID() const
Get the cluster Id for the task.
Definition: WorkflowTask.cpp:363
unsigned long getBytesRead() const
Get the number of bytes read by the task.
Definition: WorkflowTask.cpp:412
InternalState
Task state enum.
Definition: WorkflowTask.h:159
@ NOT_READY
Not ready (parents have not completed)
Definition: WorkflowTask.h:70
double getComputationStartDate()
Get the tasks's most recent computation start date.
Definition: WorkflowTask.cpp:652
void setEndDate(double date)
Set the task's end date.
Definition: WorkflowTask.cpp:455
void setWriteOutputEndDate(double date)
Set the date when the write output portion of a WorkflowTask has completed.
Definition: WorkflowTask.cpp:544
std::stack< WorkflowTaskExecution > getExecutionHistory()
Get the execution history of this task.
Definition: WorkflowTask.cpp:586
void setInternalState(WorkflowTask::InternalState)
Set the internal state of the task.
Definition: WorkflowTask.cpp:278
double getReadInputStartDate()
Get the task's most recent read input start date.
Definition: WorkflowTask.cpp:668
std::vector< WorkflowTask * > getParents() const
Get the parents of a task.
Definition: WorkflowTask.cpp:189
void setReadInputStartDate(double date)
Set the date when the read input portion of a WorkflowTask has begun.
Definition: WorkflowTask.cpp:499
void setAverageCPU(double)
Set the task average CPU usage.
Definition: WorkflowTask.cpp:404
void addOutputFile(WorkflowFile *file)
Add an output file to the task.
Definition: WorkflowTask.cpp:87
WorkflowJob * getJob() const
Get the task's containing job.
Definition: WorkflowTask.cpp:355
double task_start
Task's start time.
Definition: WorkflowTask.h:214
unsigned long getNumberOfParents() const
Get the number of parents of a task.
Definition: WorkflowTask.cpp:180
void setWriteOutputStartDate(double date)
Set the date when the write output portion of a WorkflowTask has begun.
Definition: WorkflowTask.cpp:529
A data file used/produced by a WorkflowTask in a Workflow.
Definition: WorkflowFile.h:26
double getFlops() const
Get the number of flops of the task.
Definition: WorkflowTask.cpp:126
void setColor(std::string)
Set the task's color.
Definition: WorkflowTask.cpp:817
std::vector< WorkflowFile * > getInputFiles()
Get the list of input WorkflowFile objects for the task.
Definition: WorkflowTask.cpp:610
double getReadInputEndDate()
Get the task's most recent read input end date.
Definition: WorkflowTask.cpp:676
double task_terminated
Task's terminated time.
Definition: WorkflowTask.h:232