protected:
virtual ~Storage() = default;
-
public:
/** @brief Callback signal fired when a new Storage is created */
static simgrid::xbt::signal<void(s4u::Storage&)> on_creation;
XBT_PUBLIC int simcall_sem_acquire_timeout(smx_sem_t sem, double max_duration);
/***************************** Storage **********************************/
-XBT_PUBLIC smx_activity_t simcall_io_start(sg_size_t size, sg_storage_t storage);
+#ifdef __cplusplus
+XBT_PUBLIC smx_activity_t simcall_io_start(std::string name, sg_size_t size, sg_storage_t storage);
+#endif
XBT_PUBLIC sg_size_t simcall_storage_read(surf_storage_t st, sg_size_t size);
XBT_PUBLIC sg_size_t simcall_storage_write(surf_storage_t fd, sg_size_t size);
/************************** MC simcalls **********************************/
#include "simgrid/kernel/resource/Action.hpp"
#include "src/simix/smx_io_private.hpp"
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_io);
+
simgrid::kernel::activity::IoImpl::IoImpl(std::string name, resource::Action* surf_action, s4u::Storage* storage)
: ActivityImpl(name), storage_(storage), surf_action_(surf_action)
{
XBT_DEBUG("Create exec %p", this);
}
+simgrid::kernel::activity::IoImpl::~IoImpl()
+{
+ if (surf_action_)
+ surf_action_->unref();
+ XBT_DEBUG("Destroy exec %p", this);
+}
+
void simgrid::kernel::activity::IoImpl::cancel()
{
XBT_VERB("This exec %p is canceled", this);
SIMIX_io_finish(this);
}
+/*************
+ * Callbacks *
+ *************/
+simgrid::xbt::signal<void(simgrid::kernel::activity::IoImplPtr)> simgrid::kernel::activity::IoImpl::on_creation;
+simgrid::xbt::signal<void(simgrid::kernel::activity::IoImplPtr)> simgrid::kernel::activity::IoImpl::on_completion;
Activity* Io::start()
{
- pimpl_ = simcall_io_start(size_, storage_);
+ pimpl_ = simcall_io_start("", size_, storage_);
state_ = State::STARTED;
return this;
}
return this;
}
-// Activity* Exec::wait()
-//{
-// simcall_execution_wait(pimpl_);
-// state_ = State::FINISHED;
-// return this;
-//}
-//
-// Activity* Exec::wait(double timeout)
-//{
-// THROW_UNIMPLEMENTED;
-// return this;
-//}
+Activity* Io::wait()
+{
+ // simcall_execution_wait(pimpl_);
+ state_ = State::FINISHED;
+ return this;
+}
+
+Activity* Io::wait(double timeout)
+{
+ THROW_UNIMPLEMENTED;
+ return this;
+}
//
///** @brief Returns whether the state of the exec is finished */
// bool Exec::test()
simgrid::kernel::activity::IoImplPtr SIMIX_io_start(std::string name, sg_size_t size, sg_storage_t storage)
{
/* set surf's action */
- simgrid::kernel::resource::Action* surf_action = storage->pimpl_->io_start(size);
+ // FIXME
+ simgrid::kernel::resource::Action* surf_action =
+ storage->get_impl()->io_start(size, (simgrid::surf::e_surf_action_storage_type_t)0);
simgrid::kernel::activity::IoImplPtr io =
simgrid::kernel::activity::IoImplPtr(new simgrid::kernel::activity::IoImpl(name, surf_action, storage));
smx_activity_t SIMIX_storage_read(surf_storage_t st, sg_size_t size)
{
- simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
- synchro->surf_action_ = st->read(size);
-
- synchro->surf_action_->set_data(synchro);
- XBT_DEBUG("Create io synchro %p", synchro);
-
- return synchro;
+ // simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
+ // synchro->surf_action_ = st->read(size);
+ //
+ // synchro->surf_action_->set_data(synchro);
+ // XBT_DEBUG("Create io synchro %p", synchro);
+ //
+ // return synchro;
+ return nullptr;
}
void simcall_HANDLER_storage_write(smx_simcall_t simcall, surf_storage_t st, sg_size_t size)
smx_activity_t SIMIX_storage_write(surf_storage_t st, sg_size_t size)
{
- simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
- synchro->surf_action_ = st->write(size);
- synchro->surf_action_->set_data(synchro);
- XBT_DEBUG("Create io synchro %p", synchro);
-
- return synchro;
+ // simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
+ // synchro->surf_action_ = st->write(size);
+ // synchro->surf_action_->set_data(synchro);
+ // XBT_DEBUG("Create io synchro %p", synchro);
+ //
+ // return synchro;
+ return nullptr;
}
void SIMIX_io_destroy(smx_activity_t synchro)
***********/
class StorageAction;
+/** @ingroup SURF_storage_interface
+ * @brief The possible type of action for the storage component
+ */
+enum e_surf_action_storage_type_t {
+ READ = 0, /**< Read a file */
+ WRITE /**< Write in a file */
+};
/*************
* Callbacks *
void turn_off() override;
void destroy(); // Must be called instead of the destructor
-
+ virtual simgrid::kernel::resource::Action* io_start(sg_size_t size, e_surf_action_storage_type_t type) = 0;
/**
* @brief Read a file
*
* Action *
**********/
-/** @ingroup SURF_storage_interface
- * @brief The possible type of action for the storage component
- */
-enum e_surf_action_storage_type_t {
- READ = 0, /**< Read a file */
- WRITE /**< Write in a file */
-};
-
/** @ingroup SURF_storage_interface
* @brief SURF storage action interface class
*/
simgrid::s4u::Storage::on_creation(this->piface_);
}
+StorageAction* StorageN11::io_start(sg_size_t size, e_surf_action_storage_type_t type)
+{
+ return new StorageN11Action(get_model(), size, is_off(), this, type);
+}
+
StorageAction* StorageN11::read(sg_size_t size)
{
return new StorageN11Action(get_model(), size, is_off(), this, READ);
StorageN11(StorageModel* model, std::string name, kernel::lmm::System* maxminSystem, double bread, double bwrite,
std::string type_id, std::string content_name, sg_size_t size, std::string attach);
virtual ~StorageN11() = default;
+ StorageAction* io_start(sg_size_t size, e_surf_action_storage_type_t type);
StorageAction* read(sg_size_t size);
StorageAction* write(sg_size_t size);
};