-/* Copyright (c) 2004-2014. The SimGrid Team.
+/* Copyright (c) 2004-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
/* Find the host where the file is physically located and read it */
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);
+ msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
read_size = simcall_file_read(file_priv->simdata->smx_file, size, attached_host);
if(strcmp(storage_priv_src->hostname, MSG_host_get_name(MSG_host_self()))){
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);
/* 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);
+ msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
if(strcmp(storage_priv_src->hostname, MSG_host_get_name(MSG_host_self()))){
/* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */
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);
*/
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;
}
*/
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;
}
(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);
+ msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
int res = simcall_file_unlink(file_priv->simdata->smx_file, attached_host);
return res;
}
/* Find the host where the file is physically located and read it */
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);
+ msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
MSG_file_seek(file, 0, SEEK_SET);
read_size = simcall_file_read(file_priv->simdata->smx_file, file_priv->size, attached_host);
/* Mount point found, retrieve the host the storage is attached to */
msg_storage_priv_t storage_dest_priv = MSG_storage_priv(storage_dest);
host_name_dest = (char*)storage_dest_priv->hostname;
- host_dest = MSG_get_host_by_name(host_name_dest);
+ host_dest = MSG_host_by_name(host_name_dest);
}else{
XBT_WARN("Can't find mount point for '%s' on destination host '%s'", fullpath, SIMIX_host_get_name(host));
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);
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
return MSG_OK;
}
-/** \ingroup msg_host_management
+/** \ingroup m_host_management
*
* \brief Returns the user data of a #msg_storage_t.
*