Skip to content

CW_27 export #186

Open
Y-Vaishnavi wants to merge 22 commits into
eclipse-score:mainfrom
Y-Vaishnavi:5A6A3ABB4B74F4375B4D7C51733A2996
Open

CW_27 export #186
Y-Vaishnavi wants to merge 22 commits into
eclipse-score:mainfrom
Y-Vaishnavi:5A6A3ABB4B74F4375B4D7C51733A2996

Conversation

@Y-Vaishnavi

Copy link
Copy Markdown
Contributor

Notes for Reviewer

Pre-Review Checklist for the PR Author

  • PR title is short, expressive and meaningful
  • Commits are properly organized
  • Relevant issues are linked in the References section
  • Tests are conducted
  • Unit tests are added

Checklist for the PR Reviewer

  • Commits are properly organized and messages are according to the guideline
  • Unit tests have been written for new behavior
  • Public API is documented
  • PR title describes the changes

Post-review Checklist for the PR Author

  • All open points are addressed and tracked via issues

References

Closes #

Pawel Pyszko and others added 22 commits July 13, 2026 13:25
GIT_ORIGIN_SPP_REV_ID: 243bfaba861fbab5b7a7ea9b6af0bba5b4cdadda
GIT_ORIGIN_SPP_REV_ID: 1de1429b675ff1facae779b5e9784ce264f49be9
GIT_ORIGIN_SPP_REV_ID: 3ce4a16139ba4989d519542a3956e8b94b7b5a2a
GIT_ORIGIN_SPP_REV_ID: 131518ccd71157043c1b0d52462bdac390462c9a
GIT_ORIGIN_SPP_REV_ID: 155ca77ddfcb19319e82feee8132c29909f87201
- client_session_interaction_sequence using inotify
- activity_watchdog_session_lifecycle handling stale sessions
- sequence_early_disconnect_race handling any race during
session startup

GIT_ORIGIN_SPP_REV_ID: a98614e80bc35fa95c4c63c7936e159f61057b9b
Increase message-passing notify limits to allow
server->client non-blocking notifications as
described in the Notify-based acquire design.

GIT_ORIGIN_SPP_REV_ID: 71ef3ab5e83849c989f3b95747a75c2029213f66
Replace per-client AcquireRequest delivery
via client sender Send() with server-side
IServerConnection::Notify().
This avoids reply-blocked MsgSend/writev on a
shared client engine thread and prevents
cross-client head-of-line blocking.
GIT_ORIGIN_SPP_REV_ID: 36526ff0ea5d08488960a7a22418fb1bb810bd99
Register an IClientConnection NotifyCallback and
process kAcquireRequest notifications by switching
buffers and replying with kAcquireResponse.
This is the client-side Notify-based acquire design.

GIT_ORIGIN_SPP_REV_ID: 735123e22884507b8c9ab85f0833ae28a5b7865e
Track per-session state and avoid sending additional
kAcquireRequest notifications while a previous request
is still outstanding. Clear stored server connection
pointers on disconnect to avoid stale references.

GIT_ORIGIN_SPP_REV_ID: 5cafcea87edf14043e3ebe1a85a11d90dde75e75
Track per-session acquire deadlines and miss counts
and tear down sessions that do not reply with
kAcquireResponse within the configured deadline
for N consecutive misses. The watchdog runs
off the existing mp_worker periodic tick to
avoid per-session OS timers.

GIT_ORIGIN_SPP_REV_ID: 84bb226ff8e017049e94740294234de06310a7f6
- Remove the unused per-client IClientFactory dependency
from the message passing server.
- NotifyAcquireRequestFailed() is no longer used
after the Notify based acquire refactoring.

GIT_ORIGIN_SPP_REV_ID: 48aeeefb01510f1d9599c339796e11a13a422e30
- If a client disconnects while OnConnectRequest is
creating a session outside mutex_, disconnect_callback
previously could not clear connection_ because the PID was
not yet in pid_session_map_.
- This could lead to storing &connection after the
framework already tore the connection down.
- Track early disconnects per PID and refuse to
store a connection pointer when
a disconnect was observed.

GIT_ORIGIN_SPP_REV_ID: 879672cc335db046848fe15571a0672c1616ee0a
Avoid relying on implementation-defined steady_clock
epochs and make the deadline not set
state explicit.

GIT_ORIGIN_SPP_REV_ID: 5f3da32556784c74bde3d52de069446907633c3d
Add a unit test that verifies the acquire watchdog.
After an initial missed deadline, a late but valid
AcquireResponse must reset the miss counter so the
client is only torn down after the configured number of
subsequent misses.

GIT_ORIGIN_SPP_REV_ID: 4667d0ea0811633d2fe10b57e1293aa0810be185
- test ensuring that OnAcquireResponse ignores messages
coming from a stale server connection after a client
reconnects with the same PID.

GIT_ORIGIN_SPP_REV_ID: 927c11ac7b4fd20cbd8e91930b25b4505f08788d
- Now that datarouter does not connect to client's
IServer, the disconnect callback is never called.
- Addds RequestInternatShutdown when the state
callback kStopped is received.

GIT_ORIGIN_SPP_REV_ID: fd475ea00de2bc097c8ae6f128344bf8641bddc1
GIT_ORIGIN_SPP_REV_ID: 7d681ddd0dae1e8b63ace4e3fccab211a2773380
- The server already uses IServerConnection::Notify()
on the existing single channel to send acquire requests.
The client's second channel is redundant.

GIT_ORIGIN_SPP_REV_ID: e0802ae92ba9090de244ac7ef14872cb3432c213
- Treat ENOBUFS as a transient error and let the watchdog
handle the unresponsive client - this mitigates
session disconnection if the client is slow usually
during startups

GIT_ORIGIN_SPP_REV_ID: 35579555a589dfeab63587b6c3cac7640984963d
- release the global mutex before calling
connection->Notify()
- Removed NotifyAcquireRequestWhileLocked()
as it is no longer needed.

GIT_ORIGIN_SPP_REV_ID: 0546d81a5efcccaabeb0fc843acc102d57f7ea84
GIT_ORIGIN_SPP_REV_ID: 35a2250fa80b6e15f22e51288ba7a9d16c883ebc
@github-actions

Copy link
Copy Markdown

License Check Results

🚀 The license check job ran with the Bazel command:

bazel run --lockfile_mode=error //:license-check

Status: ⚠️ Needs Review

Click to expand output
[License Check Output]
Extracting Bazel installation...
Starting local Bazel server (8.6.0) and connecting to it...
INFO: Invocation ID: c03575e3-4415-419d-99a3-fa47cd4e817d
Computing main repo mapping: 
Computing main repo mapping: 
WARNING: For repository 'score_process', the root module requires module version score_process@1.5.4, but got score_process@1.6.0 in the resolved dependency graph. Please update the version in your MODULE.bazel or set --check_direct_dependencies=off
WARNING: For repository 'score_crates', the root module requires module version score_crates@0.0.9, but got score_crates@0.0.10 in the resolved dependency graph. Please update the version in your MODULE.bazel or set --check_direct_dependencies=off
Computing main repo mapping: 
Computing main repo mapping: 
Loading: 
Loading: 4 packages loaded
Loading: 4 packages loaded
    currently loading: 
Loading: 4 packages loaded
    currently loading: 
WARNING: Target pattern parsing failed.
ERROR: Skipping '//:license-check': no such target '//:license-check': target 'license-check' not declared in package '' defined by /home/runner/work/logging/logging/BUILD
ERROR: no such target '//:license-check': target 'license-check' not declared in package '' defined by /home/runner/work/logging/logging/BUILD
INFO: Elapsed time: 9.205s
INFO: 0 processes.
ERROR: Build did NOT complete successfully
ERROR: Build failed. Not running target

@Y-Vaishnavi Y-Vaishnavi deployed to workflow-approval July 13, 2026 09:07 — with GitHub Actions Active
@Y-Vaishnavi Y-Vaishnavi requested a review from RSingh1511 July 13, 2026 09:43
@Y-Vaishnavi Y-Vaishnavi marked this pull request as ready for review July 14, 2026 05:28
- The `DataRouterRecorder` constructor creates a `DatarouterMessageClient` instance, spawning a thread that attempts server connections every 100ms.
- Upon successful connection, the client transmits a message containing application information to the server.
- The `DataRouterRecorder` destructor notifies the thread, causing normal termination.
The main idea is to keep clients independent, so that one non-responsive client should not stall the datarouter. This matters because the datarouter serves all clients from a single thread, one after another on each periodic tick, so a single blocking call would hold up every other client. To avoid this, the datarouter asks for buffers (to read) using non-blocking QNX pulses (`IServerConnection::Notify()`), which return right away and never wait on the client. So if a client is slow or stuck, its pulse simply stays unanswered while the healthy clients keep getting served. See [session_sequence_diagram](uml/client_session_interaction_sequence.puml) for the full flow.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

activity_watchdog_session_lifecycle.puml and the other .puml files are missing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

2 participants