root / snf-astakos-app / docs / projects_specs.rst @ b22de10a
History | View | Annotate | Download (15.3 kB)
1 | 07c87d4f | Georgios D. Tsoukalas | Synnefo Projects |
---|---|---|---|
2 | 07c87d4f | Georgios D. Tsoukalas | ================ |
3 | 07c87d4f | Georgios D. Tsoukalas | |
4 | 07c87d4f | Georgios D. Tsoukalas | Projects can be thought of as contracts between the infrastructure |
5 | 07c87d4f | Georgios D. Tsoukalas | and the members of the project, so that resources can be allocated |
6 | 07c87d4f | Georgios D. Tsoukalas | by the members and used for a specified period in time. |
7 | 07c87d4f | Georgios D. Tsoukalas | |
8 | 07c87d4f | Georgios D. Tsoukalas | Definition |
9 | 07c87d4f | Georgios D. Tsoukalas | ---------- |
10 | 07c87d4f | Georgios D. Tsoukalas | A **definition** for a project represents the initialization |
11 | 07c87d4f | Georgios D. Tsoukalas | or modification of a project has the following attributes: |
12 | 07c87d4f | Georgios D. Tsoukalas | |
13 | 07c87d4f | Georgios D. Tsoukalas | ``name`` |
14 | 07c87d4f | Georgios D. Tsoukalas | *in dot-hierarchical dns-like form* |
15 | 07c87d4f | Georgios D. Tsoukalas | |
16 | 07c87d4f | Georgios D. Tsoukalas | ``description`` |
17 | 07c87d4f | Georgios D. Tsoukalas | *text describing the project for the public* |
18 | 07c87d4f | Georgios D. Tsoukalas | |
19 | 07c87d4f | Georgios D. Tsoukalas | ``start_date`` |
20 | 07c87d4f | Georgios D. Tsoukalas | *when the project is to be started* |
21 | 07c87d4f | Georgios D. Tsoukalas | |
22 | 07c87d4f | Georgios D. Tsoukalas | ``end_date`` |
23 | 07c87d4f | Georgios D. Tsoukalas | *when the project is to be ended* |
24 | 07c87d4f | Georgios D. Tsoukalas | |
25 | 07c87d4f | Georgios D. Tsoukalas | ``member_join_policy`` |
26 | 07c87d4f | Georgios D. Tsoukalas | *an enumeration of policies on how new join requests are to be accepted. |
27 | 07c87d4f | Georgios D. Tsoukalas | The policies include the following:* |
28 | 07c87d4f | Georgios D. Tsoukalas | |
29 | 07c87d4f | Georgios D. Tsoukalas | ``auto_accept`` |
30 | 07c87d4f | Georgios D. Tsoukalas | *new join requests are automatically accepted by the system* |
31 | 07c87d4f | Georgios D. Tsoukalas | |
32 | 07c87d4f | Georgios D. Tsoukalas | ``owner_accepts`` |
33 | 07c87d4f | Georgios D. Tsoukalas | *new join requests must be accepted by the owner of the project* |
34 | 07c87d4f | Georgios D. Tsoukalas | |
35 | 07c87d4f | Georgios D. Tsoukalas | ``closed`` |
36 | 07c87d4f | Georgios D. Tsoukalas | *no new members can join the project, even if old ones leave* |
37 | 07c87d4f | Georgios D. Tsoukalas | |
38 | 07c87d4f | Georgios D. Tsoukalas | ``member_leave_policy`` |
39 | 07c87d4f | Georgios D. Tsoukalas | *an enumeration of policies on how new leave requests are to be accepted. |
40 | 07c87d4f | Georgios D. Tsoukalas | The policies include the following:* |
41 | 07c87d4f | Georgios D. Tsoukalas | |
42 | 07c87d4f | Georgios D. Tsoukalas | ``auto_accept`` |
43 | 07c87d4f | Georgios D. Tsoukalas | *leave requests are automatically accepted by the system* |
44 | 07c87d4f | Georgios D. Tsoukalas | |
45 | 07c87d4f | Georgios D. Tsoukalas | ``owner_accepts`` |
46 | 07c87d4f | Georgios D. Tsoukalas | *leave requests must be accepted by the owner of the project** |
47 | 07c87d4f | Georgios D. Tsoukalas | |
48 | 07c87d4f | Georgios D. Tsoukalas | ``closed`` |
49 | 07c87d4f | Georgios D. Tsoukalas | *no member can leave the project* |
50 | 07c87d4f | Georgios D. Tsoukalas | |
51 | 07c87d4f | Georgios D. Tsoukalas | ``limit_on_members_number`` |
52 | 07c87d4f | Georgios D. Tsoukalas | *the maximum number of members that can be admitted to the project* |
53 | 07c87d4f | Georgios D. Tsoukalas | |
54 | 07c87d4f | Georgios D. Tsoukalas | ``limits_on_resources`` |
55 | 07c87d4f | Georgios D. Tsoukalas | *a set of limits on the total resources the group can grant to its members* |
56 | 07c87d4f | Georgios D. Tsoukalas | |
57 | 07c87d4f | Georgios D. Tsoukalas | ``resource_grants`` |
58 | 07c87d4f | Georgios D. Tsoukalas | *a set of resource usage limits each member is granted by the project* |
59 | 07c87d4f | Georgios D. Tsoukalas | |
60 | 07c87d4f | Georgios D. Tsoukalas | |
61 | 07c87d4f | Georgios D. Tsoukalas | |
62 | 07c87d4f | Georgios D. Tsoukalas | Application for a Project |
63 | 07c87d4f | Georgios D. Tsoukalas | ------------------------- |
64 | 07c87d4f | Georgios D. Tsoukalas | An **application** for a project must be issued by a user and |
65 | 07c87d4f | Georgios D. Tsoukalas | approved by the Service before any resources are granted. |
66 | 07c87d4f | Georgios D. Tsoukalas | Its attributes are: |
67 | 07c87d4f | Georgios D. Tsoukalas | |
68 | 07c87d4f | Georgios D. Tsoukalas | ``serial`` |
69 | 07c87d4f | Georgios D. Tsoukalas | *a unique serial number identifying the application* |
70 | 07c87d4f | Georgios D. Tsoukalas | |
71 | 07c87d4f | Georgios D. Tsoukalas | ``applicant`` |
72 | 07c87d4f | Georgios D. Tsoukalas | *who applies for creation or modification of a project* |
73 | 07c87d4f | Georgios D. Tsoukalas | |
74 | 07c87d4f | Georgios D. Tsoukalas | ``owner`` |
75 | 07c87d4f | Georgios D. Tsoukalas | *the requested owner of the project* |
76 | 07c87d4f | Georgios D. Tsoukalas | |
77 | 07c87d4f | Georgios D. Tsoukalas | ``comments`` |
78 | 07c87d4f | Georgios D. Tsoukalas | *text comments for the application* |
79 | 07c87d4f | Georgios D. Tsoukalas | |
80 | 07c87d4f | Georgios D. Tsoukalas | ``definition`` |
81 | 07c87d4f | Georgios D. Tsoukalas | *the definition of the project being requested* |
82 | 07c87d4f | Georgios D. Tsoukalas | |
83 | 07c87d4f | Georgios D. Tsoukalas | ``issue_date`` |
84 | 07c87d4f | Georgios D. Tsoukalas | *when the application was submitted* |
85 | 07c87d4f | Georgios D. Tsoukalas | |
86 | 07c87d4f | Georgios D. Tsoukalas | ``precursor_application`` |
87 | 07c87d4f | Georgios D. Tsoukalas | *a reference by serial to a previous application which this application |
88 | 07c87d4f | Georgios D. Tsoukalas | requests to modify. It can be null if there is no precursor.* |
89 | 07c87d4f | Georgios D. Tsoukalas | |
90 | 07c87d4f | Georgios D. Tsoukalas | |
91 | 07c87d4f | Georgios D. Tsoukalas | |
92 | 07c87d4f | Georgios D. Tsoukalas | Project Membership |
93 | 07c87d4f | Georgios D. Tsoukalas | ------------------------- |
94 | 07c87d4f | Georgios D. Tsoukalas | A *project membership* object maps a user to a project and holds |
95 | 07c87d4f | Georgios D. Tsoukalas | state for this mapping. |
96 | 07c87d4f | Georgios D. Tsoukalas | There are no inherent constraints to this mapping, |
97 | 07c87d4f | Georgios D. Tsoukalas | any user might be a member to any project. |
98 | 07c87d4f | Georgios D. Tsoukalas | |
99 | 07c87d4f | Georgios D. Tsoukalas | The **state** of membership can be: |
100 | 07c87d4f | Georgios D. Tsoukalas | |
101 | 07c87d4f | Georgios D. Tsoukalas | :(1): *pending acceptance* |
102 | 07c87d4f | Georgios D. Tsoukalas | :(2a): *rejected* |
103 | 07c87d4f | Georgios D. Tsoukalas | :(2b): *accepted, pending synchronization* |
104 | 07c87d4f | Georgios D. Tsoukalas | :(3): *active* |
105 | 07c87d4f | Georgios D. Tsoukalas | :(4): *pending removal* |
106 | 07c87d4f | Georgios D. Tsoukalas | :(5): *removed, pending synchronization* |
107 | 07c87d4f | Georgios D. Tsoukalas | :(6): *removed* |
108 | 07c87d4f | Georgios D. Tsoukalas | |
109 | 07c87d4f | Georgios D. Tsoukalas | The transitions from 2b to 3, and 5 to 6, must first |
110 | 07c87d4f | Georgios D. Tsoukalas | commit their starting state and then only update to the next state |
111 | 07c87d4f | Georgios D. Tsoukalas | after the *Synchronize Membership* procedure has been |
112 | 07c87d4f | Georgios D. Tsoukalas | acknowledged as successful. |
113 | 07c87d4f | Georgios D. Tsoukalas | |
114 | 07c87d4f | Georgios D. Tsoukalas | Except states 2b and 5 which explicitly state that they are *pending*, |
115 | 07c87d4f | Georgios D. Tsoukalas | all other states are considered *synchronized* |
116 | 07c87d4f | Georgios D. Tsoukalas | |
117 | 07c87d4f | Georgios D. Tsoukalas | |
118 | 07c87d4f | Georgios D. Tsoukalas | |
119 | 07c87d4f | Georgios D. Tsoukalas | Project |
120 | 07c87d4f | Georgios D. Tsoukalas | ------- |
121 | 07c87d4f | Georgios D. Tsoukalas | A **project** is created or modified upon the approval of an application. |
122 | 07c87d4f | Georgios D. Tsoukalas | It is initialized with the *definition* contained in the application, |
123 | 07c87d4f | Georgios D. Tsoukalas | and grants resources as specified, and acquires all the extra state needed. |
124 | 07c87d4f | Georgios D. Tsoukalas | The *definition* of a project does not belong to its mutable state, |
125 | 07c87d4f | Georgios D. Tsoukalas | and can only be changed by approving a new application. |
126 | 07c87d4f | Georgios D. Tsoukalas | The attributes for a project are: |
127 | 07c87d4f | Georgios D. Tsoukalas | |
128 | 07c87d4f | Georgios D. Tsoukalas | ``serial`` |
129 | 07c87d4f | Georgios D. Tsoukalas | *a unique serial number identifying the project* |
130 | 07c87d4f | Georgios D. Tsoukalas | |
131 | 07c87d4f | Georgios D. Tsoukalas | ``application`` |
132 | 07c87d4f | Georgios D. Tsoukalas | *the application which has created or modified the project. |
133 | 07c87d4f | Georgios D. Tsoukalas | An application is approved by setting it to this attribute.* |
134 | 07c87d4f | Georgios D. Tsoukalas | |
135 | 07c87d4f | Georgios D. Tsoukalas | ``last_application_synced`` |
136 | 07c87d4f | Georgios D. Tsoukalas | *the last application that was successfully synchronized with Quotaholder. |
137 | 07c87d4f | Georgios D. Tsoukalas | Normally, this is the same as the ``application`` above. |
138 | 07c87d4f | Georgios D. Tsoukalas | However, on approval, only ``application`` is set |
139 | 07c87d4f | Georgios D. Tsoukalas | so the two attributes differ, marking the project as pending definition |
140 | 07c87d4f | Georgios D. Tsoukalas | synchronization. Upon successful synchronization with Quotaholder, |
141 | 07c87d4f | Georgios D. Tsoukalas | ``last_application_synced`` is also set, |
142 | 07c87d4f | Georgios D. Tsoukalas | marking the project definition synchronized. |
143 | 07c87d4f | Georgios D. Tsoukalas | Note that if during the synchronization another approval |
144 | 07c87d4f | Georgios D. Tsoukalas | updates ``application``, then after synchronization the project |
145 | 07c87d4f | Georgios D. Tsoukalas | is still out of sync, and needs another loop.* |
146 | 07c87d4f | Georgios D. Tsoukalas | |
147 | 07c87d4f | Georgios D. Tsoukalas | ``creation_date`` |
148 | 07c87d4f | Georgios D. Tsoukalas | *when the project was created (i.e. was first approved)* |
149 | 07c87d4f | Georgios D. Tsoukalas | |
150 | 07c87d4f | Georgios D. Tsoukalas | ``last_approval_date`` |
151 | 07c87d4f | Georgios D. Tsoukalas | *when was the last approval (i.e. creation or modification). |
152 | 07c87d4f | Georgios D. Tsoukalas | Null if the project has not been approved or has been suspended.* |
153 | 07c87d4f | Georgios D. Tsoukalas | |
154 | 07c87d4f | Georgios D. Tsoukalas | ``termination_start_date`` |
155 | 07c87d4f | Georgios D. Tsoukalas | *when the project was ordered to terminate, |
156 | 07c87d4f | Georgios D. Tsoukalas | and declared out of sync for its resource grants to be removed. |
157 | 07c87d4f | Georgios D. Tsoukalas | (is null if the project has not been ordered to terminate)* |
158 | 07c87d4f | Georgios D. Tsoukalas | |
159 | 07c87d4f | Georgios D. Tsoukalas | ``termination_date`` |
160 | 07c87d4f | Georgios D. Tsoukalas | *when the project termination was actually completed by the service |
161 | 07c87d4f | Georgios D. Tsoukalas | following the successful revocation of resource grants. |
162 | 07c87d4f | Georgios D. Tsoukalas | (is null if the project has not been terminated)* |
163 | 07c87d4f | Georgios D. Tsoukalas | |
164 | 07c87d4f | Georgios D. Tsoukalas | ``members`` |
165 | 07c87d4f | Georgios D. Tsoukalas | *the set of members for this project* |
166 | 07c87d4f | Georgios D. Tsoukalas | |
167 | b22de10a | Sofia Papagiannaki | ``membership_dirty`` |
168 | 07c87d4f | Georgios D. Tsoukalas | *boolean attribute declaring that the project |
169 | 07c87d4f | Georgios D. Tsoukalas | needs membership synchronization. |
170 | 07c87d4f | Georgios D. Tsoukalas | It must be atomically set and committed before |
171 | 07c87d4f | Georgios D. Tsoukalas | any synchronization begins. |
172 | 07c87d4f | Georgios D. Tsoukalas | It must be unset only after synchronization |
173 | 07c87d4f | Georgios D. Tsoukalas | has been confirmed as successful.* |
174 | 07c87d4f | Georgios D. Tsoukalas | |
175 | 07c87d4f | Georgios D. Tsoukalas | |
176 | 07c87d4f | Georgios D. Tsoukalas | |
177 | 07c87d4f | Georgios D. Tsoukalas | Rules |
178 | 07c87d4f | Georgios D. Tsoukalas | ----- |
179 | 07c87d4f | Georgios D. Tsoukalas | |
180 | 07c87d4f | Georgios D. Tsoukalas | 1. **Valid projects** |
181 | 07c87d4f | Georgios D. Tsoukalas | |
182 | 07c87d4f | Georgios D. Tsoukalas | Projects are valid only if they violate none of the rules |
183 | 07c87d4f | Georgios D. Tsoukalas | |
184 | 07c87d4f | Georgios D. Tsoukalas | 2. **Active projects** |
185 | 07c87d4f | Georgios D. Tsoukalas | |
186 | 07c87d4f | Georgios D. Tsoukalas | A project is declared **active** when its resource grants are in effect. |
187 | 07c87d4f | Georgios D. Tsoukalas | A valid project can be active if and only if |
188 | 07c87d4f | Georgios D. Tsoukalas | - its ``last_approval_date`` is not null |
189 | 07c87d4f | Georgios D. Tsoukalas | - its ``termination_date`` is null |
190 | 07c87d4f | Georgios D. Tsoukalas | - its ``limit_on_members_number`` and ``limits_on_resources`` are not violated |
191 | 07c87d4f | Georgios D. Tsoukalas | |
192 | 07c87d4f | Georgios D. Tsoukalas | 2. **Terminated projects** |
193 | 07c87d4f | Georgios D. Tsoukalas | |
194 | 07c87d4f | Georgios D. Tsoukalas | A valid project is declared **terminated**, if and only if |
195 | 07c87d4f | Georgios D. Tsoukalas | its ``termination_date`` is not null |
196 | 07c87d4f | Georgios D. Tsoukalas | |
197 | 07c87d4f | Georgios D. Tsoukalas | 4. **Suspended projects** |
198 | 07c87d4f | Georgios D. Tsoukalas | |
199 | 07c87d4f | Georgios D. Tsoukalas | A valid project is declared **terminated** if and only if |
200 | 07c87d4f | Georgios D. Tsoukalas | |
201 | 07c87d4f | Georgios D. Tsoukalas | - its ``termination_date`` is null |
202 | 07c87d4f | Georgios D. Tsoukalas | - its ``last_approval_date`` is null, |
203 | 07c87d4f | Georgios D. Tsoukalas | or its ``limit_on_members_number`` and ``limits_on_resources`` are violated |
204 | 07c87d4f | Georgios D. Tsoukalas | |
205 | 07c87d4f | Georgios D. Tsoukalas | 5. **Alive projects** |
206 | 07c87d4f | Georgios D. Tsoukalas | |
207 | 07c87d4f | Georgios D. Tsoukalas | Projects are declared **alive** if they are either *active*, or *suspended*. |
208 | 07c87d4f | Georgios D. Tsoukalas | Users and owners are always able to interact with alive projects. |
209 | 07c87d4f | Georgios D. Tsoukalas | |
210 | 07c87d4f | Georgios D. Tsoukalas | 6. **Life status** |
211 | 07c87d4f | Georgios D. Tsoukalas | |
212 | 07c87d4f | Georgios D. Tsoukalas | The status of being alive, active, suspended, terminated. |
213 | 07c87d4f | Georgios D. Tsoukalas | |
214 | 07c87d4f | Georgios D. Tsoukalas | 7. **Project states** |
215 | 07c87d4f | Georgios D. Tsoukalas | |
216 | 07c87d4f | Georgios D. Tsoukalas | The states of a project that are significant from a control flow aspect, |
217 | 07c87d4f | Georgios D. Tsoukalas | are the following: |
218 | 07c87d4f | Georgios D. Tsoukalas | |
219 | 07c87d4f | Georgios D. Tsoukalas | :(0): pending approval |
220 | 07c87d4f | Georgios D. Tsoukalas | :(1a): alive, pending definition sync |
221 | 07c87d4f | Georgios D. Tsoukalas | :(1b): alive, pending membership sync |
222 | 07c87d4f | Georgios D. Tsoukalas | :(1c): alive, pending total sync |
223 | 07c87d4f | Georgios D. Tsoukalas | :(2): alive |
224 | 07c87d4f | Georgios D. Tsoukalas | :(3a): terminated, pending definition sync |
225 | 07c87d4f | Georgios D. Tsoukalas | :(3b): terminated, pending membership sync |
226 | 07c87d4f | Georgios D. Tsoukalas | :(3c): terminated, pending total sync |
227 | 07c87d4f | Georgios D. Tsoukalas | :(4): terminated |
228 | 07c87d4f | Georgios D. Tsoukalas | |
229 | 07c87d4f | Georgios D. Tsoukalas | |
230 | 07c87d4f | Georgios D. Tsoukalas | 7. **Synchronization status** |
231 | 07c87d4f | Georgios D. Tsoukalas | |
232 | 07c87d4f | Georgios D. Tsoukalas | The status of the project's synchronization with Quotaholder |
233 | 07c87d4f | Georgios D. Tsoukalas | can be either **synchronized** or **unsyncrhonized**. |
234 | 07c87d4f | Georgios D. Tsoukalas | |
235 | 07c87d4f | Georgios D. Tsoukalas | An alive project is delcared synchronized by setting |
236 | 07c87d4f | Georgios D. Tsoukalas | ``last_application_synced`` to be equal to the ``application``, |
237 | b22de10a | Sofia Papagiannaki | and setting ``membership_dirty`` to false, |
238 | 07c87d4f | Georgios D. Tsoukalas | |
239 | 07c87d4f | Georgios D. Tsoukalas | Semantically, the project becomes synchronized when its application |
240 | 07c87d4f | Georgios D. Tsoukalas | definition has been fully implemented and committed to quotaholder, |
241 | 07c87d4f | Georgios D. Tsoukalas | and all its memberships are also synchronized. |
242 | 07c87d4f | Georgios D. Tsoukalas | |
243 | 07c87d4f | Georgios D. Tsoukalas | The alive project loses its synchronization on two occasions. |
244 | 07c87d4f | Georgios D. Tsoukalas | On the approval of a new application modifying the project, |
245 | 07c87d4f | Georgios D. Tsoukalas | and on the addition or removal of any of its memberships. |
246 | 07c87d4f | Georgios D. Tsoukalas | |
247 | 07c87d4f | Georgios D. Tsoukalas | In general, also considering projects under termination, |
248 | 07c87d4f | Georgios D. Tsoukalas | a project is declared synchronized if and only if: |
249 | 07c87d4f | Georgios D. Tsoukalas | |
250 | 07c87d4f | Georgios D. Tsoukalas | - ``last_application_synced`` equals ``application`` |
251 | b22de10a | Sofia Papagiannaki | - ``membership_dirty`` is false |
252 | 07c87d4f | Georgios D. Tsoukalas | - ``termination_start_date`` is null or ``termination_date`` is set |
253 | 07c87d4f | Georgios D. Tsoukalas | |
254 | 07c87d4f | Georgios D. Tsoukalas | Depending on which of the previous three clauses fail, |
255 | 07c87d4f | Georgios D. Tsoukalas | a synchronizing process knows what to do: |
256 | 07c87d4f | Georgios D. Tsoukalas | definition, membership, or termination and combinations. |
257 | 07c87d4f | Georgios D. Tsoukalas | |
258 | 07c87d4f | Georgios D. Tsoukalas | 8. **Unique project names** |
259 | 07c87d4f | Georgios D. Tsoukalas | |
260 | 07c87d4f | Georgios D. Tsoukalas | The project name (as specified in its application's definition) |
261 | 07c87d4f | Georgios D. Tsoukalas | must be unique among all *alive* projects. |
262 | 07c87d4f | Georgios D. Tsoukalas | |
263 | 07c87d4f | Georgios D. Tsoukalas | 9. **Inconsistent dates** |
264 | 07c87d4f | Georgios D. Tsoukalas | |
265 | 07c87d4f | Georgios D. Tsoukalas | If either ``creation_date`` or ``last_approval_date`` |
266 | 07c87d4f | Georgios D. Tsoukalas | is in the future, the project state is declared **inconsistent** |
267 | 07c87d4f | Georgios D. Tsoukalas | but the project is still considered created or approved, respectively. |
268 | 07c87d4f | Georgios D. Tsoukalas | |
269 | 07c87d4f | Georgios D. Tsoukalas | If ``termination_date`` is in the future, the project state is declared |
270 | 07c87d4f | Georgios D. Tsoukalas | **inconsistent** but the project is still considered terminated. |
271 | 07c87d4f | Georgios D. Tsoukalas | |
272 | 07c87d4f | Georgios D. Tsoukalas | 10. **No project without application** |
273 | 07c87d4f | Georgios D. Tsoukalas | |
274 | 07c87d4f | Georgios D. Tsoukalas | A project can only exist in reference of the application that has defined it. |
275 | 07c87d4f | Georgios D. Tsoukalas | The attributes in the definition such as its name, resource grants |
276 | 07c87d4f | Georgios D. Tsoukalas | cannot be modified without a new application that must be approved. |
277 | 07c87d4f | Georgios D. Tsoukalas | |
278 | 07c87d4f | Georgios D. Tsoukalas | 11. **Creating and modifying projects with follow-up applications** |
279 | 07c87d4f | Georgios D. Tsoukalas | |
280 | 07c87d4f | Georgios D. Tsoukalas | Every application for a project can be followed up with another one. |
281 | 07c87d4f | Georgios D. Tsoukalas | The new application points back to it with its ``precursor`` attribute. |
282 | 07c87d4f | Georgios D. Tsoukalas | |
283 | 07c87d4f | Georgios D. Tsoukalas | This means that an applicant can update their application |
284 | 07c87d4f | Georgios D. Tsoukalas | before it has been approved. |
285 | 07c87d4f | Georgios D. Tsoukalas | |
286 | 07c87d4f | Georgios D. Tsoukalas | Apart from an applicant, whoever can approve the project, |
287 | 07c87d4f | Georgios D. Tsoukalas | can also post a follow up application for it, modifying |
288 | 07c87d4f | Georgios D. Tsoukalas | some aspects of the definition and approve that instead. |
289 | 07c87d4f | Georgios D. Tsoukalas | For example, a user might request for 100 GB storage, |
290 | 07c87d4f | Georgios D. Tsoukalas | but the Service may approve a project with only 80GB, |
291 | 07c87d4f | Georgios D. Tsoukalas | via a follow up application. |
292 | 07c87d4f | Georgios D. Tsoukalas | |
293 | 07c87d4f | Georgios D. Tsoukalas | If the precursor of an application is not associated with a project |
294 | 07c87d4f | Georgios D. Tsoukalas | (i.e. no project references it as its defining ``application``), |
295 | 07c87d4f | Georgios D. Tsoukalas | then a new project entry is created and initialized. |
296 | 07c87d4f | Georgios D. Tsoukalas | |
297 | 07c87d4f | Georgios D. Tsoukalas | If the precursor of an application *is* associated with a valid project, |
298 | 07c87d4f | Georgios D. Tsoukalas | then the same project entry is used and is re-initialized according |
299 | 07c87d4f | Georgios D. Tsoukalas | to the new application's definition. |
300 | 07c87d4f | Georgios D. Tsoukalas | The project is made alive (if terminated) and its previous state |
301 | 07c87d4f | Georgios D. Tsoukalas | is maintained (mainly, the member set). |
302 | 07c87d4f | Georgios D. Tsoukalas | If the new definition causes the project to exceed its limits, |
303 | 07c87d4f | Georgios D. Tsoukalas | it will be suspended as required. |
304 | 07c87d4f | Georgios D. Tsoukalas | |
305 | 07c87d4f | Georgios D. Tsoukalas | |
306 | 07c87d4f | Georgios D. Tsoukalas | |
307 | 07c87d4f | Georgios D. Tsoukalas | Procedures |
308 | 07c87d4f | Georgios D. Tsoukalas | ---------- |
309 | 07c87d4f | Georgios D. Tsoukalas | |
310 | 07c87d4f | Georgios D. Tsoukalas | The following procedures are considered essential primitives |
311 | 07c87d4f | Georgios D. Tsoukalas | for the function of the Projects feature, and should constitute |
312 | 07c87d4f | Georgios D. Tsoukalas | a natural *internal* API to it. This is not a public API for users, |
313 | 07c87d4f | Georgios D. Tsoukalas | although the public one should be thinly layered on top of it. |
314 | 07c87d4f | Georgios D. Tsoukalas | |
315 | 07c87d4f | Georgios D. Tsoukalas | For quotaholder interactions, a primitive to synchronize quotaholder |
316 | 07c87d4f | Georgios D. Tsoukalas | with a user's resource quotas is assumed to be available. |
317 | 07c87d4f | Georgios D. Tsoukalas | |
318 | 07c87d4f | Georgios D. Tsoukalas | #. Submit an application |
319 | 07c87d4f | Georgios D. Tsoukalas | |
320 | 07c87d4f | Georgios D. Tsoukalas | Every user might submit an application to create or modify a project. |
321 | 07c87d4f | Georgios D. Tsoukalas | There are no inherent constraints. |
322 | 07c87d4f | Georgios D. Tsoukalas | However, policy may impose restrictions. |
323 | 07c87d4f | Georgios D. Tsoukalas | |
324 | 07c87d4f | Georgios D. Tsoukalas | #. Retrieve applications |
325 | 07c87d4f | Georgios D. Tsoukalas | |
326 | 07c87d4f | Georgios D. Tsoukalas | Applications should be retrievable by serial, by applicant, |
327 | 07c87d4f | Georgios D. Tsoukalas | and by approval status. |
328 | 07c87d4f | Georgios D. Tsoukalas | Because applications are immutable, some kind of extra state |
329 | 07c87d4f | Georgios D. Tsoukalas | is needed in order to index by approval status. |
330 | 07c87d4f | Georgios D. Tsoukalas | For example, one might instantiate a mutable object for approval state, |
331 | 07c87d4f | Georgios D. Tsoukalas | with attributes (``approval_serial``, ``approval_state``, ``approval_data``) |
332 | 07c87d4f | Georgios D. Tsoukalas | |
333 | 07c87d4f | Georgios D. Tsoukalas | #. Approve an application (create or modify a Project) |
334 | 07c87d4f | Georgios D. Tsoukalas | |
335 | 07c87d4f | Georgios D. Tsoukalas | Application approval must atomically perform and commit all of the following: |
336 | 07c87d4f | Georgios D. Tsoukalas | - create or modify the project at its specified definition |
337 | 07c87d4f | Georgios D. Tsoukalas | - set the project state to be pending synchronization with quotaholder |
338 | 07c87d4f | Georgios D. Tsoukalas | |
339 | 07c87d4f | Georgios D. Tsoukalas | After committing, the procedure to synchronize the project (see below) |
340 | 07c87d4f | Georgios D. Tsoukalas | should be called. |
341 | 07c87d4f | Georgios D. Tsoukalas | |
342 | 07c87d4f | Georgios D. Tsoukalas | #. Retrieve projects |
343 | 07c87d4f | Georgios D. Tsoukalas | |
344 | 07c87d4f | Georgios D. Tsoukalas | Projects should be retrievable by serial, by owner, |
345 | 07c87d4f | Georgios D. Tsoukalas | by application, by life status, and by synchronization status. |
346 | 07c87d4f | Georgios D. Tsoukalas | |
347 | 07c87d4f | Georgios D. Tsoukalas | *By application* means that given an application, one must be able |
348 | 07c87d4f | Georgios D. Tsoukalas | to retrieve the project that has it approved, if any. |
349 | 07c87d4f | Georgios D. Tsoukalas | |
350 | 07c87d4f | Georgios D. Tsoukalas | #. Add or remove a user to a project |
351 | 07c87d4f | Georgios D. Tsoukalas | |
352 | 07c87d4f | Georgios D. Tsoukalas | When a new membership is created for a project or |
353 | 07c87d4f | Georgios D. Tsoukalas | an existing one is modified, then in the same |
354 | 07c87d4f | Georgios D. Tsoukalas | transaction the project must be declared *unsynchronized*. |
355 | 07c87d4f | Georgios D. Tsoukalas | |
356 | 07c87d4f | Georgios D. Tsoukalas | #. Suspend a project |
357 | 07c87d4f | Georgios D. Tsoukalas | |
358 | 07c87d4f | Georgios D. Tsoukalas | A project is suspended by setting ``last_approval_date`` to None |
359 | 07c87d4f | Georgios D. Tsoukalas | |
360 | 07c87d4f | Georgios D. Tsoukalas | #. Terminate a project |
361 | 07c87d4f | Georgios D. Tsoukalas | |
362 | 07c87d4f | Georgios D. Tsoukalas | Project termination must atomically perform and commit all of the following: |
363 | 07c87d4f | Georgios D. Tsoukalas | - set the project ``termination_start_date`` |
364 | 07c87d4f | Georgios D. Tsoukalas | - set the ``termination_date`` to null (this is a redundant safeguard) |
365 | 07c87d4f | Georgios D. Tsoukalas | in order to mark the project as pending termination synchronization. |
366 | 07c87d4f | Georgios D. Tsoukalas | |
367 | 07c87d4f | Georgios D. Tsoukalas | After committing, the procedure to synchronize the project (see below) |
368 | 07c87d4f | Georgios D. Tsoukalas | should be called. |
369 | 07c87d4f | Georgios D. Tsoukalas | |
370 | 07c87d4f | Georgios D. Tsoukalas | #. Synchronize a membership with quotaholder |
371 | 07c87d4f | Georgios D. Tsoukalas | |
372 | 07c87d4f | Georgios D. Tsoukalas | This procedure is not required to be an independent procedure |
373 | 07c87d4f | Georgios D. Tsoukalas | available for individual memberships. |
374 | 07c87d4f | Georgios D. Tsoukalas | That is, if user synchronization takes care of all memberships, |
375 | 07c87d4f | Georgios D. Tsoukalas | one can call user synchronization instead of membership synchronization. |
376 | 07c87d4f | Georgios D. Tsoukalas | |
377 | 07c87d4f | Georgios D. Tsoukalas | #. Synchronize a user with quotaholder |
378 | 07c87d4f | Georgios D. Tsoukalas | |
379 | 07c87d4f | Georgios D. Tsoukalas | User synchronization is equivalent to the synchronization of |
380 | 07c87d4f | Georgios D. Tsoukalas | all the user's memberships. |
381 | 07c87d4f | Georgios D. Tsoukalas | |
382 | 07c87d4f | Georgios D. Tsoukalas | #. Synchronize a project with quotaholder |
383 | 07c87d4f | Georgios D. Tsoukalas | |
384 | 07c87d4f | Georgios D. Tsoukalas | Project synchronization is equivelent to the synchronization of |
385 | 07c87d4f | Georgios D. Tsoukalas | either all its memberships, or all its members. |
386 | 07c87d4f | Georgios D. Tsoukalas | |
387 | 07c87d4f | Georgios D. Tsoukalas | |
388 | 07c87d4f | Georgios D. Tsoukalas | |
389 | 07c87d4f | Georgios D. Tsoukalas | View elements |
390 | 07c87d4f | Georgios D. Tsoukalas | ------------- |
391 | 07c87d4f | Georgios D. Tsoukalas | In this context, view elements refer to (at best effort) self-contained |
392 | 07c87d4f | Georgios D. Tsoukalas | elements that display information for and offer interaction with their |
393 | 07c87d4f | Georgios D. Tsoukalas | underlying objects. A final view, such as a web page, or console command |
394 | 07c87d4f | Georgios D. Tsoukalas | output, may include several elements. |
395 | 07c87d4f | Georgios D. Tsoukalas | |
396 | 07c87d4f | Georgios D. Tsoukalas | Interaction with the feature is going through several view elements. |
397 | 07c87d4f | Georgios D. Tsoukalas | Each element has two pieces of input, |
398 | 07c87d4f | Georgios D. Tsoukalas | the *objects being referenced*, and the *accessing user*, |
399 | 07c87d4f | Georgios D. Tsoukalas | and its appearance and function is accordingly parametrized. |
400 | 07c87d4f | Georgios D. Tsoukalas | |
401 | 07c87d4f | Georgios D. Tsoukalas | Each *project element* may need to display information |
402 | 07c87d4f | Georgios D. Tsoukalas | that internally belongs to its linked object, |
403 | 07c87d4f | Georgios D. Tsoukalas | such as its *definition* or *memberships*. |
404 | 07c87d4f | Georgios D. Tsoukalas | |
405 | 07c87d4f | Georgios D. Tsoukalas | A proposed list of elements is following. |
406 | 07c87d4f | Georgios D. Tsoukalas | The elements are only considered building blocks |
407 | 07c87d4f | Georgios D. Tsoukalas | for views and not full views by themselves. |
408 | 07c87d4f | Georgios D. Tsoukalas | More on views later on. |
409 | 07c87d4f | Georgios D. Tsoukalas | |
410 | 07c87d4f | Georgios D. Tsoukalas | #. Project list element |
411 | 07c87d4f | Georgios D. Tsoukalas | |
412 | 07c87d4f | Georgios D. Tsoukalas | This represents a list of *projects.* |
413 | 07c87d4f | Georgios D. Tsoukalas | Technically, most of information about a project resides in its *application*. |
414 | 07c87d4f | Georgios D. Tsoukalas | |
415 | 07c87d4f | Georgios D. Tsoukalas | In the case of a *pending application*, |
416 | 07c87d4f | Georgios D. Tsoukalas | one that has not been approved yet, |
417 | 07c87d4f | Georgios D. Tsoukalas | then the row is filled with data from the |
418 | 07c87d4f | Georgios D. Tsoukalas | current (approved and effective) application, |
419 | 07c87d4f | Georgios D. Tsoukalas | or they are left blank if no such project exists yet. |
420 | 07c87d4f | Georgios D. Tsoukalas | |
421 | 07c87d4f | Georgios D. Tsoukalas | Additionally, the column that displays the pending status |
422 | 07c87d4f | Georgios D. Tsoukalas | of the project (creation or modification), should be a link |
423 | 07c87d4f | Georgios D. Tsoukalas | to the corresponding application detail element. |
424 | 07c87d4f | Georgios D. Tsoukalas | |
425 | 07c87d4f | Georgios D. Tsoukalas | #. Membership element |
426 | 07c87d4f | Georgios D. Tsoukalas | |
427 | 07c87d4f | Georgios D. Tsoukalas | A list of project members for a single (or maybe multiple) projects. |
428 | 07c87d4f | Georgios D. Tsoukalas | The list must not display user emails if the viewer is not the owner |
429 | 07c87d4f | Georgios D. Tsoukalas | of the group, or a service administrator. |
430 | 07c87d4f | Georgios D. Tsoukalas | |
431 | 07c87d4f | Georgios D. Tsoukalas | #. Application details element |
432 | 07c87d4f | Georgios D. Tsoukalas | |
433 | 07c87d4f | Georgios D. Tsoukalas | Displays all application details in full, |
434 | 07c87d4f | Georgios D. Tsoukalas | with a link to the (alive) project it defines, if any, |
435 | 07c87d4f | Georgios D. Tsoukalas | or a pending notice, |
436 | 07c87d4f | Georgios D. Tsoukalas | or an obsolescence note if the project it defined was since modified, |
437 | 07c87d4f | Georgios D. Tsoukalas | or a rejection notice. |
438 | 07c87d4f | Georgios D. Tsoukalas | |
439 | 07c87d4f | Georgios D. Tsoukalas | #. Project details element |
440 | 07c87d4f | Georgios D. Tsoukalas | |
441 | 07c87d4f | Georgios D. Tsoukalas | This element contains both details for the defining application |
442 | 07c87d4f | Georgios D. Tsoukalas | and for the current state of the project. |
443 | 07c87d4f | Georgios D. Tsoukalas | |
444 | 07c87d4f | Georgios D. Tsoukalas | Details for the current state of the project may include |
445 | 07c87d4f | Georgios D. Tsoukalas | statistics on membership and resource usage. |
446 | 07c87d4f | Georgios D. Tsoukalas | |
447 | 07c87d4f | Georgios D. Tsoukalas | #. Application form element |
448 | 07c87d4f | Georgios D. Tsoukalas | |
449 | 07c87d4f | Georgios D. Tsoukalas | It submits a new application. |
450 | 07c87d4f | Georgios D. Tsoukalas | If the application is in reference |
451 | 07c87d4f | Georgios D. Tsoukalas | to previous application (the ``precursor``) |
452 | 07c87d4f | Georgios D. Tsoukalas | then the form should be initialized to be a copy of it. |
453 | 07c87d4f | Georgios D. Tsoukalas | |
454 | 07c87d4f | Georgios D. Tsoukalas | Otherwise, it may be blank, or initialized with defaults from a template. |
455 | 07c87d4f | Georgios D. Tsoukalas | |
456 | 07c87d4f | Georgios D. Tsoukalas | #. Project search element |
457 | 07c87d4f | Georgios D. Tsoukalas | |
458 | 07c87d4f | Georgios D. Tsoukalas | This is an entry point to a listing, with configurable filtering. |
459 | 07c87d4f | Georgios D. Tsoukalas | |
460 | 07c87d4f | Georgios D. Tsoukalas | #. History and statistics view |
461 | 07c87d4f | Georgios D. Tsoukalas | |
462 | 07c87d4f | Georgios D. Tsoukalas | No specification currently. |