X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/12fa31238fdd04230653b9c506351614298d8e01..26f60d943e887977ea88e6ef97d7c1dd47acda1c:/src/surf/workstation_interface.cpp diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index 5f44530010..ba19f668d3 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -364,99 +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_DEBUG("Rcopy file %s on %s to %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 real 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; - size_t longest_prefix_length = 0; - WorkstationPtr dest_ws, src_ws; - - dest_ws = static_cast(surf_workstation_resource_priv(host_dest)); - - xbt_dynar_foreach(dest_ws->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, retrieve the host the storage is attached to */ - 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; - } - - /* Check that there is a route between src and dest workstations */ - xbt_dynar_t route = NULL; - dest_ws = static_cast(surf_workstation_resource_priv(xbt_lib_get_elm_or_null(host_lib, host_name_dest))); - src_ws = static_cast(surf_workstation_resource_priv(xbt_lib_get_elm_or_null(host_lib, host_name_src))); - - routing_get_route_and_latency(src_ws->p_netElm, dest_ws->p_netElm, &route, NULL); - if(!xbt_dynar_length (route)) - { - XBT_WARN("There is no route between %s and %s. Action has been canceled", src_ws->getName(), dest_ws->getName()); - return MSG_TASK_CANCELED; - } - else - {/* There is a route between src and dest, let's copy the file */ - - /* Read the file on the src side */ - src_ws->read(fd, fd->size); - - /* Send a message from src to dest to simulate data transfer */ - surf_network_model->communicate(src_ws->p_netElm, dest_ws->p_netElm, fd->size, .0); - - /* Create the file on the dest side and write data into it*/ - char *mount_name, *path; - path = (char *) xbt_malloc ((strlen(fullpath)-longest_prefix_length+1)); - mount_name = (char *) xbt_malloc ((longest_prefix_length+1)); - - /* deduce mount_name and path from fullpath */ - strncpy(mount_name, fullpath, longest_prefix_length+1); - strncpy(path, fullpath+longest_prefix_length, strlen(fullpath)-longest_prefix_length+1); - path[strlen(fullpath)-longest_prefix_length] = '\0'; - mount_name[longest_prefix_length] = '\0'; - - /* create the file */ - StorageActionPtr open_action = storage_dest->open((const char*)mount_name, (const char*)path); - - surf_file_t surf_file = xbt_new(s_surf_file_t, 1); - surf_file->current_position = 0; - surf_file->mount = mount_name; - surf_file->name = strdup(path); - surf_file->size = 0; - - /* write data and close file*/ - storage_dest->write(surf_file, fd->size); - storage_dest->close(open_action->p_file); - - free(path); - free(mount_name); - XBT_DEBUG("File %s has been copied on %s to %s",fd->name, host_dest->key, fullpath); - return MSG_OK; - } -} - sg_size_t Workstation::getFreeSize(const char* name) { StoragePtr st = findStorageOnMountList(name);