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

[CT-1103] FNS subaccount WS support #2088

Merged
merged 5 commits into from
Aug 15, 2024
Merged

[CT-1103] FNS subaccount WS support #2088

merged 5 commits into from
Aug 15, 2024

Conversation

dydxwill
Copy link
Contributor

@dydxwill dydxwill commented Aug 14, 2024

Changelist

[Describe or list the changes made in this PR]

Test Plan

websocat "ws://xxx:9091/ws?clobPairIds=1,2&subaccountIds=dydx1nzuttarf5k2j0nug5yzhr6p74t9avehn9hlh8m/0"

Author/Reviewer Checklist

  • If this PR has changes that result in a different app state given the same prior state and transaction list, manually add the state-breaking label.
  • If the PR has breaking postgres changes to the indexer add the indexer-postgres-breaking label.
  • If this PR isn't state-breaking but has changes that modify behavior in PrepareProposal or ProcessProposal, manually add the label proposal-breaking.
  • If this PR is one of many that implement a specific feature, manually label them all feature:[feature-name].
  • If you wish to for mergify-bot to automatically create a PR to backport your change to a release branch, manually add the label backport/[branch-name].
  • Manually add any of the following labels: refactor, chore, bug.

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features
    • Enhanced WebSocket server functionality to dynamically parse and handle subaccountIds from incoming requests, improving flexibility and usability.
    • Simplified workflow for building and pushing Docker images, focusing on a single job to enhance maintainability and clarity.
  • Bug Fixes
    • Implemented robust error handling for missing or incorrectly formatted subaccountIds, ensuring smooth operation and user feedback.
    • Added validation to ensure both clobPairIds and subaccountIds are provided for valid subscription requests.

Copy link
Contributor

coderabbitai bot commented Aug 14, 2024

Walkthrough

The recent modifications simplify the GitHub Actions workflow by consolidating multiple job definitions and focusing solely on building Docker images for AWS ECR. Additionally, the WebSocket server's handler has been enhanced to dynamically handle subaccount identifiers from incoming requests, improving error management and overall application usability. These updates lead to a more maintainable and user-friendly system capable of efficiently handling multiple subaccounts.

Changes

File Path Change Summary
.github/workflows/protocol-build-and-push.yml Removed multiple job definitions for various environments, retaining a simplified build-and-push-dev job. Added a new branch wl/fnsws for triggering workflows.
protocol/streaming/ws/websocket_server.go Enhanced Handler method to dynamically parse subaccountIds from HTTP requests; added parseSubaccountIds function for validation and error handling.
protocol/streaming/full_node_streaming_manager.go Updated Subscribe function to require both clobPairIds and subaccountIds to be non-empty for valid subscriptions.

Poem

🐰 In a world of code where changes bloom,
The rabbit hops to clear the gloom.
With workflows lightened, we rejoice,
Subaccounts handled, a better choice!
Let’s celebrate the code’s new dance,
For every tweak, gives us a chance! 🌼


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?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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 as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@dydxwill dydxwill changed the title FNS subaccount WS support [CT-1103] FNS subaccount WS support Aug 14, 2024
Copy link

linear bot commented Aug 14, 2024

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 2bf2d49 and f4281ca.

Files selected for processing (2)
  • .github/workflows/protocol-build-and-push.yml (2 hunks)
  • protocol/streaming/ws/websocket_server.go (3 hunks)
Files skipped from review due to trivial changes (1)
  • .github/workflows/protocol-build-and-push.yml
Additional comments not posted (3)
protocol/streaming/ws/websocket_server.go (3)

103-130: Well-implemented parseSubaccountIds function.

The function effectively parses and validates subaccountIds, handling errors gracefully. The use of strconv.Atoi ensures numeric validation.


Line range hint 131-149:
Consistent implementation in parseClobPairIds.

The function maintains consistency with parseSubaccountIds in parsing and error handling. This uniformity aids in maintainability.


69-78: LGTM! Verify the usage of parseSubaccountIds.

The addition of parseSubaccountIds enhances the flexibility of the Handler method. The error handling is robust and logs errors appropriately.

Ensure that the usage of parseSubaccountIds is consistent and correctly integrated with other parts of the codebase.

Verification successful

Usage of parseSubaccountIds is limited to a single file.

The parseSubaccountIds function is defined and used exclusively within protocol/streaming/ws/websocket_server.go. There are no other references or usages of this function elsewhere in the codebase, ensuring its integration is consistent and localized.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of `parseSubaccountIds` in the codebase.

# Test: Search for the function usage. Expect: Consistent integration across the codebase.
rg --type go -A 5 $'parseSubaccountIds'

Length of output: 1005

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between f4281ca and 6b78529.

Files selected for processing (1)
  • .github/workflows/protocol-build-and-push.yml (2 hunks)
Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/protocol-build-and-push.yml


return subaccountIds, nil
}

// parseClobPairIds is a helper function to parse the clobPairIds from the query parameters.
func parseClobPairIds(r *http.Request) ([]uint32, error) {
clobPairIdsParam := r.URL.Query().Get("clobPairIds")
if clobPairIdsParam == "" {
Copy link
Contributor

Choose a reason for hiding this comment

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

think we can remove this special case now that empty clobpair ids is valid, i think rest of code should result in nil, nil as well

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done

// parseSubaccountIds is a helper function to parse the subaccountIds from the query parameters.
func parseSubaccountIds(r *http.Request) ([]*satypes.SubaccountId, error) {
subaccountIdsParam := r.URL.Query().Get("subaccountIds")
if subaccountIdsParam == "" {
Copy link
Contributor

Choose a reason for hiding this comment

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

ditto here, i think split on empty string probably returns empty array

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done

}

idStrs := strings.Split(subaccountIdsParam, ",")
subaccountIds := make([]*satypes.SubaccountId, len(idStrs))
Copy link
Contributor

Choose a reason for hiding this comment

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

pref zero-initialize to reduce error situations where an empty array initialized with len X has length X and we might check len(subaccounts) to determine success of parsing subaccount ids

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 6b78529 and a51b261.

Files selected for processing (2)
  • protocol/streaming/full_node_streaming_manager.go (1 hunks)
  • protocol/streaming/ws/websocket_server.go (3 hunks)
Additional comments not posted (3)
protocol/streaming/ws/websocket_server.go (2)

69-78: Verify the error handling for subaccountIds.

The added parsing logic for subaccountIds is robust, with appropriate error handling and logging. Ensure that the error messages are clear and informative for debugging purposes.


103-126: Consider edge cases in parseSubaccountIds.

The function correctly parses subaccountIds and handles errors. However, consider edge cases such as empty strings or unexpected formats. Ensure that the function is resilient to malformed inputs.

protocol/streaming/full_node_streaming_manager.go (1)

151-151: Ensure proper validation logic in Subscribe.

The additional validation ensures that both clobPairIds and subaccountIds are non-empty. Verify that this change aligns with the intended functionality and does not disrupt existing workflows.

@dydxwill dydxwill merged commit a817d06 into main Aug 15, 2024
16 of 17 checks passed
@dydxwill dydxwill deleted the wl/fnsws branch August 15, 2024 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

Successfully merging this pull request may close these issues.

2 participants