Skip to content

Commit 888cd33

Browse files
committed
mw/com: migrate_umlet_to_plantuml__events_fields
Closes eclipse-score#44 Issue: SWP-208704 GIT_ORIGIN_SPP_REV_ID: 8f28b3196ef347a15fcb9acd8c602e2835960194
1 parent 5855344 commit 888cd33

29 files changed

+1259
-7212
lines changed

score/mw/com/design/events_fields/README.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ field-collection!
5555
## Event related datastructures in LoLa binding
5656

5757
Here we provide insight, how event communication is realized within our `LoLa` (shared memory based) binding. The
58-
following class diagram shows LooLa specific binding implementation and its relationship with binding independent parts:
58+
following class diagram shows LoLa specific binding implementation and its relationship with binding independent parts:
5959

60-
![Structural View](broken_link_k/swh/ddad_score/mw/com/design/events_fields/event_lola_model.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
60+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/event_lola_model.puml">
6161

6262
The referenced class `SubscriptionStateMachine` within this model is further detailed (including its dependent entities)
6363
further [below](#event-subscription).
@@ -188,37 +188,37 @@ The API entry point to events on the server/skeleton side is
188188
In any case a memory-allocation (rather a free event slot search) needs to be done. The general activity to be done in
189189
this case is pictured in the following activity diagram:
190190

191-
![Activity Allocate Sample Slot](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_event_allocate_activity.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
191+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_event_allocate_activity.puml">
192192

193193
In case of a mixed criticality setup with an ASIL-B provider/skeleton and both - ASIL-B and ASIL-QM consumers, where
194194
discrete control structures are needed to separate ASIL-B/QM, the activities to be taken by the ASIL-B skeleton are as
195195
follows:
196196

197-
![Activity Allocate Mixed Criticality](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_event_allocate_mixed_critical_activity.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
197+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_event_allocate_mixed_critical_activity.puml">
198198

199199
During this activity a more complex sub-activity is executed/referenced, to achieve a coherent change of slot states in
200200
both control structures (containing a rollback mechanism). This activity is modeled separately here:
201201

202-
![Coherent Status Update](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_coherent_set_writing_activity.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
202+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_coherent_set_writing_activity.puml">
203203

204204
### Proxy side Activities for Event Access
205205

206206
The central API entry point at proxy/consumer side to access event samples (after a successful subscription) is the
207207
`GetNewSamples()` method of an event instance. The activities taken by the proxy side implementation are as follows:
208208

209-
![Activity GetNewSamples](broken_link_k/swh/ddad_score/mw/com/design/events_fields/get_new_samples_activity.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
209+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/get_new_samples_activity.puml">
210210

211211
The activity shown above thereby relies on activity `ReferenceNextEvent`, which is shown here:
212212

213-
![Activity GetNewSamples](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_reference_next_event_activity.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
213+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_reference_next_event_activity.puml">
214214

215215
The main proxy algorithm above the shared memory data structures is broken into three entities:
216-
`score::mw::com::impl::lola::ProxyEvent`, `score::mw::com::impl::lola::ProxyEventCommon` and `score::mw::com::impl::lola::SlotCollector`.
216+
`score::mw::com::impl::lola::ProxyEvent`, `score::mw::com::impl::lola::ProxyEventCommon` and `score::mw::com::impl::lola::SlotCollector`.
217217
While `ProxyEvent` is a type-aware templated class, `ProxyEventCommon` and `SlotCollector` are both type-agnostic. All ProxyEvent
218-
functionality that doesn't require awareness of the type or direct interaction with shared memory are dispatched from `ProxyEvent`
219-
to `ProxyEventCommon`. `SlotCollector` operates on the shared memory control structure without knowledge of the actual type.
220-
`ProxyEvent` implements the functionality (including direct interaction with shared memory) that require awareness of the type.
221-
Making `ProxyEventCommon` and `SlotCollector` type-agnostic results in a slight build time benefit since type-agnostic code doesn't
218+
functionality that doesn't require awareness of the type or direct interaction with shared memory are dispatched from `ProxyEvent`
219+
to `ProxyEventCommon`. `SlotCollector` operates on the shared memory control structure without knowledge of the actual type.
220+
`ProxyEvent` implements the functionality (including direct interaction with shared memory) that require awareness of the type.
221+
Making `ProxyEventCommon` and `SlotCollector` type-agnostic results in a slight build time benefit since type-agnostic code doesn't
222222
need to be instantiated-then-merged by the build toolchain as this would be the case if that code was part of the templated class.
223223

224224
## Notifications between skeleton and proxy
@@ -280,7 +280,7 @@ once we resort back to sideband channel communication for `Subscribe` and `Unsub
280280
We encapsulate the low-level mechanisms provided by `score::mw::com::message_passing` via
281281
class `lola::MessagePassingFacade`, which is shown in the following class model:
282282

283-
![Structural View_MessagePassing](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_message_passing_model.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
283+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_message_passing_model.puml">
284284

285285
### `lola::MessagePassingFacade` is a Smart Proxy
286286

@@ -299,7 +299,7 @@ same event, which is provided by a skeleton instance in LoLa Process 2, then the
299299
**So the general idea is:**
300300
Since we have made the decision, to route the entire message-passing of a LoLa enabled process over one (or two in case
301301
of ASIL) messaging channel to get more flexibility/control over the amount of receiver/listener threads to be used, we
302-
also shall take a further benefit!
302+
also shall take a further benefit!
303303
That is: This central entity (`lola::MessagePassingFacade`), which cares for the routing, has total overview of the
304304
messaging requirements of its local proxy/skeleton instances and should remove all potential redundancies and thereby
305305
**minimizing the IPC** over `score::mw::com::message_passing` to a bare minimum! Therefore, the notion of **Smart Proxy**.
@@ -313,7 +313,7 @@ The `score::mw::com::message_passing::Receiver`s used by `lola::MessagePassingFa
313313
initialization of our `mw::com` runtime. Depending on the `ara::com`/`mw::com` deployment info for the
314314
executable/process, it can be decided, whether only QM (ASIL-QM) or QM and ASIL (ASIL-B) Receivers are needed.
315315

316-
![Sequence Message Passing Init](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_msg_pass_initialize_seq.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
316+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_msg_pass_initialize_seq.puml">
317317

318318
### Event subscription
319319

@@ -340,18 +340,18 @@ instance has been described [here](../skeleton_proxy/README.md#proxy-auto-reconn
340340

341341
The structure and transitions of the state machine are shown in:
342342

343-
![Proxy Event Subscription State Machine](broken_link_k/swh/ddad_score/mw/com/design/events_fields/proxy_event_state_machine.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
343+
![LOLA_MSG_PASS_PROXY_EVENT_STATE_MACHINEINITIALIZE_SEQ](broken_link_k/swh/safe-posix-platform/score/mw/com/design/events_fields/lola_msg_pass_proxy_event_state_machineinitialize_seq.puml)
344344

345345
The structural model of the state machine design is as follows:
346346

347-
![Structural View Proxy Event Subscription State Machine](broken_link_k/swh/ddad_score/mw/com/design/events_fields/proxy_event_state_machine_model.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
347+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/proxy_event_state_machine_model.puml">
348348

349349
### Event Update Notification
350350

351351
Event Notification is a good showcase for the "smart" behavior of `lola::MessagePassingFacade` as already mentioned (see
352352
example above). Here event notification registrations are aggregated and related messages are only sent once:
353353

354-
![Sequence Message Passing Event Notify](broken_link_k/swh/ddad_score/mw/com/design/events_fields/lola_msg_pass_event_notify.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
354+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/lola_msg_pass_event_notify.puml">
355355

356356
#### Managing user provided EventReceiveHandlers
357357

@@ -438,7 +438,7 @@ looks like! This sequence builds on message passing concepts/sequences already d
438438
[Notifications between skeleton and proxy](#notifications-between-skeleton-and-proxy) and the design of data-structures
439439
placed in shared memory discussed [here](#event-related-datastructures-in-lola-binding)
440440

441-
![Sequence Update Event and Access via Polling](broken_link_k/swh/ddad_score/mw/com/design/events_fields/event_poll_lola_seq.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
441+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/event_poll_lola_seq.puml">
442442

443443
# General implementation details of score::mw::com
444444

@@ -471,4 +471,4 @@ central counter buried inside `SampleReferenceTracker` is atomic.
471471

472472
This sequence diagram depicts the mechanics behind the reference counting on proxy side:
473473

474-
![Sequence during sample reception on proxy side](broken_link_k/swh/ddad_score/mw/com/design/events_fields/sampleptr_ref_counting.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d)
474+
<img src="https://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/eclipse-score/communication/refs/heads/main/score/mw/com/design/events_fields/sampleptr_ref_counting.puml">

0 commit comments

Comments
 (0)