-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor(ffi): Make get_schema_subtree_bitmap
a public method of KeyValuePairLogEvent
.
#581
refactor(ffi): Make get_schema_subtree_bitmap
a public method of KeyValuePairLogEvent
.
#581
Conversation
WalkthroughThe changes introduce a new method, Changes
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (2)
components/core/src/clp/ffi/KeyValuePairLogEvent.hpp (1)
64-73
: LGTM: Well-documented method with appropriate designThe method declaration is well-designed with proper const qualification and error handling. The documentation clearly explains the purpose and error conditions.
Consider adding a brief example in the documentation to illustrate the bitmap's structure, making it more intuitive for users.
Add this to the documentation:
* @return A result containing a bitmap where every bit corresponds to the ID of a node in the * schema tree, and the set bits correspond to the nodes in the subtree defined by all paths * from the root node to the nodes in `node_id_value_pairs`; or an error code indicating a + * failure. For example, if node IDs 1, 3, and 4 are in the path, the bitmap would be + * [1,1,0,1,1] (assuming 5 total nodes). * - std::errc::result_out_of_range if a node ID in `node_id_value_pairs` doesn't exist in the * schema tree.components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (1)
350-378
: Implementation looks good with room for optimization.The method correctly implements the bitmap generation logic with proper error handling. However, consider caching the parent traversal results to optimize cases where multiple nodes share common ancestors.
Consider this optimization to reduce repeated parent traversals:
auto KeyValuePairLogEvent::get_schema_subtree_bitmap() const -> OUTCOME_V2_NAMESPACE::std_result<vector<bool>> { auto schema_subtree_bitmap{vector<bool>(m_schema_tree->get_size(), false)}; + std::unordered_set<SchemaTree::Node::id_t> processed_parents; for (auto const& [node_id, val] : m_node_id_value_pairs) { if (node_id >= schema_subtree_bitmap.size()) { return std::errc::result_out_of_range; } schema_subtree_bitmap[node_id] = true; auto optional_parent_id{m_schema_tree->get_node(node_id).get_parent_id()}; while (true) { if (false == optional_parent_id.has_value()) { break; } auto const parent_id{optional_parent_id.value()}; - if (schema_subtree_bitmap[parent_id]) { + if (processed_parents.contains(parent_id)) { break; } schema_subtree_bitmap[parent_id] = true; + processed_parents.insert(parent_id); optional_parent_id = m_schema_tree->get_node(parent_id).get_parent_id(); } } return schema_subtree_bitmap; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
components/core/src/clp/ffi/KeyValuePairLogEvent.cpp
(2 hunks)components/core/src/clp/ffi/KeyValuePairLogEvent.hpp
(2 hunks)
🧰 Additional context used
📓 Learnings (1)
components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (3)
Learnt from: LinZhihao-723
PR: y-scope/clp#554
File: components/core/src/clp/ffi/KeyValuePairLogEvent.cpp:109-111
Timestamp: 2024-10-10T15:19:52.408Z
Learning: In `KeyValuePairLogEvent.cpp`, for the class `JsonSerializationIterator`, it's acceptable to use raw pointers for member variables like `m_schema_tree_node`, and there's no need to replace them with references or smart pointers in this use case.
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/src/clp/ffi/KeyValuePairLogEvent.hpp:62-68
Timestamp: 2024-10-14T03:38:57.921Z
Learning: In `KeyValuePairLogEvent.hpp`, the methods `get_auto_generated_schema_tree()` and `get_user_generated_schema_tree()` do not need to check for null shared pointers because the factory function ensures they are not null.
Learnt from: LinZhihao-723
PR: y-scope/clp#554
File: components/core/src/clp/ffi/KeyValuePairLogEvent.cpp:102-102
Timestamp: 2024-10-10T15:21:14.506Z
Learning: In `KeyValuePairLogEvent.cpp`, the `get_next_child_schema_tree_node()` method in `JsonSerializationIterator` is always called after checking `has_next_child_schema_tree_node()`, ensuring proper iterator usage.
🔇 Additional comments (3)
components/core/src/clp/ffi/KeyValuePairLogEvent.hpp (2)
8-8
: LGTM: Necessary header inclusion
The addition of header is appropriate for the new method's return type and follows proper include ordering.
72-73
: Verify integration with serialize_to_json method
The method has access to necessary member variables. Let's verify its integration with serialize_to_json.
✅ Verification successful
The results show that get_schema_subtree_bitmap
is properly integrated with serialize_to_json
. The implementation shows that:
get_schema_subtree_bitmap
uses the member variables (m_schema_tree
,m_node_id_value_pairs
)serialize_to_json
callsget_schema_subtree_bitmap
and handles its return value appropriately- The error handling is consistent between both methods using
OUTCOME_V2_NAMESPACE::std_result
Let me verify one more aspect - if there are any other usages of this method:
Integration verified successfully
The method get_schema_subtree_bitmap
is properly integrated with serialize_to_json
and:
- Correctly uses the class member variables
- Has proper error handling using
OUTCOME_V2_NAMESPACE::std_result
- Is only used within its own class implementation as expected
- Serves its intended purpose in supporting JSON serialization
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify the implementation and usage of get_schema_subtree_bitmap
# Search for the implementation and usage in the corresponding cpp file
rg -A 5 "get_schema_subtree_bitmap|serialize_to_json" components/core/src/clp/ffi/KeyValuePairLogEvent.cpp
Length of output: 1430
Script:
#!/bin/bash
# Search for other usages of get_schema_subtree_bitmap
rg "get_schema_subtree_bitmap" --type cpp --type hpp
Length of output: 80
Script:
#!/bin/bash
# Search for other usages of get_schema_subtree_bitmap without file type restrictions
rg "get_schema_subtree_bitmap" -l
Length of output: 139
components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (1)
Line range hint 396-400
: Changes to serialize_to_json
look good.
The method correctly uses the new member function while maintaining proper error handling and existing functionality.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the PR title, how about:
refactor(ffi): Make `get_schema_subtree_bitmap` a public member method of `KeyValuePairLogEvent`.
get_schema_subtree_bitmap
as a public member method of KeyValuePairLogEvent
.get_schema_subtree_bitmap
a public member method of KeyValuePairLogEvent
.
get_schema_subtree_bitmap
a public member method of KeyValuePairLogEvent
.get_schema_subtree_bitmap
a public method of KeyValuePairLogEvent
.
* ffi: Add support for serializing/deserializing auto-generated and user-generated schema tree node IDs. (y-scope#557) Co-authored-by: kirkrodrigues <2454684+kirkrodrigues@users.noreply.github.com> * clp: Add missing C++ standard library includes in IR parsing files. (y-scope#561) Co-authored-by: kirkrodrigues <2454684+kirkrodrigues@users.noreply.github.com> * log-viewer-webui: Update `yscope-log-viewer` to the latest version (which uses `clp-ffi-js`). (y-scope#562) * package: Upgrade dependencies to resolve security issues. (y-scope#536) * clp-s: Implement table packing (y-scope#466) Co-authored-by: wraymo <37269683+wraymo@users.noreply.github.com> Co-authored-by: Kirk Rodrigues <2454684+kirkrodrigues@users.noreply.github.com> Co-authored-by: wraymo <raywangv@gmail.com> * log-viewer-webui: Update `yscope-log-viewer` to the latest version. (y-scope#565) * ci: Switch GitHub macOS build workflow to use macos-13 (x86) and macos-14 (ARM) runners. (y-scope#566) * core: Add support for user-defined HTTP headers in `NetworkReader`. (y-scope#568) Co-authored-by: Lin Zhihao <59785146+LinZhihao-723@users.noreply.github.com> Co-authored-by: Xiaochong Wei <xiaochong.wei@yscope.com> * chore: Update to the latest version of yscope-dev-utils. (y-scope#574) * build(core): Upgrade msgpack to v7.0.0. (y-scope#575) * feat(ffi): Update IR stream protocol version handling in preparation for releasing the kv-pair IR stream format: (y-scope#573) - Bump the IR stream protocol version to 0.1.0 for the kv-pair IR stream format. - Treat the previous IR stream format's versions as backwards compatible. - Differentiate between backwards-compatible and supported versions during validation. Co-authored-by: kirkrodrigues <2454684+kirkrodrigues@users.noreply.github.com> * fix(taskfiles): Trim trailing slash from URL prefix in `download-and-extract-tar` (fixes y-scope#577). (y-scope#578) * fix(ffi): Correct `clp::ffi::ir_stream::Deserializer::deserialize_next_ir_unit`'s return value when failing to read the next IR unit's type tag. (y-scope#579) * fix(taskfiles): Update `yscope-log-viewer` sources in `log-viewer-webui-clients` sources list (fixes y-scope#576). (y-scope#580) * fix(cmake): Add Homebrew path detection for `mariadb-connector-c` to fix macOS build failure. (y-scope#582) Co-authored-by: kirkrodrigues <2454684+kirkrodrigues@users.noreply.github.com> * refactor(ffi): Make `get_schema_subtree_bitmap` a public method of `KeyValuePairLogEvent`. (y-scope#581) * ci: Schedule GitHub workflows to daily run to detect failures due to upgraded dependencies or environments. (y-scope#583) * docs: Update the required version of task. (y-scope#567) * Add pr check workflow --------- Co-authored-by: kirkrodrigues <2454684+kirkrodrigues@users.noreply.github.com> Co-authored-by: Junhao Liao <junhao.liao@yscope.com> Co-authored-by: Henry8192 <50559854+Henry8192@users.noreply.github.com> Co-authored-by: Devin Gibson <gibber9809@users.noreply.github.com> Co-authored-by: wraymo <37269683+wraymo@users.noreply.github.com> Co-authored-by: wraymo <raywangv@gmail.com> Co-authored-by: Xiaochong(Eddy) Wei <40865608+anlowee@users.noreply.github.com> Co-authored-by: Xiaochong Wei <xiaochong.wei@yscope.com> Co-authored-by: haiqi96 <14502009+haiqi96@users.noreply.github.com>
…eyValuePairLogEvent`. (y-scope#581)
Description
After realizing
get_schema_subtree_bitmap
is also useful in language-specific ffi layer, we decided to extract it from the anon-namespace as a member method ofKeyValuePairLogEvent
in this PR.Validation performed
Summary by CodeRabbit
New Features
KeyValuePairLogEvent
class.Bug Fixes