X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fa45ee4a5c6eb99a3d7bb445875d8035e492bdc7..f3677661714bf6122d678071c0bd44141417be14:/src/surf/workstation_interface.cpp diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index 9783d2a69a..ba19f668d3 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -9,6 +9,8 @@ #include "cpu_cas01.hpp" #include "simgrid/sg_config.h" +#include "network_interface.hpp" + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_workstation, surf, "Logging specific to the SURF workstation module"); @@ -20,8 +22,8 @@ WorkstationModelPtr surf_workstation_model = NULL; surf_callback(void, WorkstationPtr) workstationCreatedCallbacks; surf_callback(void, WorkstationPtr) workstationDestructedCallbacks; -surf_callback(void, WorkstationPtr) workstationStateChangedCallbacks; -surf_callback(void, WorkstationActionPtr) workstationActionStateChangedCallbacks; +surf_callback(void, WorkstationPtr, e_surf_resource_state_t, e_surf_resource_state_t) workstationStateChangedCallbacks; +surf_callback(void, WorkstationActionPtr, e_surf_action_state_t, e_surf_action_state_t) workstationActionStateChangedCallbacks; /********* * Model * @@ -110,8 +112,9 @@ Workstation::~Workstation(){ } void Workstation::setState(e_surf_resource_state_t state){ + e_surf_resource_state_t old = Resource::getState(); Resource::setState(state); - surf_callback_emit(workstationStateChangedCallbacks, this); + surf_callback_emit(workstationStateChangedCallbacks, this, old, state); } int Workstation::getCore(){ @@ -265,7 +268,7 @@ ActionPtr Workstation::write(surf_file_t fd, sg_size_t size) { int Workstation::unlink(surf_file_t fd) { if (!fd){ XBT_WARN("No such file descriptor. Impossible to unlink"); - return 0; + return MSG_TASK_CANCELED; } else { StoragePtr st = findStorageOnMountList(fd->mount); @@ -273,7 +276,7 @@ int Workstation::unlink(surf_file_t fd) { if (!xbt_dict_get_or_null(st->p_content, fd->name)){ XBT_WARN("File %s is not on disk %s. Impossible to unlink", fd->name, st->getName()); - return 0; + return MSG_TASK_CANCELED; } else { XBT_DEBUG("UNLINK on disk '%s'",st->getName()); st->m_usedSize -= fd->size; @@ -284,17 +287,11 @@ int Workstation::unlink(surf_file_t fd) { free(fd->name); free(fd->mount); xbt_free(fd); - return 1; + return MSG_OK; } } } -ActionPtr Workstation::ls(const char* mount, const char *path){ - XBT_DEBUG("LS on mount '%s' and file '%s'", mount, path); - StoragePtr st = findStorageOnMountList(mount); - return st->ls(path); -} - sg_size_t Workstation::getSize(surf_file_t fd){ return fd->size; } @@ -367,72 +364,6 @@ int Workstation::fileMove(surf_file_t fd, const char* fullpath){ } } -int Workstation::fileRcopy(surf_file_t fd, surf_resource_t host_dest, const char* fullpath){ - - XBT_INFO("FILE %s WKS %s FULLPATH %s",fd->name, host_dest->key, fullpath); - - /* Find the host src where the file is located */ - StoragePtr storage = findStorageOnMountList(fd->mount); - const char* host_name_src = (const char*)storage->p_attach; - - /* Find the host dest where the file will be stored */ - s_mount_t mnt; - unsigned int cursor; - StoragePtr storage_dest = NULL; - const char* host_name_dest; - char *file_mount_name = NULL; - size_t longest_prefix_length = 0; - xbt_dynar_foreach(((WorkstationPtr)host_dest)->p_storage,cursor,mnt) - { - file_mount_name = (char *) xbt_malloc ((strlen(mnt.name)+1)); - strncpy(file_mount_name,fullpath,strlen(mnt.name)+1); - file_mount_name[strlen(mnt.name)] = '\0'; - - if(!strcmp(file_mount_name,mnt.name) && strlen(mnt.name)>longest_prefix_length) - {/* The current mount name is found in the full path and is bigger than the previous*/ - longest_prefix_length = strlen(mnt.name); - storage_dest = static_cast(mnt.storage); - } - free(file_mount_name); - } - if(longest_prefix_length>0) - { /* Mount point found */ - host_name_dest = storage_dest->p_attach; - } - else - { - XBT_WARN("Can't find mount point for '%s' on destination host '%s'", fullpath, host_dest->key); - return MSG_TASK_CANCELED; - } - XBT_INFO("SRC %s DEST %s", host_name_src, host_name_dest); - return MSG_OK; - - -// /* Check that file to copy is local to the src workstation (storage is attached to src workstation) */ -// StoragePtr storage = findStorageOnMountList(fd->mount); -// if(!strcmp((const char*)storage->p_attach, this->getName())) -// { -// /* Check that there is a route between src and dest workstations */ -// xbt_dynar_t route = NULL; -// routing_get_route_and_latency(this->p_netElm, ((WorkstationPtr)host_dest)->p_netElm, &route, NULL); -// if(route){ -// -// ATTENTION DISCUSSION AVEC FRED ! -// return MSG_OK; -// } -// else -// { -// XBT_WARN("There is no route between %s and %s. Action has been canceled", this->getName(), host_dest->key); -// return MSG_TASK_CANCELED; -// } -// } -// else -// { -// XBT_WARN("File %s is not local to %s but to %s. Action has been canceled", fd->name,this->getName(), storage->p_attach); -// return MSG_TASK_CANCELED; -// } -} - sg_size_t Workstation::getFreeSize(const char* name) { StoragePtr st = findStorageOnMountList(name); @@ -478,6 +409,7 @@ void Workstation::setParams(ws_params_t params) **********/ void WorkstationAction::setState(e_surf_action_state_t state){ + e_surf_action_state_t old = getState(); Action::setState(state); - surf_callback_emit(workstationActionStateChangedCallbacks, this); + surf_callback_emit(workstationActionStateChangedCallbacks, this, old, state); }