#ifndef SAGA_PM_MASTER_WORKER_ADVERT_HPP #define SAGA_PM_MASTER_WORKER_ADVERT_HPP #include "util.hpp" namespace saga_pm { namespace master_worker { //////////////////////////////////////////////////////////////////// // private representation of worker job. This class simplifies state // management on master side of things. // // worker adverts are rooted in the dir specified by the master, and are layed out // as follows: // // id : worker id (int) // serial, assigned by master, written once by worker // state : worker state (enum) // see above - != job state! // task : work to do (string) // only valid on state == Assigned // par_in : input parameters (vec ) // only valid on state == Assigned // par_out: input parameters (vec ) // only valid on state == Done // error : exception (string) // only valid on state == Failed // // FIXME: enforce state checks, even if costly // class advert { private: bool ok_; bool create_; state s_; saga::job::service js_; saga::job::job job_; saga::url url_; id_t id_; saga::advert::entry ad_; public: advert (void); advert (saga::url url); advert (saga::job::service js, saga::job::job job, saga::url url, id_t id); ~advert (void); void run (std::string c , argvec_t a ); void wait (void ); void dump (void ); void purge (void ); saga::job::job get_job (void ); id_t get_id (void ); // called by master and worker void set_state (state s ); // called by master and worker state get_state (void ); // called by master and worker void set_task (std::string t ); // called by master and worker std::string get_task (void ); // called by master and worker void set_par_in (argvec_t pi); // called by master argvec_t get_par_in (void ); // called by worker void set_par_out (argvec_t po); // called by worker argvec_t get_par_out (void ); // called by master void set_error (std::string e ); // called by worker std::string get_error (void ); // called by master }; } // namespace master_worker } // namespace saga_pm #endif // SAGA_PM_MASTER_WORKER_ADVERT_HPP