Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
13c19a96f762fdf8f19725aa79dd1051d0bf21c2
[simgrid.git] / src / surf / HostImpl.hpp
1 /* Copyright (c) 2004-2016. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "surf_interface.hpp"
7 #include "storage_interface.hpp"
8 #include "cpu_interface.hpp"
9 #include "network_interface.hpp"
10 #include "src/surf/PropertyHolder.hpp"
11
12 #include <xbt/base.h>
13
14 #ifndef SURF_HOST_INTERFACE_HPP_
15 #define SURF_HOST_INTERFACE_HPP_
16
17 /***********
18  * Classes *
19  ***********/
20
21 namespace simgrid {
22 namespace surf {
23
24 class XBT_PRIVATE HostModel;
25 class XBT_PRIVATE HostImpl;
26 class XBT_PRIVATE HostAction;
27 }
28 }
29
30 /*********
31  * Tools *
32  *********/
33
34 XBT_PUBLIC_DATA(simgrid::surf::HostModel*) surf_host_model;
35
36 /*********
37  * Model *
38  *********/
39
40 namespace simgrid {
41 namespace surf {
42
43 /** @ingroup SURF_host_interface
44  * @brief SURF Host model interface class
45  * @details A model is an object which handle the interactions between its Resources and its Actions
46  */
47 class HostModel : public Model {
48 public:
49   HostModel() : Model() {}
50
51   virtual void adjustWeightOfDummyCpuActions();
52   virtual Action* executeParallelTask(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount,
53                                       double rate);
54 };
55
56 /************
57  * Resource *
58  ************/
59 /** @ingroup SURF_host_interface
60  * @brief SURF Host interface class
61  * @details An host represents a machine with a aggregation of a Cpu, a RoutingEdge and a Storage
62  */
63 class HostImpl : public simgrid::surf::PropertyHolder {
64
65 public:
66   HostImpl(s4u::Host* host);
67   virtual ~HostImpl();
68
69 public:
70   /** @brief Return the storage of corresponding mount point */
71   virtual simgrid::surf::Storage* findStorageOnMountList(const char* storage);
72
73   /** @brief Get the xbt_dict_t of mount_point: Storage */
74   virtual xbt_dict_t getMountedStorageList();
75
76   /** @brief Get the xbt_dynar_t of storages attached to the Host */
77   virtual xbt_dynar_t getAttachedStorageList();
78
79   /**
80    * @brief Open a file
81    *
82    * @param fullpath The full path to the file
83    * @return The StorageAction corresponding to the opening
84    */
85   virtual Action* open(const char* fullpath);
86
87   /**
88    * @brief Close a file
89    *
90    * @param fd The file descriptor to close
91    * @return The StorageAction corresponding to the closing
92    */
93   virtual Action* close(surf_file_t fd);
94
95   /**
96    * @brief Unlink a file
97    * @details [long description]
98    *
99    * @param fd [description]
100    * @return [description]
101    */
102   virtual int unlink(surf_file_t fd);
103
104   /**
105    * @brief Get the size in bytes of the file
106    *
107    * @param fd The file descriptor to read
108    * @return The size in bytes of the file
109    */
110   virtual sg_size_t getSize(surf_file_t fd);
111
112   /**
113    * @brief Read a file
114    *
115    * @param fd The file descriptor to read
116    * @param size The size in bytes to read
117    * @return The StorageAction corresponding to the reading
118    */
119   virtual Action* read(surf_file_t fd, sg_size_t size);
120
121   /**
122    * @brief Write a file
123    *
124    * @param fd The file descriptor to write
125    * @param size The size in bytes to write
126    * @return The StorageAction corresponding to the writing
127    */
128   virtual Action* write(surf_file_t fd, sg_size_t size);
129
130   /**
131    * @brief Get the information of a file descriptor
132    * @details The returned xbt_dynar_t contains:
133    *  - the size of the file,
134    *  - the mount point,
135    *  - the storage name,
136    *  - the storage typeId,
137    *  - the storage content type
138    *
139    * @param fd The file descriptor
140    * @return An xbt_dynar_t with the file information
141    */
142   virtual xbt_dynar_t getInfo(surf_file_t fd);
143
144   /**
145    * @brief Get the current position of the file descriptor
146    *
147    * @param fd The file descriptor
148    * @return The current position of the file descriptor
149    */
150   virtual sg_size_t fileTell(surf_file_t fd);
151
152   /**
153    * @brief Set the position indicator associated with the file descriptor to a new position
154    * @details [long description]
155    *
156    * @param fd The file descriptor
157    * @param offset The offset from the origin
158    * @param origin Position used as a reference for the offset
159    *  - SEEK_SET: beginning of the file
160    *  - SEEK_CUR: current position indicator
161    *  - SEEK_END: end of the file
162    * @return MSG_OK if successful, otherwise MSG_TASK_CANCELED
163    */
164   virtual int fileSeek(surf_file_t fd, sg_offset_t offset, int origin);
165
166   /**
167    * @brief Move a file to another location on the *same mount point*.
168    * @details [long description]
169    *
170    * @param fd The file descriptor
171    * @param fullpath The new full path
172    * @return MSG_OK if successful, MSG_TASK_CANCELED and a warning if the new
173    * full path is not on the same mount point
174    */
175   virtual int fileMove(surf_file_t fd, const char* fullpath);
176
177 public:
178   xbt_dynar_t storage_        = nullptr;
179   simgrid::s4u::Host* piface_ = nullptr;
180
181   simgrid::s4u::Host* getHost() { return piface_; }
182 };
183 }
184 }
185
186 #endif /* SURF_Host_INTERFACE_HPP_ */