Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
properly pass the cluster's properties to the created hosts
[simgrid.git] / src / surf / surf_c_bindings.cpp
index b34f4ee..70bd496 100644 (file)
@@ -26,6 +26,10 @@ static WorkstationPtr get_casted_workstation(surf_resource_t resource){
   return static_cast<WorkstationPtr>(surf_workstation_resource_priv(resource));
 }
 
+static RoutingEdgePtr get_casted_routing(surf_resource_t resource){
+  return static_cast<RoutingEdgePtr>(surf_routing_resource_priv(resource));
+}
+
 static WorkstationVMPtr get_casted_vm_workstation(surf_resource_t resource){
   return static_cast<WorkstationVMPtr>(surf_workstation_resource_priv(resource));
 }
@@ -287,7 +291,7 @@ xbt_dynar_t surf_workstation_model_get_route(surf_workstation_model_t /*model*/,
 }
 
 void surf_vm_workstation_model_create(const char *name, surf_resource_t ind_phys_host){
-  surf_vm_workstation_model->createResource(name, ind_phys_host);
+  surf_vm_workstation_model->createWorkstationVM(name, ind_phys_host);
 }
 
 surf_action_t surf_network_model_communicate(surf_network_model_t model, sg_routing_edge_t src, sg_routing_edge_t dst, double size, double rate){
@@ -372,10 +376,6 @@ int surf_workstation_unlink(surf_resource_t workstation, surf_file_t fd){
   return get_casted_workstation(workstation)->unlink(fd);
 }
 
-surf_action_t surf_workstation_ls(surf_resource_t workstation, const char* mount, const char *path){
-  return get_casted_workstation(workstation)->ls(mount, path);
-}
-
 size_t surf_workstation_get_size(surf_resource_t workstation, surf_file_t fd){
   return get_casted_workstation(workstation)->getSize(fd);
 }
@@ -392,19 +392,12 @@ xbt_dynar_t surf_workstation_get_info(surf_resource_t resource, surf_file_t fd){
   return get_casted_workstation(resource)->getInfo(fd);
 }
 
-sg_size_t surf_workstation_get_free_size(surf_resource_t resource, const char* name){
-  return get_casted_workstation(resource)->getFreeSize(name);
-}
-
-sg_size_t surf_workstation_get_used_size(surf_resource_t resource, const char* name){
-  return get_casted_workstation(resource)->getUsedSize(name);
-}
-
 size_t surf_workstation_file_tell(surf_resource_t workstation, surf_file_t fd){
   return get_casted_workstation(workstation)->fileTell(fd);
 }
 
-int surf_workstation_file_seek(surf_resource_t workstation, surf_file_t fd, sg_size_t offset, int origin){
+int surf_workstation_file_seek(surf_resource_t workstation, surf_file_t fd,
+                               sg_offset_t offset, int origin){
   return get_casted_workstation(workstation)->fileSeek(fd, offset, origin);
 }
 
@@ -412,12 +405,17 @@ int surf_workstation_file_move(surf_resource_t workstation, surf_file_t fd, cons
   return get_casted_workstation(workstation)->fileMove(fd, fullpath);
 }
 
-int surf_workstation_file_rcopy(surf_resource_t workstation, surf_file_t fd, surf_resource_t host_dest, const char* fullpath){
-  return get_casted_workstation(workstation)->fileRcopy(fd, host_dest, fullpath);
-}
-
 xbt_dynar_t surf_workstation_get_vms(surf_resource_t resource){
-  return get_casted_workstation(resource)->getVms();
+  xbt_dynar_t vms = get_casted_workstation(resource)->getVms();
+  xbt_dynar_t vms_ = xbt_dynar_new(sizeof(smx_host_t), NULL);
+  unsigned int cpt;
+  WorkstationVMPtr vm;
+  xbt_dynar_foreach(vms, cpt, vm) {
+    smx_host_t vm_ = xbt_lib_get_elm_or_null(host_lib, vm->getName());
+    xbt_dynar_push(vms_, &vm_);
+  }
+  xbt_dynar_free(&vms);
+  return vms_;
 }
 
 void surf_workstation_get_params(surf_resource_t resource, ws_params_t params){
@@ -429,7 +427,30 @@ void surf_workstation_set_params(surf_resource_t resource, ws_params_t params){
 }
 
 void surf_vm_workstation_destroy(surf_resource_t resource){
-  delete get_casted_vm_workstation(resource);
+  /* ind_phys_workstation equals to smx_host_t */
+  //surf_resource_t ind_vm_workstation = xbt_lib_get_elm_or_null(host_lib, getName());
+
+  /* Before clearing the entries in host_lib, we have to pick up resources. */
+  CpuPtr cpu = get_casted_cpu(resource);
+  WorkstationVMPtr vm = get_casted_vm_workstation(resource);
+  RoutingEdgePtr routing = get_casted_routing(resource);
+  char* name = xbt_dict_get_elm_key(resource);
+  /* We deregister objects from host_lib, without invoking the freeing callback
+   * of each level.
+   *
+   * Do not call xbt_lib_remove() here. It deletes all levels of the key,
+   * including MSG_HOST_LEVEL and others. We should unregister only what we know.
+   */
+  xbt_lib_unset(host_lib, name, SURF_CPU_LEVEL, 0);
+  xbt_lib_unset(host_lib, name, ROUTING_HOST_LEVEL, 0);
+  xbt_lib_unset(host_lib, name, SURF_WKS_LEVEL, 0);
+
+  /* TODO: comment out when VM storage is implemented. */
+  // xbt_lib_unset(host_lib, name, SURF_STORAGE_LEVEL, 0);
+
+  delete cpu;
+  delete vm;
+  delete routing;
 }
 
 void surf_vm_workstation_suspend(surf_resource_t resource){
@@ -484,6 +505,14 @@ sg_size_t surf_storage_get_size(surf_resource_t resource){
   return static_cast<StoragePtr>(surf_storage_resource_priv(resource))->getSize();
 }
 
+sg_size_t surf_storage_get_free_size(surf_resource_t resource){
+  return static_cast<StoragePtr>(surf_storage_resource_priv(resource))->getFreeSize();
+}
+
+sg_size_t surf_storage_get_used_size(surf_resource_t resource){
+  return static_cast<StoragePtr>(surf_storage_resource_priv(resource))->getUsedSize();
+}
+
 const char* surf_storage_get_host(surf_resource_t resource){
   return static_cast<StoragePtr>(surf_storage_resource_priv(resource))->p_attach;
 }
@@ -528,9 +557,11 @@ void surf_action_set_priority(surf_action_t action, double priority){
   action->setPriority(priority);
 }
 
+#ifdef HAVE_TRACING
 void surf_action_set_category(surf_action_t action, const char *category){
   action->setCategory(category);
 }
+#endif
 
 void *surf_action_get_data(surf_action_t action){
   return action->getData();
@@ -565,7 +596,3 @@ double surf_network_action_get_latency_limited(surf_action_t action) {
 surf_file_t surf_storage_action_get_file(surf_action_t action){
   return static_cast<StorageActionPtr>(action)->p_file;
 }
-
-xbt_dict_t surf_storage_action_get_ls_dict(surf_action_t action){
-  return static_cast<StorageActionPtr>(action)->p_lsDict;
-}