Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / docs / projects_specs.rst @ 07c87d4f

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 07c87d4f Georgios D. Tsoukalas
``membership_updated``
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 07c87d4f Georgios D. Tsoukalas
    and setting ``membership_updated`` 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 07c87d4f Georgios D. Tsoukalas
    - ``membership_updated`` 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.