1 ["plantuml", "08_processAppSingleInst", "svg"]
7 autonumber "<font color=red><b>[00]"
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
20 osgi -> module : <<init>>
22 module -> provider : initializeProvider()
24 provider -> cssProvider : registerClusterSingletonService()
27 cssProvider -> cssGroup : <<init>>
30 cssProvider <-- cssGroup
32 deactivate cssProvider
33 cssProvider -> cssGroup : initializationClusterSingletonGroup()
36 cssGroup -> eos : registerCandidate
40 cssProvider <-- cssGroup
42 deactivate cssProvider
44 cssProvider -> cssGroup : registerService
47 cssProvider <-- cssGroup
49 deactivate cssProvider
51 provider <-- cssProvider
52 deactivate cssProvider
59 alt "Get MainCandidate Role Master"
60 eos -> eos : <<getRole(MainCandidate)>>
62 hasOwner=false call election
63 hasOwner=true return Slave for every new registration
66 cssProvider <- eos : ownershipChanged(MainEntity, isOwner=true)
68 cssProvider -> cssGroup : ownerchipChanged(MainEntity, isOwner=true)
70 cssGroup -> eos : registerCandidate(CloseGuardEntity)
74 cssProvider <-- cssGroup
77 deactivate cssProvider
79 eos -> eos : newElection
81 initialization phase does not have close guard
82 candidate registration so it starts with election
85 cssProvider <- eos : ownershipChanged(CloseGuardEntity, isOwner=true)
87 cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=true)
89 cssGroup -> provider : instantiateServiceInstance()
91 provider -> body : <<init>>
98 cssProvider <-- cssGroup
101 deactivate cssProvider
104 else "Get MainCandidate Role Slave"
107 cssProvider <- eos : ownershipChanged(MainEntity, isOwner=false)
109 cssProvider -> cssGroup
111 note over cssGroup : "NOOP"
112 cssProvider <-- cssGroup
115 deactivate cssProvider
121 alt "Get MainCandidate Role Master"
122 eos -> eos : <<newElection>>
124 cssProvider <- eos : ownershipChanged(MainEntity, isOwner=true)
126 cssProvider -> cssGroup : ownershipChanged(MainEntity, isOwner=true)
128 cssGroup -> eos : registerCandidate(CloseGuardEntity)
132 cssProvider <-- cssGroup
135 deactivate cssProvider
139 hasOwner=true so EOS returns Slave and we have to
140 wait for unregistration old Leader of CloseGuard Candidate
143 cssProvider <-eos : ownershipChanged(CloseGuardEntity, isOwner=false)
145 cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=false)
147 note over cssGroup : "NOOP"
148 cssProvider <-cssGroup
151 deactivate cssProvider
154 else "Get MainCandidate Role Slave"
155 eos -> eos : <<newElection>>
157 cssProvider <- eos : ownershipChanged(MainEntity, isOwner=false)
159 cssProvider -> cssGroup : ownershipChanged(MainEntity, isOwner=false)
161 cssGroup -> provider : closeServiceInstance()
163 provider -\ body : <<close>>
166 note over body : "close could be async. operation"
169 cssGroup <-- provider
171 cssGroup -> eos : unregisterCandidate(CloseGuardEntity)
175 cssProvider <-- cssGroup
178 deactivate cssProvider
181 else "Get CloseGuardCandidate Role Master"
182 eos -> eos : <<newElection>>
184 cssProvider <- eos : ownershipChanged(CloseGuardEntity, isOwner=true)
186 cssProvider -> cssGroup : ownershipChanged(CloseGuardEntity, isOwner=true)
188 cssGroup -> provider : instantiateServiceInstance()
190 provider -> body : <<init>>
195 cssGroup <-- provider
197 cssProvider <-- cssGroup
200 deactivate cssProvider
208 osgi -> module : <<close>>
210 module -> provider : close()
212 provider -> cssGroup : closeRegistration()
214 cssGroup -> eos : unregisterCandidate(MainEntity)
218 provider <-- cssGroup
226 alt "Get MainCandidate Leader Role Slave"
228 cssProvider <- eos : ownersipChanged(MainEntity, wasOwner=true)
230 cssProvider -> cssGroup : ownershipChanged(MainEntity, wasOwner=true)
232 cssGroup -> provider : closeServiceInstance()
234 provider -\ body : <<close>>
237 deactivate cssProvider
240 note over body : "close could be async. operation"
245 provider -> cssGroup : unregisterCandidate(CloseGuardEntity)
247 cssGroup -> eos : unregisterCandidate(CloseGuardEntity)
251 provider <-- cssGroup
255 else "Get MainCandidate NotLeader Role Slave"
257 cssProvider <- eos : ownershipChange(MainEntity, wasOwner=false)
259 cssProvider -> cssGroup
261 note over cssGroup : "NOOP"
262 cssProvider <-- cssGroup
265 deactivate cssProvider