Skip to content

Replace std::default_random_engine with std::mt19937 (humble)#2847

Merged
fujitatomoya merged 1 commit intoros2:humblefrom
keeponoiro:improve-random-generator-humble
May 30, 2025
Merged

Replace std::default_random_engine with std::mt19937 (humble)#2847
fujitatomoya merged 1 commit intoros2:humblefrom
keeponoiro:improve-random-generator-humble

Conversation

@keeponoiro
Copy link
Copy Markdown
Contributor

This PR addresses issue #2842, where std::default_random_engine can lead to periodic goal ID duplication due to its underlying implementation in GCC (minstd_rand0). When actions are executed frequently, this periodicity increases the likelihood of duplicate goal IDs, potentially causing unintended behavior.

In extreme cases, duplicate goal IDs can:

Trigger an exception when attempting to accept a new goal (goal ID already exists).

Extend the expiration time of the first goal when a duplicate ID is encountered.

To mitigate this, this PR replaces std::default_random_engine with std::mt19937, which provides a higher-quality random number generator with better distribution properties, reducing the risk of goal ID collisions.

Changes in this PR
std::default_random_engine → std::mt19937 in client_base.cpp

Ensures goal ID randomness to prevent collisions in high-frequency action executions.

Testing
In a 13-hour test, we observed periodic goal ID duplication when using std::default_random_engine.

Same goal ID appeared twice within a 10-minute period.

When goal ID retention was reduced to 1 minute, the issue no longer occurred.

With std::mt19937, goal ID duplication is effectively mitigated.

Impact
No ABI breakage.

Improves reliability of goal ID generation.

Addresses unintended goal expiration extension issues.

Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
Copy link
Copy Markdown
Collaborator

@fujitatomoya fujitatomoya left a comment

Choose a reason for hiding this comment

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

lgtm with green CI.

@fujitatomoya
Copy link
Copy Markdown
Collaborator

fujitatomoya commented May 29, 2025

Pulls: #2847
Gist: https://gist.githubusercontent.com/fujitatomoya/a64c0b61a25930cb7d3b7d805a0ef2f8/raw/81e54f37dbbe5a689fb220240c04687b54e03c83/ros2.repos
BUILD args: --packages-above-and-dependencies rclcpp_action
TEST args: --packages-above rclcpp_action
ROS Distro: humble
Job: ci_launcher
ci_launcher ran: https://ci.ros2.org/job/ci_launcher/16123

  • Linux Build Status
  • Linux-aarch64 Build Status
  • Linux-rhel Build Status
  • Windows Build Status

@fujitatomoya
Copy link
Copy Markdown
Collaborator

Note

Need forward-port to Jazzy

@fujitatomoya fujitatomoya merged commit a0e2240 into ros2:humble May 30, 2025
3 checks passed
@fujitatomoya
Copy link
Copy Markdown
Collaborator

@Mergifyio backport jazzy

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented May 30, 2025

backport jazzy

✅ Backports have been created

Details

mergify bot pushed a commit that referenced this pull request May 30, 2025
Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
(cherry picked from commit a0e2240)
fujitatomoya pushed a commit that referenced this pull request May 31, 2025
…#2867)

(cherry picked from commit a0e2240)

Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
Co-authored-by: keeponoiro <keeeeeeep@gmail.com>
skyegalaxy pushed a commit to irobot-ros/rclcpp that referenced this pull request Jul 25, 2025
) (ros2#2867)

(cherry picked from commit a0e2240)

Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
Co-authored-by: keeponoiro <keeeeeeep@gmail.com>
skyegalaxy added a commit to irobot-ros/rclcpp that referenced this pull request Jul 28, 2025
* QoSInitialization::from_rmw does not validate invalid history policy values, leading to silent failures (ros2#2841) (ros2#2845)

(cherry picked from commit 73e9bfb)

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>

* get_all_data_impl() does not handle null pointers properly, causing segmentation fault (backport ros2#2840) (ros2#2851)

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>

* Added missing chrono includes (ros2#2854) (ros2#2856)

(cherry picked from commit 373a63c)

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>

* Fix for memory leaks in rclcpp::SerializedMessage (ros2#2861) (ros2#2864)

(cherry picked from commit 8d44b95)

Signed-off-by: Michael Orlov <morlovmr@gmail.com>
Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
Co-authored-by: Michael Orlov <morlovmr@gmail.com>
Co-authored-by: kylemarcey <marcey.kyle@gmail.com>

* Replace std::default_random_engine with std::mt19937 (humble) (ros2#2847) (ros2#2867)

(cherry picked from commit a0e2240)

Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
Co-authored-by: keeponoiro <keeeeeeep@gmail.com>

* Changelog

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>

* 28.1.10

* fix test_publisher_with_system_default_qos. (ros2#2881) (ros2#2883)

(cherry picked from commit e6577c6)

Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com>

* Shutdown deadlock fix jazzy (ros2#2887)

* fix: Don't deadlock if removing shutdown callbacks in a shutdown callback

Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com>

* refactor: Made fix API compatible

Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com>

---------

Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com>
Co-authored-by: Janosch Machowinski <J.Machowinski@cellumation.com>

* Event exec timer fix for ros2#2889 (ros2#2890)

Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com>
Signed-off-by: Janosch Machowinski <jmachowinski@users.noreply.github.com>
Co-authored-by: Janosch Machowinski <J.Machowinski@cellumation.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>

* Add overload of `append_parameter_override` (ros2#2891) (ros2#2895)

(cherry picked from commit fa0cf2d)

Signed-off-by: Patrick Roncagliolo <ronca.pat@gmail.com>
Co-authored-by: Patrick Roncagliolo <ronca.pat@gmail.com>

* Fujitatomoya/test append parameter override (ros2#2896) (ros2#2900)

(cherry picked from commit 84c6fb1)

Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com>

* [jazzy] Expose `typesupport_helpers` API needed for the Rosbag2 (backport ros2#2858) (ros2#2902)

* Expose `typesupport_helpers` API needed for the Rosbag2 (ros2#2858)

* Expose extract_type_identifier and get_typesupport_library_path API

- Rationale: We need to use this API in the Rosbag2
- Reference PR ros2/rosbag2#2017 in the Rosbag2

Signed-off-by: Michael Orlov <michael.orlov@apex.ai>

* Use C++ style in doxygen documentation

Signed-off-by: Michael Orlov <michael.orlov@apex.ai>

---------

Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
(cherry picked from commit 448287b)

# Conflicts:
#	rclcpp/include/rclcpp/typesupport_helpers.hpp

* Address merge conflicts

Signed-off-by: Michael Orlov <michael.orlov@apex.ai>

---------

Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
Co-authored-by: Michael Orlov <morlovmr@gmail.com>

* Add qos parameter for wait_for_message function (ros2#2903) (ros2#2906)

(cherry picked from commit 2fcef70)

Signed-off-by: Sriharsha Ghanta <ghanta1996@gmail.com>
Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Co-authored-by: Sriharsha Ghanta <ghanta_sriharsha@mymail.sutd.edu.sg>
Co-authored-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>

* Fix `start_type_description_service` param handling (ros2#2897) (ros2#2909)

* Fix `start_type_description_service` param handling



* Add test



* Demonstrate different exceptions depending on node options



* Same exact exception and `what()` message in both cases



* Uncrustify



---------


(cherry picked from commit 4fb558a)

Signed-off-by: Patrick Roncagliolo <ronca.pat@gmail.com>
Co-authored-by: Patrick Roncagliolo <ronca.pat@gmail.com>

---------

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Michael Orlov <morlovmr@gmail.com>
Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
Signed-off-by: keeponoiro <keeeeeeep@gmail.com>
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com>
Signed-off-by: Janosch Machowinski <jmachowinski@users.noreply.github.com>
Signed-off-by: Patrick Roncagliolo <ronca.pat@gmail.com>
Signed-off-by: Sriharsha Ghanta <ghanta1996@gmail.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>
Co-authored-by: Michael Orlov <morlovmr@gmail.com>
Co-authored-by: kylemarcey <marcey.kyle@gmail.com>
Co-authored-by: keeponoiro <keeeeeeep@gmail.com>
Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Co-authored-by: Janosch Machowinski <jmachowinski@users.noreply.github.com>
Co-authored-by: Janosch Machowinski <J.Machowinski@cellumation.com>
Co-authored-by: Patrick Roncagliolo <ronca.pat@gmail.com>
Co-authored-by: Sriharsha Ghanta <ghanta_sriharsha@mymail.sutd.edu.sg>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants