2ae1abd5d56a6487012827f631238958fd4ad306
[mdsal.git] / singleton-service / mdsal-singleton-common-api / src / site / asciidoc / 08_processAppSingleInst.plantuml
1 ["plantuml", "08_processAppSingleInst", "svg"]
2
3 ------------
4 @startuml
5
6
7   autonumber "<font color=red><b>[00]"
8
9   participant "OSGi container" as osgi
10   participant "AbstractModule<ODL app>" as module
11   participant "ODL ServiceProvider\nextends ClusterSingletonService" as provider
12   participant "ODL app Body" as body
13   participant "ClusterSingletonServiceProvider" as cssProvider
14   participant "ClusterSingletonServiceGroup" as cssGroup
15   participant "EntityOwnershipService" as eos
16
17   == Initialization ==
18
19   activate osgi
20     osgi -> module : <<init>>
21     activate module
22       module -> provider : initializeProvider()
23       activate provider
24         provider -> cssProvider : registerClusterSingletonService()
25         activate cssProvider
26   alt "New Group"
27           cssProvider -> cssGroup : <<init>>
28           activate cssProvider
29             activate cssGroup
30               cssProvider <-- cssGroup
31             deactivate cssGroup
32           deactivate cssProvider
33           cssProvider -> cssGroup : initializationClusterSingletonGroup()
34           activate cssProvider
35             activate cssGroup
36               cssGroup -> eos : registerCandidate
37               activate eos
38                 cssGroup <-- eos
39               deactivate eos
40               cssProvider <-- cssGroup
41             deactivate cssGroup
42           deactivate cssProvider
43   else "Group is exist"
44           cssProvider -> cssGroup : registerService
45           activate cssProvider
46             activate cssGroup
47               cssProvider <-- cssGroup
48             deactivate cssGroup
49           deactivate cssProvider
50   end
51         provider <-- cssProvider
52         deactivate cssProvider
53         module <-- provider
54       deactivate provider
55       osgi <-- module
56     deactivate module
57   deactivate osgi
58
59   alt "Get MainCandidate Role Master"
60     eos -> eos : <<getRole(MainCandidate)>>
61     note over eos
62       hasOwner=false call election
63       hasOwner=true return Slave for every new registration
64     end note
65     activate eos
66       cssProvider <- eos : ownershipChanged(MainEntity, isOwner=true)
67       activate cssProvider
68         cssProvider -> cssGroup : ownerchipChanged(MainEntity, isOwner=true)
69         activate cssGroup
70           cssGroup -> eos : registerCandidate(CloseGuardEntity)
71           activate eos
72             cssGroup <-- eos
73           deactivate eos
74           cssProvider <-- cssGroup
75         deactivate cssGroup
76         cssProvider --> eos
77       deactivate cssProvider
78     deactivate eos
79     eos -> eos : newElection
80     note over eos
81       initialization phase does not have close guard
82       candidate registration so it starts with election
83     end note
84     activate eos
85       cssProvider <- eos : ownershipChanged(CloseGuardEntity, isOwner=true)
86       activate cssProvider
87         cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=true)
88         activate cssGroup
89           cssGroup -> provider : instantiateServiceInstance()
90           activate provider
91             provider -> body : <<init>>
92             activate body
93               ...
94               provider <-- body
95             deactivate body
96             cssGroup <-- provider
97           deactivate provider
98           cssProvider <-- cssGroup
99         deactivate cssGroup
100         cssProvider --> eos
101       deactivate cssProvider
102     deactivate eos
103
104   else "Get MainCandidate Role Slave"
105     eos -> eos : getRole
106     activate eos
107       cssProvider <- eos : ownershipChanged(MainEntity, isOwner=false)
108       activate cssProvider
109         cssProvider -> cssGroup
110         activate cssGroup
111           note over cssGroup : "NOOP"
112           cssProvider <-- cssGroup
113         deactivate cssGroup
114         cssProvider --> eos
115       deactivate cssProvider
116     deactivate eos
117   end
118
119   == Repetition ==
120
121   alt "Get MainCandidate Role Master"
122     eos -> eos : <<newElection>>
123     activate eos
124       cssProvider <- eos : ownershipChanged(MainEntity, isOwner=true)
125       activate cssProvider
126         cssProvider -> cssGroup : ownershipChanged(MainEntity, isOwner=true)
127         activate cssGroup
128           cssGroup -> eos : registerCandidate(CloseGuardEntity)
129           activate eos
130             cssGroup <-- eos
131           deactivate eos
132           cssProvider <-- cssGroup
133         deactivate cssGroup
134         cssProvider --> eos
135       deactivate cssProvider
136     deactivate eos
137     eos -> eos : getRole
138     note over eos
139       hasOwner=true so EOS returns Slave and we have to
140       wait for unregistration old Leader of CloseGuard Candidate
141     end note
142     activate eos
143       cssProvider <-eos : ownershipChanged(CloseGuardEntity, isOwner=false)
144       activate cssProvider
145         cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=false)
146         activate cssGroup
147           note over cssGroup : "NOOP"
148             cssProvider <-cssGroup
149         deactivate cssGroup
150       cssProvider --> eos
151       deactivate cssProvider
152     deactivate eos
153
154   else "Get MainCandidate Role Slave"
155     eos -> eos : <<newElection>>
156     activate eos
157       cssProvider <- eos : ownershipChanged(MainEntity, isOwner=false)
158       activate cssProvider
159         cssProvider -> cssGroup : ownershipChanged(MainEntity, isOwner=false)
160         activate cssGroup
161           cssGroup -> provider : closeServiceInstance()
162           activate provider
163             provider -\ body : <<close>>
164             activate body
165               ...
166               note over body : "close could be async. operation"
167               provider \-- body
168             deactivate body
169             cssGroup <-- provider
170           deactivate provider
171           cssGroup -> eos : unregisterCandidate(CloseGuardEntity)
172           activate eos
173             cssGroup <-- eos
174           deactivate eos
175           cssProvider <-- cssGroup
176         deactivate cssGroup
177         cssProvider --> eos
178       deactivate cssProvider
179     deactivate eos
180
181   else "Get CloseGuardCandidate Role Master"
182     eos -> eos : <<newElection>>
183     activate eos
184       cssProvider <- eos : ownershipChanged(CloseGuardEntity, isOwner=true)
185       activate cssProvider
186         cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=true)
187         activate cssGroup
188           cssGroup -> provider : instantiateServiceInstance()
189           activate provider
190             provider -> body : <<init>>
191             activate body
192               ...
193               provider <-- body
194             deactivate body
195             cssGroup <-- provider
196           deactivate provider
197           cssProvider <-- cssGroup
198         deactivate cssGroup
199         cssProvider --> eos
200       deactivate cssProvider
201     deactivate eos
202
203   end
204
205   == Termination ==
206
207   activate osgi
208     osgi -> module : <<close>>
209     activate module
210       module -> provider : close()
211       activate provider
212         provider -> cssGroup : closeRegistration()
213         activate cssGroup
214           cssGroup -> eos : unregisterCandidate(MainEntity)
215           activate eos
216             cssGroup <-- eos
217           deactivate eos
218           provider <-- cssGroup
219         deactivate cssGroup
220         module <-- provider
221       deactivate provider
222       osgi <-- module
223     deactivate module
224   deactivate osgi
225
226   alt "Get MainCandidate Leader Role Slave"
227     activate eos
228       cssProvider <- eos : ownersipChanged(MainEntity, wasOwner=true)
229       activate cssProvider
230         cssProvider -> cssGroup : ownershipChanged(MainEntity, wasOwner=true)
231         activate cssGroup
232           cssGroup -> provider : closeServiceInstance()
233           activate provider
234             provider -\ body : <<close>>
235           deactivate provider
236         deactivate cssGroup
237       deactivate cssProvider
238     deactivate eos
239     activate body
240       note over body : "close could be async. operation"
241       ...
242       provider \-- body
243     deactivate body
244     activate provider
245       provider -> cssGroup : unregisterCandidate(CloseGuardEntity)
246       activate cssGroup
247         cssGroup -> eos : unregisterCandidate(CloseGuardEntity)
248         activate eos
249           cssGroup <-- eos
250         deactivate eos
251         provider <-- cssGroup
252       deactivate cssGroup
253     deactivate provider
254
255   else "Get MainCandidate NotLeader Role Slave"
256     activate eos
257       cssProvider <- eos : ownershipChange(MainEntity, wasOwner=false)
258       activate cssProvider
259         cssProvider -> cssGroup
260         activate cssGroup
261           note over cssGroup : "NOOP"
262           cssProvider <-- cssGroup
263         deactivate cssGroup
264         cssProvider --> eos
265       deactivate cssProvider
266     deactivate eos
267
268   end
269
270
271 @enduml
272 ------------