Skip to content

Calculate type hash from TypeDescription (rep2011) - #1027

Merged
clalancette merged 8 commits into
ros2:rollingfrom
emersonknapp:emersonknapp/type-version-hash
Mar 29, 2023
Merged

Calculate type hash from TypeDescription (rep2011)#1027
clalancette merged 8 commits into
ros2:rollingfrom
emersonknapp:emersonknapp/type-version-hash

Conversation

@emersonknapp

@emersonknapp emersonknapp commented Jan 17, 2023

Copy link
Copy Markdown
Collaborator

Related to ros-infrastructure/rep#358
Part of ros2/ros2#1159
Depends on ros2/rosidl#729

This PR introduces a utility function to provide a stable reproducible hash for type_description_interfaces/msg/TypeDescription for use in type comparison/advertising in REP-2011

@emersonknapp emersonknapp changed the title [WIP] REP-2011 Type Version Hash Calculator [WIP] REP-2011 Type Version Hash at runtime Jan 24, 2023
@emersonknapp emersonknapp changed the title [WIP] REP-2011 Type Version Hash at runtime Type Version Hash at runtime (rep-2011) Feb 1, 2023
@emersonknapp
emersonknapp marked this pull request as ready for review February 1, 2023 00:50

@clalancette clalancette left a comment

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.

I've left a few suggestions for improvement inline, along with some questions.

Besides that, this PR should be retargeted to rolling, which is our default branch. Also, this can't be merged until we merge in the type_description_interfaces package.

Comment thread rcl/include/rcl/type_version_hash.h Outdated
Comment thread rcl/include/rcl/type_version_hash.h Outdated
Comment thread rcl/include/rcl/type_version_hash.h Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/include/rcl/type_version_hash.h Outdated
Comment thread rcl/include/rcl/type_version_hash.h Outdated
@emersonknapp
emersonknapp changed the base branch from master to rolling February 1, 2023 20:43
@emersonknapp

Copy link
Copy Markdown
Collaborator Author

Changed the base branch, Yes, I've marked the dependency in the description - though github doesn't understand that language, it has only the "closes" behavior semantic for cross-linking issues.

Addressing other comments shortly.

@clalancette

Copy link
Copy Markdown
Contributor

Changed the base branch, Yes, I've marked the dependency in the description - though github doesn't understand that language, it has only the "closes" behavior semantic for cross-linking issues.

Thanks. Yeah, it would be nice if we could express these dependencies in GitHub somehow. The good news is that this will totally fail to compile in CI until type_description_interfaces is available, so we should be OK.

@emersonknapp

Copy link
Copy Markdown
Collaborator Author

OK - I think I've addressed everything. I appreciate the feedback, round 2 welcome :)

@emersonknapp
emersonknapp requested review from clalancette and removed request for audrow, ivanpauno and wjwwood February 1, 2023 22:49

@clalancette clalancette left a comment

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.

Overall, I love this new structure; so much better than the macros. Thanks for taking the time to investigate this!

I've left a couple of minor comments inline; otherwise, I think this is ready to go modulo getting the type_description_interface package in.

Comment thread rcl/src/rcl/type_version_hash.c Outdated
Comment thread rcl/src/rcl/type_version_hash.c Outdated

@clalancette clalancette left a comment

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.

This looks good to me! We should discuss how to get ros2/rcl_interfaces#146 landed.

@emersonknapp
emersonknapp force-pushed the emersonknapp/type-version-hash branch from ca813b1 to 024c4c5 Compare February 7, 2023 03:02
@emersonknapp
emersonknapp force-pushed the emersonknapp/type-version-hash branch from 024c4c5 to d5cae44 Compare February 15, 2023 23:13
@emersonknapp emersonknapp changed the title Type Version Hash at runtime (rep-2011) Calculate type hash from TypeDescription (rep2011) Feb 21, 2023
@emersonknapp

Copy link
Copy Markdown
Collaborator Author

Moving this back to draft while working out the type hash struct - which this calculator should also provide

@emersonknapp
emersonknapp marked this pull request as draft February 22, 2023 00:49
@emersonknapp
emersonknapp force-pushed the emersonknapp/type-version-hash branch 3 times, most recently from 0ffcc0f to 96a8486 Compare March 13, 2023 06:24

@clalancette clalancette left a comment

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.

I left a few more nits to fix here, otherwise looks pretty good to me.

Comment thread rcl/include/rcl/type_version_hash.h Outdated
Comment thread rcl/src/rcl/type_version_hash.c
Comment thread rcl/test/rcl/test_type_version_hash.cpp
Comment thread rcl/test/rcl/test_type_version_hash.cpp
Comment thread rcl/test/rcl/test_type_version_hash.cpp
@emersonknapp
emersonknapp force-pushed the emersonknapp/type-version-hash branch from 30144b6 to ade7055 Compare March 22, 2023 08:45
@emersonknapp
emersonknapp marked this pull request as ready for review March 22, 2023 08:46

@wjwwood wjwwood left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

other than the implicit dependency on libyaml, this lgtm

Comment thread rcl/include/rcl/type_hash.h Outdated
* the JSON representation of type_description. Note that output_repr will have a
* terminating null character, which should be omitted from hashing. To do so, use
* (output_repr.buffer_length - 1) or strlen(output_repr.buffer) for the size of data to hash.
* \return RCL_RET_OK on success, RCL_RET_ERROR if any problems occur in translation

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nitpick: you might want to have a look at how the other rcl functions document return types, I think they use one per \return and wrap the return types in `RCL_RET_...` for a reason, but I can't remember them off-hand. Thought I do think it's best to just emulate them.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done (they use

\return #RCL_RET_... for reason, or
\return #RCL_RET_... for a final reason, period.

so I did that

Comment thread rcl/src/rcl/type_hash.c

#include <stdio.h>

#include <yaml.h>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This concerns me, I think it's coming in implicitly through rcl_yaml_param_parser. I actually don't love depending on libyaml from rcl proper like this, though the effect is the same as the current situation, since we hard depend on the yaml stuff in rcl_yaml_param_parser.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think we should do something different, I think we should use libyaml, but I do think we need to explicitly depend on libyaml, via package.xml and CMake.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
@emersonknapp
emersonknapp force-pushed the emersonknapp/type-version-hash branch from 9245a40 to febd2ff Compare March 24, 2023 17:27

@clalancette clalancette left a comment

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.

Two small comment updates, then this looks good to me.

Comment thread rcl/include/rcl/type_hash.h Outdated
Comment thread rcl/include/rcl/type_hash.h Outdated
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
@emersonknapp
emersonknapp requested review from clalancette and wjwwood and removed request for clalancette and wjwwood March 27, 2023 21:35
@emersonknapp

Copy link
Copy Markdown
Collaborator Author

Gist: https://gist.githubusercontent.com/emersonknapp/ff276a843492f27fd1afac2806fdb849/raw/e273147f65788680698e21401ce10184f120cdfd/ros2.repos
BUILD args: --packages-above-and-dependencies rcl
TEST args: --packages-above rcl
ROS Distro: rolling
Job: ci_launcher
ci_launcher ran: https://ci.ros2.org/job/ci_launcher/11684

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

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
@emersonknapp

emersonknapp commented Mar 28, 2023

Copy link
Copy Markdown
Collaborator Author

Gist: https://gist.githubusercontent.com/emersonknapp/e163a4a54a5fa58279b131748d54a31b/raw/e273147f65788680698e21401ce10184f120cdfd/ros2.repos
BUILD args: --packages-above-and-dependencies rcl
TEST args: --packages-above rcl
ROS Distro: rolling
Job: ci_launcher
ci_launcher ran: https://ci.ros2.org/job/ci_launcher/11688

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

@clalancette

Copy link
Copy Markdown
Contributor

FYI, windows build is failing with:

LINK : fatal error LNK1181: cannot open input file 'yaml.lib' [C:\ci\ws\build\rcl_lifecycle\rcl_lifecycle.vcxproj]

We might need an extra export or something? Not sure.

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
@emersonknapp

emersonknapp commented Mar 28, 2023

Copy link
Copy Markdown
Collaborator Author
  • Linux Build Status
  • Linux-aarch64 Build Status
  • Windows Build Status

I noticed that the other project using this dependency, rcl_yaml_param_parser, switched over to using target_link_libraries away from ament_target_dependencies. That allowed it to hide yaml behind a PRIVATE dependency. I was hesitant to try that conversion and confuse the rest of this review, though

@clalancette

Copy link
Copy Markdown
Contributor

I noticed that the other project using this dependency, rcl_yaml_param_parser, switched over to using target_link_libraries away from ament_target_dependencies. That allowed it to hide yaml behind a PRIVATE dependency. I was hesitant to try that conversion and confuse the rest of this review, though

I almost think it is worth it, but there is enough going on here that we can punt it. Assuming what you did already fixes the problem for now, I'll do a follow-up where we switch to target_link_libraries, since it makes it a lot nicer.

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
@emersonknapp

emersonknapp commented Mar 29, 2023

Copy link
Copy Markdown
Collaborator Author
  • Linux Build Status
  • Linux-aarch64 Build Status
  • Windows Build Status

@clalancette
clalancette merged commit 973951d into ros2:rolling Mar 29, 2023
achim-k pushed a commit to achim-k/rcl that referenced this pull request Apr 5, 2023
* Convert TypeDescription to YAML and hash

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
Signed-off-by: Hans-Joachim Krauch <achim.krauch@gmail.com>
danthony06 pushed a commit to danthony06/rcl that referenced this pull request Jun 14, 2023
* Convert TypeDescription to YAML and hash

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
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.

4 participants