10 #ifndef WRENCH_WORKFLOWTASK_H
11 #define WRENCH_WORKFLOWTASK_H
19 #include "wrench/job/Job.h"
20 #include "wrench/data_file/DataFile.h"
21 #include "wrench/workflow/parallel_model/ParallelModel.h"
22 #include "wrench/workflow/parallel_model/AmdahlParallelModel.h"
23 #include "wrench/workflow/parallel_model/ConstantEfficiencyParallelModel.h"
24 #include "wrench/workflow/parallel_model/CustomParallelModel.h"
26 #include <boost/graph/adjacency_list.hpp>
33 class WorkflowTask :
public std::enable_shared_from_this<WorkflowTask> {
36 const std::string&
getID()
const;
52 std::vector<std::shared_ptr<WorkflowTask>>
getChildren();
56 std::vector<std::shared_ptr<WorkflowTask>>
getParents();
64 std::shared_ptr<WorkflowTask> getSharedPtr() {
return this->shared_from_this(); }
111 std::vector<std::shared_ptr<DataFile>>
getInputFiles()
const;
139 struct WorkflowTaskExecution;
173 void updateReadiness();
175 static std::string
stateToString(WorkflowTask::InternalState state);
177 unsigned long updateTopLevel();
179 void setInternalState(WorkflowTask::InternalState);
187 WorkflowTask::InternalState getInternalState()
const;
189 void setJob(Job *job);
191 void setStartDate(
double date);
193 void updateStartDate(
double date);
195 void setEndDate(
double date);
197 void setReadInputStartDate(
double date);
199 void setReadInputEndDate(
double date);
201 void setComputationStartDate(
double date);
203 void setComputationEndDate(
double date);
205 void setWriteOutputStartDate(
double date);
207 void setWriteOutputEndDate(
double date);
209 void setFailureDate(
double date);
211 void setTerminationDate(
double date);
213 void incrementFailureCount();
215 void setExecutionHost(std::string hostname);
217 void setNumCoresAllocated(
unsigned long num_cores);
222 struct WorkflowTaskExecution {
224 double task_start = -1.0;
226 double read_input_start = -1.0;
228 double read_input_end = -1.0;
230 double computation_start = -1.0;
232 double computation_end = -1.0;
234 double write_output_start = -1.0;
236 double write_output_end = -1.0;
238 double task_end = -1.0;
240 double task_failed = -1.0;
242 double task_terminated = -1.0;
245 std::string execution_host =
"";
247 std::string physical_execution_host =
"";
249 unsigned long num_cores_allocated = 0;
256 WorkflowTaskExecution(
double task_start) : task_start(task_start) {}
267 friend class Workflow;
270 std::string cluster_id;
273 double average_cpu = -1;
274 unsigned long bytes_read = -1;
275 unsigned long bytes_written = -1;
276 unsigned long min_num_cores;
277 unsigned long max_num_cores;
278 std::shared_ptr<ParallelModel> parallel_model;
279 double memory_requirement;
280 unsigned long priority = 0;
281 unsigned long toplevel;
282 unsigned int failure_count = 0;
283 std::string execution_host;
285 State upcoming_visible_state;
286 InternalState internal_state;
288 std::shared_ptr<Workflow> workflow;
290 std::map<std::string, std::shared_ptr<DataFile>> output_files;
291 std::map<std::string, std::shared_ptr<DataFile>> input_files;
294 WorkflowTask(std::string
id,
296 unsigned long min_num_cores,
297 unsigned long max_num_cores,
298 double memory_requirement);
303 std::stack<WorkflowTaskExecution> execution_history;
305 friend class DagOfTasks;
309 #endif //WRENCH_WORKFLOWTASK_H
@ PENDING
Pending (has been submitted to a compute service)
Definition: WorkflowTask.h:78
std::vector< std::shared_ptr< DataFile > > getInputFiles() const
Get the list of input DataFile objects for the task.
Definition: WorkflowTask.cpp:611
@ READY
Ready (parents have completed)
Definition: WorkflowTask.h:76
void addInputFile(std::shared_ptr< DataFile >file)
Add an input file to the task.
Definition: WorkflowTask.cpp:57
std::stack< WorkflowTaskExecution > getExecutionHistory() const
Get the execution history of this task.
Definition: WorkflowTask.cpp:587
std::vector< std::shared_ptr< DataFile > > getOutputFiles() const
Get the list of output DataFile objects for the task.
Definition: WorkflowTask.cpp:624
@ UNKNOWN
Some Unknown state (should not happen)
Definition: WorkflowTask.h:82
WorkflowTask::State getState() const
Get the state of the task.
Definition: WorkflowTask.cpp:198
State
Task states.
Definition: WorkflowTask.h:72
std::shared_ptr< Workflow > getWorkflow() const
Get the workflow that contains the task.
Definition: WorkflowTask.cpp:291
Abstraction of a job used for executing tasks in a Workflow.
Definition: Job.h:34
std::string getStateAsString() const
Get the state of the task as a string.
Definition: WorkflowTask.cpp:207
double getAverageCPU() const
Get the task average CPU usage.
Definition: WorkflowTask.cpp:383
void setClusterID(std::string)
Set the cluster id for the task.
Definition: WorkflowTask.cpp:359
double getTerminationDate() const
Get the tasks's most recent termination date (when it was explicitly requested to be terminated by th...
Definition: WorkflowTask.cpp:709
const std::string & getID() const
Get the id of the task.
Definition: WorkflowTask.cpp:117
double getComputationStartDate() const
Get the tasks's most recent computation start date.
Definition: WorkflowTask.cpp:653
unsigned long getMaxNumCores() const
Get the maximum number of cores that the task can use.
Definition: WorkflowTask.cpp:144
void setBytesWritten(unsigned long)
Set the number of bytes written by the task.
Definition: WorkflowTask.cpp:423
Job * getJob() const
Get the task's containing job.
Definition: WorkflowTask.cpp:342
unsigned long getTopLevel() const
Returns the task's top level (max number of hops on a reverse path up to an entry task....
Definition: WorkflowTask.cpp:740
Definition: Action.cpp:28
@ COMPLETED
Completed (successfully completed)
Definition: WorkflowTask.h:80
static std::string stateToString(WorkflowTask::State state)
Convert task state to a string (useful for output, debugging, logging, etc.)
Definition: WorkflowTask.cpp:246
void setPriority(long)
Set the task priority.
Definition: WorkflowTask.cpp:375
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:415
double getFailureDate() const
Get the task's most recent failure date.
Definition: WorkflowTask.cpp:701
std::shared_ptr< ParallelModel > getParallelModel() const
Get the task's parallel model.
Definition: WorkflowTask.cpp:834
void setParallelModel(std::shared_ptr< ParallelModel > model)
Set the task's parallel model.
Definition: WorkflowTask.cpp:826
A computational task in a Workflow.
Definition: WorkflowTask.h:33
std::string getPhysicalExecutionHost() const
Returns the name of the PHYSICAL host on which the task has most recently been executed,...
Definition: WorkflowTask.cpp:758
unsigned long getNumberOfChildren()
Get the number of children of a task.
Definition: WorkflowTask.cpp:162
unsigned int getFailureCount()
Get the number of times a task has failed.
Definition: WorkflowTask.cpp:596
double getMemoryRequirement() const
Get the memory_manager_service requirement of the task.
Definition: WorkflowTask.cpp:153
unsigned long getNumberOfParents()
Get the number of parents of a task.
Definition: WorkflowTask.cpp:180
void setBytesRead(unsigned long)
Set the number of bytes read by the task.
Definition: WorkflowTask.cpp:407
double getStartDate() const
Get the task's most recent start date.
Definition: WorkflowTask.cpp:637
double getWriteOutputStartDate() const
Get the task's most recent write output start date.
Definition: WorkflowTask.cpp:685
std::string getExecutionHost() const
Returns the name of the host on which the task has most recently been executed, or "" if the task has...
Definition: WorkflowTask.cpp:749
std::vector< std::shared_ptr< WorkflowTask > > getChildren()
Get the children of a task.
Definition: WorkflowTask.cpp:171
double getReadInputStartDate() const
Get the task's most recent read input start date.
Definition: WorkflowTask.cpp:669
unsigned long getPriority() const
Get the task priority. By default, priority is 0.
Definition: WorkflowTask.cpp:367
std::string getClusterID() const
Get the cluster Id for the task.
Definition: WorkflowTask.cpp:350
unsigned long getBytesRead() const
Get the number of bytes read by the task.
Definition: WorkflowTask.cpp:399
std::vector< std::shared_ptr< WorkflowTask > > getParents()
Get the parents of a task.
Definition: WorkflowTask.cpp:189
void addOutputFile(std::shared_ptr< DataFile >file)
Add an output file to the task.
Definition: WorkflowTask.cpp:87
@ NOT_READY
Not ready (parents have not completed)
Definition: WorkflowTask.h:74
double getReadInputEndDate() const
Get the task's most recent read input end date.
Definition: WorkflowTask.cpp:677
double getWriteOutputEndDate() const
Get the task's most recent write output end date.
Definition: WorkflowTask.cpp:693
void setAverageCPU(double)
Set the task average CPU usage.
Definition: WorkflowTask.cpp:391
double getEndDate() const
Get the task's most recent end date.
Definition: WorkflowTask.cpp:645
unsigned long getNumCoresAllocated() const
Returns the number of cores allocated for this task's most recent execution or 0 if an execution atte...
Definition: WorkflowTask.cpp:766
double getFlops() const
Get the number of flops of the task.
Definition: WorkflowTask.cpp:126
std::string getColor() const
Get the task's color ("" if none)
Definition: WorkflowTask.cpp:810
void setColor(std::string)
Set the task's color.
Definition: WorkflowTask.cpp:818
double getComputationEndDate() const
Get the task's most recent computation end date.
Definition: WorkflowTask.cpp:661