call action handlers after action, in c++ server #850
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changelog
Guarantees that action handlers in C++ ws server are called after the action has been applied.
Docs
https://github.com/orgs/foxglove/discussions/1049
Description
Problem
In C++ server, handlers for below events are called before the internal states are fully updated:
As a consequence, some user behavior does not work as expected, such as calling
sendMessage()
for messages of the requested topic inside of subscription handler. When subscription handler is called, the internal state does not recognize the requested topic as subscribed, andsendMessage()
filters out this unsubscribed topic.This seems to be a bug rather than a spec, because typescript and python server implementations calls listener/emit event after all internal tables are updated.
Changes
For the above events, switch the order of handler call and internal map updates.
https://linear.app/foxglove/issue/FG-9181/c-foxglove-websocket-server-ambiguous-handler-invoke-timing