-
Notifications
You must be signed in to change notification settings - Fork 229
fix(block/syncing): save data to p2p stores #2736
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
base: main
Are you sure you want to change the base?
Conversation
The latest Buf updates on your PR. Results from workflow CI and Release / buf-check (pull_request).
|
Summary of ChangesHello @julienrbrt, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request resolves an issue where the node's syncing component failed to broadcast newly acquired headers and data to the peer-to-peer network. By introducing a standardized Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
This pull request correctly refactors the broadcasting logic by introducing a common Broadcaster
interface and moving it to a shared package. This change also enables broadcasting of headers and data from sync nodes, which was the main goal.
I've found one critical issue where the wrong broadcaster was used to get the data height, which would break data syncing. I've also left a medium-severity comment regarding duplicated test mocks, which could be refactored to improve maintainability.
Once the critical issue is addressed, this PR should be good to go.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #2736 +/- ##
==========================================
- Coverage 62.28% 62.27% -0.02%
==========================================
Files 79 79
Lines 8490 8540 +50
==========================================
+ Hits 5288 5318 +30
- Misses 2711 2723 +12
- Partials 491 499 +8
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Pull Request ReviewI've reviewed PR #2736 and here's my feedback: ✅ Code Quality & Best PracticesPositive aspects:
Suggestions for improvement:
🐛 Potential IssuesCritical:
Minor:
🔒 Security ConcernsNo significant security issues identified. The data being stored has already been validated through ⚡ Performance Considerations
🧪 Test CoverageGood:
Could be better:
Suggested Test Casefunc TestProcessHeightEvent_AppendsToP2PStores(t *testing.T) {
// Setup with explicit mock expectations
mockP2PHeaderStore := &mocks.MockStore[*types.SignedHeader]{}
mockP2PDataStore := &mocks.MockStore[*types.Data]{}
// Create test event
event := createTestEvent(t, height)
// Expect Append to be called exactly once with the right data
mockP2PHeaderStore.On("Append", mock.Anything, event.Header).Return(nil).Once()
mockP2PDataStore.On("Append", mock.Anything, event.Data).Return(nil).Once()
// ... rest of test
mockP2PHeaderStore.AssertExpectations(t)
mockP2PDataStore.AssertExpectations(t)
} 📋 SummaryThis is a solid bug fix that addresses a real issue with P2P data availability. The implementation is clean and well-tested. The main recommendations are:
Overall: Approve with minor suggestions ✅ 🤖 Generated with Claude Code |
Pull Request Review - PR #2736OverviewThis PR fixes a bug where the syncing component wasn't saving headers and data to the P2P (goheader) stores after successfully syncing blocks. This prevented peers from serving this data when requested by other nodes. ✅ Positive Aspects1. Correct Fix LocationThe fix is placed in 2. Follows Established PatternThe implementation mirrors how the executor component broadcasts data via 3. Proper Error Handling
4. Test Coverage UpdatedAll existing tests were updated to provide mock P2P stores, ensuring tests continue to pass and preventing regressions.
|
Category | Rating | Notes |
---|---|---|
Correctness | Main logic correct, but placement may miss edge cases | |
Style | ✅ Good | Follows project conventions |
Testing | Basic coverage present, missing edge cases | |
Documentation | ✅ Good | Clear PR description, code is self-documenting |
Performance | ✅ Good | Minimal overhead, proper error handling |
Security | ✅ Good | No security concerns identified |
🔧 Recommendations
Priority 1 (Should fix before merge):
- Move append logic to
trySyncNextBlock()
to ensure all synced blocks are added to P2P stores
Priority 2 (Consider for follow-up):
- Add test coverage for P2P store append failures
- Add test for pending events being appended to P2P stores
- Document the intended behavior when P2P operations fail
Priority 3 (Nice to have):
- Add integration test verifying peers can retrieve synced data
- Consider metrics/logging for P2P store operations to monitor effectiveness
📝 Summary
This PR addresses a real bug and the approach is generally sound. However, the placement of the append logic in processHeightEvent()
may miss blocks that are processed via the pending events queue or retry logic. Moving the append calls to trySyncNextBlock()
would ensure complete coverage of all successfully synced blocks.
The code quality is good, follows project conventions, and includes proper error handling. Test coverage is adequate but could be enhanced with edge case testing.
Recommendation: Request changes to move the append logic to trySyncNextBlock()
before merging.
🤖 Generated with Claude Code
Code Review: PR #2736 - fix(block/syncing): save data to p2p storesOverviewThis PR fixes a bug where the syncing component was not persisting headers and data to the P2P (goheader) stores after successfully syncing blocks, which prevented peers from serving historical heights. ✅ Strengths
|
Overview
The syncing component was not saving header and event to the goheader (p2p) store.
Which was an issue when peers were asking for heights.