Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix msg-start-kill-time
[simgrid.git] / src / surf / storage.hpp
1 #include "surf.hpp"
2
3 #ifndef STORAGE_HPP_
4 #define STORAGE_HPP_
5
6 /***********
7  * Classes *
8  ***********/
9
10 class StorageModel;
11 typedef StorageModel *StorageModelPtr;
12
13 class Storage;
14 typedef Storage *StoragePtr;
15
16 class StorageLmm;
17 typedef StorageLmm *StorageLmmPtr;
18
19 class StorageAction;
20 typedef StorageAction *StorageActionPtr;
21
22 class StorageActionLmm;
23 typedef StorageActionLmm *StorageActionLmmPtr;
24
25
26 /*********
27  * Model *
28  *********/
29 class StorageModel : Model {
30 public:
31   StorageModel();
32   ~StorageModel();
33   StoragePtr createResource(const char* id, const char* model, const char* type_id, const char* content_name);
34   double shareResources(double now);
35   void updateActionsState(double now, double delta);
36
37   xbt_dict_t parseContent(char *filename, size_t *used_size);
38 };
39
40 /************
41  * Resource *
42  ************/
43
44 class Storage : virtual public Resource {
45 public:
46   Storage(StorageModelPtr model, const char* name, xbt_dict_t properties);
47
48   bool isUsed();
49   void updateState(tmgr_trace_event_t event_type, double value, double date);
50
51   xbt_dict_t p_content; /* char * -> s_surf_file_t */
52
53   virtual StorageActionPtr open(const char* mount, const char* path)=0;
54   virtual StorageActionPtr close(surf_file_t fd)=0;
55   //virtual StorageActionPtr unlink(surf_file_t fd)=0;
56   virtual StorageActionPtr ls(const char *path)=0;
57   //virtual size_t getSize(surf_file_t fd);
58   virtual StorageActionPtr read(void* ptr, size_t size, surf_file_t fd)=0;//FIXME:why we have a useless param ptr ??
59   virtual StorageActionPtr write(const void* ptr, size_t size, surf_file_t fd)=0;//FIXME:why we have a useless param ptr ??
60
61   size_t m_size;
62   size_t m_usedSize;
63   xbt_dynar_t p_writeActions;
64 };
65
66 class StorageLmm : public ResourceLmm, public Storage {
67 public:
68   StorageLmm(StorageModelPtr model, const char* name, xbt_dict_t properties,
69                      lmm_system_t maxminSystem, double bread, double bwrite, double bconnection,
70                      xbt_dict_t content, size_t size);
71
72   StorageActionPtr open(const char* mount, const char* path);
73   StorageActionPtr close(surf_file_t fd);
74   //StorageActionPtr unlink(surf_file_t fd);
75   StorageActionPtr ls(const char *path);
76   //size_t getSize(surf_file_t fd);
77   StorageActionPtr read(void* ptr, size_t size, surf_file_t fd);//FIXME:why we have a useless param ptr ??
78   StorageActionPtr write(const void* ptr, size_t size, surf_file_t fd);//FIXME:why we have a useless param ptr ??
79
80   lmm_constraint_t p_constraintWrite;    /* Constraint for maximum write bandwidth*/
81   lmm_constraint_t p_constraintRead;     /* Constraint for maximum write bandwidth*/
82 };
83
84 /**********
85  * Action *
86  **********/
87
88 typedef enum {
89   READ=0, WRITE, STAT, OPEN, CLOSE, LS
90 } e_surf_action_storage_type_t;
91
92
93 class StorageAction : virtual public Action {
94 public:
95   StorageAction(){};
96   StorageAction(ModelPtr model, double cost, bool failed, StoragePtr storage, e_surf_action_storage_type_t type){};
97
98
99
100   e_surf_action_storage_type_t m_type;
101   StoragePtr p_storage;
102   surf_file_t p_file;
103   xbt_dict_t p_lsDict;
104 };
105
106 class StorageActionLmm : public ActionLmm, public StorageAction {
107 public:
108   StorageActionLmm(){};
109   StorageActionLmm(ModelPtr model, double cost, bool failed, StorageLmmPtr storage, e_surf_action_storage_type_t type);
110   void suspend();
111   int unref();
112   void cancel();
113   //FIXME:??void recycle();
114   void resume();
115   bool isSuspended();
116   void setMaxDuration(double duration);
117   void setPriority(double priority);
118
119 };
120
121
122 typedef struct s_storage_type {
123   char *model;
124   char *content;
125   char *type_id;
126   xbt_dict_t properties;
127   size_t size;
128 } s_storage_type_t, *storage_type_t;
129
130 typedef struct s_mount {
131   void *id;
132   char *name;
133 } s_mount_t, *mount_t;
134
135 typedef struct surf_file {
136   char *name;
137   char *storage;
138   size_t size;
139 } s_surf_file_t;
140
141
142 #endif /* STORAGE_HPP_ */