Skip to content
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

chore(p2p_service): clean up processing of p2p req/res protocol #2124

Merged
merged 13 commits into from
Aug 27, 2024

Conversation

rymnc
Copy link
Member

@rymnc rymnc commented Aug 23, 2024

Linked Issues/PRs

Description

Cleans up the impl for TaskRequest by breaking the processing into digestable but extendable functions

Checklist

  • Breaking changes are clearly marked as such in the PR description and changelog
  • New behavior is reflected in tests
  • The specification matches the implemented behavior (link update PR if changes are needed)

Before requesting review

  • I have reviewed the code myself
  • I have created follow-up issues caused by this PR and linked them here

After merging, notify other teams

[Add or remove entries as needed]

Comment on lines 448 to 451
request_id: InboundRequestId,
response_sender: fn(Option<R>) -> ResponseMessage,
db_lookup: F,
task_request: fn(Option<R>, InboundRequestId) -> TaskRequest,
Copy link
Member Author

Choose a reason for hiding this comment

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

here I preferred using fn pointers for the response_sender, task_request instead of trait methods on RequestMessage to reduce verbosity of the code. Happy to implement it that way if the team prefers it.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm happy with taking functions as arguments, although since there are three related functions here, grouping them together in a trait might make the code even nicer to read.

One question though, response_sender and task_request are both function pointers whereas db_lookup is a FnOnce-generic. I think the code would read better if we used generics for all three arguments. This would make the function more flexible for future extensions as well.

Copy link
Member Author

Choose a reason for hiding this comment

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

addressed in e52bffc, thanks
cc: @AurelienFT

@rymnc rymnc marked this pull request as ready for review August 25, 2024 17:20
@rymnc rymnc requested review from a team and netrome August 25, 2024 17:22
netrome
netrome previously approved these changes Aug 26, 2024
Copy link
Contributor

@netrome netrome left a comment

Choose a reason for hiding this comment

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

Nice refactor. Thank you for cleaning this up.

My only concern here is the change in semantics for the get_sealed_block_headers function, but given that the tests are passing I will assume that this doesn't break any expected behavior.

crates/fuel-core/src/database/sealed_block.rs Show resolved Hide resolved
Comment on lines 448 to 451
request_id: InboundRequestId,
response_sender: fn(Option<R>) -> ResponseMessage,
db_lookup: F,
task_request: fn(Option<R>, InboundRequestId) -> TaskRequest,
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm happy with taking functions as arguments, although since there are three related functions here, grouping them together in a trait might make the code even nicer to read.

One question though, response_sender and task_request are both function pointers whereas db_lookup is a FnOnce-generic. I think the code would read better if we used generics for all three arguments. This would make the function more flexible for future extensions as well.

Copy link
Contributor

@AurelienFT AurelienFT left a comment

Choose a reason for hiding this comment

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

I like the refactor. I agree with @netrome on using the same sematic for the 3 functions as parameter.

Little question: there is changes pushed to state_transition_bytecode.wasm I don't know well the purpose of this file, is this change required ?

@rymnc rymnc requested a review from xgreenx August 27, 2024 06:39
Copy link
Contributor

@AurelienFT AurelienFT left a comment

Choose a reason for hiding this comment

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

Re-asking : #2124 (review)

@rymnc
Copy link
Member Author

rymnc commented Aug 27, 2024

there is changes pushed to state_transition_bytecode.wasm I don't know well the purpose of this file, is this change required ?

This is generated when running ./ci_checks.sh afaiu, which I did before creating this PR :)

AurelienFT
AurelienFT previously approved these changes Aug 27, 2024
@xgreenx xgreenx requested review from K1-R1 and removed request for K1-R1 August 27, 2024 08:27
@rymnc rymnc enabled auto-merge (squash) August 27, 2024 08:35
@rymnc rymnc merged commit b54b019 into master Aug 27, 2024
30 checks passed
@rymnc rymnc deleted the fix/large-match-arms-in-p2p-processing branch August 27, 2024 08:56
@xgreenx xgreenx mentioned this pull request Aug 28, 2024
xgreenx added a commit that referenced this pull request Aug 28, 2024
## Version v0.35.0

### Added
- [2122](#2122): Changed the
relayer URI address to be a vector and use a quorum provider. The
`relayer` argument now supports multiple URLs to fetch information from
different sources.
- [2119](#2119): GraphQL query
fields for retrieving information about upgrades.

### Changed
- [2113](#2113): Modify the
way the gas price service and shared algo is initialized to have some
default value based on best guess instead of `None`, and initialize
service before graphql.
- [2112](#2112): Alter the way
the sealed blocks are fetched with a given height.
- [2120](#2120): Added
`submitAndAwaitStatus` subscription endpoint which returns the
`SubmittedStatus` after the transaction is submitted as well as the
`TransactionStatus` subscription.
- [2115](#2115): Add test for
`SignMode` `is_available` method.
- [2124](#2124): Generalize
the way p2p req/res protocol handles requests.

#### Breaking

- [2040](#2040): Added full
`no_std` support state transition related crates. The crates now require
the "alloc" feature to be enabled. Following crates are affected:
  - `fuel-core-types`
  - `fuel-core-storage`
  - `fuel-core-executor`
- [2116](#2116): Replace
`H160` in config and cli options of relayer by `Bytes20` of `fuel-types`

### Fixed
- [2134](#2134): Perform
RecoveryID normalization for AWS KMS -generated signatures.

## What's Changed
* Change TODO clippy to wait for false positive correction by
@AurelienFT in #2110
* Remove option on shared algo, give default algo, reorder service
startup by @MitchTurner in
#2113
* chore(sealed_blocks): optimize fetching of sealed block header at a
given height by @rymnc in
#2112
* chore(p2p_service): remove unnecessary cast to usize by @rymnc in
#2123
* Added a benchmark for the predicate with ed19 verification by @xgreenx
in #2127
* Add test SignMode is_available by @AurelienFT in
#2115
* feat: Add graphql query fields for retreiving information about
upgrades by @netrome in #2119
* Small code optimizations by @MoneyBund in
#2035
* Change relayer URI address to be vector and use quorum provider by
@AurelienFT in #2122
* chore(p2p_service): clean up processing of p2p req/res protocol by
@rymnc in #2124
* feat: add `submitAndAwaitStatus` subscription endpoint by @maschad in
#2120
* Replace H160 in config and cli options of relayer by Bytes20 by
@AurelienFT in #2116
* Secp256k1 RecoveryID correction for KMS-genrated signatures by
@Dentosal in #2134
* Added `no_std` support state transition related crates by @xgreenx in
#2040

## New Contributors
* @MoneyBund made their first contribution in
#2035
* @maschad made their first contribution in
#2120

**Full Changelog**:
v0.34.0...v0.35.0
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.

chore: refactor match arms while processing incoming p2p requests
4 participants