Skip to content
Snippets Groups Projects
taskinstance.cpp 1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Ada Böhm's avatar
    Ada Böhm committed
    #include "taskinstance.h"
    #include "worker.h"
    
    #include "utils.h"
    #include "log.h"
    
    #include <sstream>
    
    using namespace loom;
    
    
    Ada Böhm's avatar
    Ada Böhm committed
    TaskInstance::~TaskInstance()
    {
    
    }
    
    
    Ada Böhm's avatar
    Ada Böhm committed
    const std::string TaskInstance::get_task_dir()
    {
        std::stringstream s;
        s << worker.get_work_dir() << get_id() << '/';
        std::string name = s.str();
        if (has_directory) {
            return name;
        }
    
        if (mkdir(name.c_str(), S_IRWXU)) {
            llog->critical("Cannot create directory {}", name);
            log_errno_abort("mkdir");
        }
    
        has_directory = true;
        return name;
    }
    
    
    Ada Böhm's avatar
    Ada Böhm committed
    void TaskInstance::fail(const std::string &error_msg)
    {
        worker.task_failed(*this, error_msg);
    }
    
    void TaskInstance::fail_libuv(const std::string &error_msg, int error_code)
    {
        std::stringstream s;
        s << error_msg << ": " << uv_strerror(error_code);
        fail(s.str());
    }
    
    
    Ada Böhm's avatar
    Ada Böhm committed
    void TaskInstance::finish(const std::shared_ptr<Data> &output)
    
    Ada Böhm's avatar
    Ada Böhm committed
    {
    
       assert(output);
    
    Ada Böhm's avatar
    Ada Böhm committed
       worker.publish_data(get_id(), output);
    
       assert(output);
       worker.task_finished(*this, *output);
    
    Ada Böhm's avatar
    Ada Böhm committed
    }