Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Replace the override word with MC_OVERRIDE
[simgrid.git] / src / msg / msg_io.c
index 898604d..4e0971f 100644 (file)
@@ -111,10 +111,10 @@ sg_size_t MSG_file_read(msg_file_t fd, sg_size_t size)
 
     m_host_list[0] = MSG_host_self();
     m_host_list[1] = attached_host;
-    double computation_amount[] = { 0, 0 };
-    double communication_amount[] = { 0, 0, (double)read_size, 0 };
+    double flops_amount[] = { 0, 0 };
+    double bytes_amount[] = { 0, 0, (double)read_size, 0 };
 
-    msg_task_t task = MSG_parallel_task_create("file transfer for read", 2, m_host_list, computation_amount, communication_amount, NULL);
+    msg_task_t task = MSG_parallel_task_create("file transfer for read", 2, m_host_list, flops_amount, bytes_amount, NULL);
     msg_error_t transfer = MSG_parallel_task_execute(task);
     MSG_task_destroy(task);
     free(m_host_list);
@@ -155,10 +155,10 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
 
     m_host_list[0] = MSG_host_self();
     m_host_list[1] = attached_host;
-    double computation_amount[] = { 0, 0 };
-    double communication_amount[] = { 0, (double)size, 0, 0 };
+    double flops_amount[] = { 0, 0 };
+    double bytes_amount[] = { 0, (double)size, 0, 0 };
 
-    msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, computation_amount, communication_amount, NULL);
+    msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, NULL);
     msg_error_t transfer = MSG_parallel_task_execute(task);
     MSG_task_destroy(task);
     free(m_host_list);
@@ -189,29 +189,20 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
  */
 msg_file_t MSG_file_open(const char* fullpath, void* data)
 {
-  char name[2048];
+  char *name;
   msg_file_priv_t priv = xbt_new(s_msg_file_priv_t, 1);
   priv->data = data;
   priv->fullpath = xbt_strdup(fullpath);
   priv->simdata = xbt_new0(s_simdata_file_t,1);
   priv->simdata->smx_file = simcall_file_open(fullpath, MSG_host_self());
-  sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),fullpath);
+  name = bprintf("%s:%i:%s",MSG_host_get_name(MSG_host_self()),MSG_process_self_PID(),fullpath);
   xbt_lib_set(file_lib, name, MSG_FILE_LEVEL, priv);
   msg_file_t fd = (msg_file_t) xbt_lib_get_elm_or_null(file_lib, name);
   __MSG_file_get_info(fd);
-
+  xbt_free(name);
   return fd;
 }
 
-/**
- * \brief Frees private data of a file (internal call only)
- */
-void __MSG_file_priv_free(msg_file_priv_t priv)
-{
-  xbt_free(&priv->simdata->smx_file);
-  free(priv);
-}
-
 /** \ingroup msg_file_management
  * \brief Close the file
  *
@@ -220,11 +211,15 @@ void __MSG_file_priv_free(msg_file_priv_t priv)
  */
 int MSG_file_close(msg_file_t fd)
 {
-  char name[2048];
+  char *name;
   msg_file_priv_t priv = MSG_file_priv(fd);
+  if (priv->data)
+    xbt_free(priv->data);
+
   int res = simcall_file_close(priv->simdata->smx_file, MSG_host_self());
-  sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),priv->fullpath);
+  name = bprintf("%s:%i:%s",MSG_host_get_name(MSG_host_self()),MSG_process_self_PID(),priv->fullpath);
   xbt_lib_unset(file_lib, name, MSG_FILE_LEVEL, 1);
+  xbt_free(name);
   return res;
 }
 
@@ -236,8 +231,14 @@ int MSG_file_close(msg_file_t fd)
  */
 msg_error_t MSG_file_unlink(msg_file_t fd)
 {
-  msg_file_priv_t priv = MSG_file_priv(fd);
-  int res = simcall_file_unlink(priv->simdata->smx_file);
+  msg_file_priv_t file_priv = MSG_file_priv(fd);
+  /* Find the host where the file is physically located (remote or local)*/
+  msg_storage_t storage_src =
+      (msg_storage_t) xbt_lib_get_elm_or_null(storage_lib,
+                                              file_priv->storageId);
+  msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
+  msg_host_t attached_host = MSG_get_host_by_name(storage_priv_src->hostname);
+  int res = simcall_file_unlink(file_priv->simdata->smx_file, attached_host);
   return res;
 }
 
@@ -346,6 +347,8 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
     }
     free(file_mount_name);
   }
+  xbt_dict_free(&storage_list);
+
   if(longest_prefix_length>0){
     /* Mount point found, retrieve the host the storage is attached to */
     msg_storage_priv_t storage_dest_priv = MSG_storage_priv(storage_dest);
@@ -363,10 +366,10 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
 
   m_host_list[0] = attached_host;
   m_host_list[1] = host_dest;
-  double computation_amount[] = { 0, 0 };
-  double communication_amount[] = { 0, (double)read_size, 0, 0 };
+  double flops_amount[] = { 0, 0 };
+  double bytes_amount[] = { 0, (double)read_size, 0, 0 };
 
-  msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, computation_amount, communication_amount, NULL);
+  msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, NULL);
   msg_error_t transfer = MSG_parallel_task_execute(task);
   MSG_task_destroy(task);
   free(m_host_list);
@@ -489,6 +492,19 @@ void MSG_storage_set_property_value(msg_storage_t storage, const char *name, cha
   xbt_dict_set(MSG_storage_get_properties(storage), name, value,free_ctn);
 }
 
+/** \ingroup m_storage_management
+ * \brief Returns the value of a given storage property
+ *
+ * \param storage a storage
+ * \param name a property name
+ * \return value of a property (or NULL if property not set)
+ */
+const char *MSG_storage_get_property_value(msg_storage_t storage, const char *name)
+{
+  return xbt_dict_get_or_null(MSG_storage_get_properties(storage), name);
+}
+
+
 /** \ingroup msg_storage_management
  * \brief Finds a msg_storage_t using its name.
  * \param name the name of a storage