Commit 124d73fc authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Improve internal organization of transfer plugins

parent 74d6baa5
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -34,7 +34,9 @@
namespace norns {
namespace io {

task_info::task_info(const iotask_id tid, const iotask_type type,
task_info::task_info(const iotask_id tid, 
                     const iotask_type type,
                     const bool is_remote,
                     const auth::credentials& auth,
                     const backend_ptr src_backend, 
                     const resource_info_ptr src_rinfo,
@@ -43,6 +45,7 @@ task_info::task_info(const iotask_id tid, const iotask_type type,
                     const boost::any& ctx) :
    m_id(tid),
    m_type(type),
    m_is_remote(is_remote),
    m_auth(auth),
    m_src_backend(src_backend),
    m_src_rinfo(src_rinfo),
@@ -81,6 +84,11 @@ task_info::type() const {
    return m_type;
}

bool 
task_info::is_remote() const {
    return m_is_remote;
}

auth::credentials 
task_info::auth() const {
    return m_auth;
+55 −19
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ struct task_info {

    task_info(const iotask_id tid, 
              const iotask_type type, 
              const bool is_remote,
              const auth::credentials& creds,
              const backend_ptr src_backend, 
              const resource_info_ptr src_rinfo,
@@ -57,20 +58,44 @@ struct task_info {

    ~task_info();

    iotask_id id() const;
    iotask_type type() const;
    auth::credentials auth() const ;
    backend_ptr src_backend() const;
    resource_info_ptr src_rinfo() const;
    backend_ptr dst_backend() const;
    resource_info_ptr dst_rinfo() const;
    iotask_id 
    id() const;

    boost::any context() const;
    void set_context(const boost::any& ctx);
    iotask_type 
    type() const;

    task_status status() const;
    void update_status(const task_status st);
    void update_status(const task_status st, const urd_error ec,
    bool 
    is_remote() const;

    auth::credentials 
    auth() const ;

    backend_ptr 
    src_backend() const;

    resource_info_ptr 
    src_rinfo() const;

    backend_ptr 
    dst_backend() const;

    resource_info_ptr 
    dst_rinfo() const;

    boost::any 
    context() const;

    void 
    set_context(const boost::any& ctx);

    task_status 
    status() const;

    void 
    update_status(const task_status st);

    void 
    update_status(const task_status st, const urd_error ec,
                  const std::error_code& sc);

    urd_error 
@@ -79,13 +104,23 @@ struct task_info {
    std::error_code 
    sys_error() const;

    std::size_t sent_bytes() const;
    std::size_t total_bytes() const;
    double bandwidth() const;
    void update_bandwidth(std::size_t bytes, double usecs);
    void record_transfer(std::size_t bytes, double usecs);
    std::size_t 
    sent_bytes() const;

    std::size_t 
    total_bytes() const;

    double 
    bandwidth() const;

    void 
    update_bandwidth(std::size_t bytes, double usecs);

    void 
    record_transfer(std::size_t bytes, double usecs);

    task_stats stats() const;
    task_stats 
    stats() const;

    boost::shared_lock<boost::shared_mutex>
    lock_shared() const;
@@ -98,6 +133,7 @@ struct task_info {
    // task id and type
    const iotask_id m_id;
    const iotask_type m_type;
    const bool m_is_remote;

    // user credentials
    const auth::credentials m_auth;
+9 −4
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ task_manager::create_task(iotask_type type,

        auto it = m_task_info.end();
        std::tie(it, std::ignore) = m_task_info.emplace(tid,
                std::make_shared<task_info>(tid, type, auth, 
                std::make_shared<task_info>(tid, type, false, auth,
                                            src_backend, src_rinfo,
                                            dst_backend, dst_rinfo));
        return it->second;
@@ -326,7 +326,7 @@ task_manager::create_local_initiated_task(iotask_type type,

        auto it = m_task_info.end();
        std::tie(it, std::ignore) = m_task_info.emplace(tid,
                std::make_shared<task_info>(tid, type, auth, 
                std::make_shared<task_info>(tid, type, false, auth,
                                            src_backend, src_rinfo,
                                            dst_backend, dst_rinfo));
        return it->second;
@@ -431,15 +431,20 @@ task_manager::create_remote_initiated_task(iotask_type task_type,

        auto it = m_task_info.end();
        std::tie(it, std::ignore) = m_task_info.emplace(tid,
                std::make_shared<task_info>(tid, task_type, auth, 
                std::make_shared<task_info>(tid, task_type, true, auth, 
                                            src_backend, src_rinfo,
                                            dst_backend, dst_rinfo,
                                            ctx));
        return it->second;
    }();

    //auto tx_ptr = 
    //    m_transferor_registry.get(src_rinfo->type(), dst_rinfo->type());

    // XXX for a remote-initiated task the order of the types
    // is swapped
    auto tx_ptr = 
        m_transferor_registry.get(src_rinfo->type(), dst_rinfo->type());
        m_transferor_registry.get(dst_rinfo->type(), src_rinfo->type());

    if(!tx_ptr) {
        return std::make_tuple(urd_error::not_supported, boost::none);
+7 −1
Original line number Diff line number Diff line
@@ -80,7 +80,13 @@ task<iotask_type::remote_transfer>::operator()() {
        return;
    }

    if(m_task_info->is_remote()) {
        ec = m_transferor->accept_transfer(auth, m_task_info, src, dst);
    }
    else {
        ec = m_transferor->transfer(auth, m_task_info, src, dst);
    }


    if(ec) {
        log_error("Transfer failed");
+1 −0
Original line number Diff line number Diff line
@@ -243,6 +243,7 @@ local_path_to_local_path_transferor::accept_transfer(
    (void) src;
    (void) dst;

    LOGGER_ERROR("This function should never be called for this transfer type");
    return std::make_error_code(static_cast<std::errc>(0));
}

Loading