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

routerrpc: add a default value for timeout_seconds in SendPaymentV2 #9359

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

NishantBansal2003
Copy link

Change Description

Description of change / link to associated issue.
This PR introduces a default value of 60 seconds for the timeout_seconds field in the SendPaymentV2 RPC call in the routerrpc.SendPaymentRequest.

Fixes: #9282

Steps to Test

Test with explicit timeout_seconds values:

  • Make an RPC call to SendPaymentV2 with a valid non-zero value for timeout_seconds.
  • Verify that the request behaves as expected and uses the provided value.

Test without timeout_seconds:

  • Make an RPC call to SendPaymentV2 without including the timeout_seconds field.
  • Verify that the default value of 60 seconds is applied and used during the request.

Pull Request Checklist

Testing

  • Your PR passes all CI checks.
  • Tests covering the positive and negative (error paths) are included.
  • Bug fixes contain tests triggering the bug to prevent regressions.

Code Style and Documentation

📝 Please see our Contribution Guidelines for further guidance.

Copy link
Contributor

coderabbitai bot commented Dec 14, 2024

Important

Review skipped

Auto reviews are limited to specific labels.

🏷️ Labels to auto review (1)
  • llm-review

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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>, please review it.
    • 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 gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @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 using 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 generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

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.

Copy link
Member

@yyforyongyu yyforyongyu left a comment

Choose a reason for hiding this comment

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

Thanks for the PR. A few suggestions to complete the change,

  1. we should update the SendpaymentRequest in router.proto and make the field timeout_seconds optional, also need to update the docs there to make it clear that this field is now optional.
  2. we then update both the cli and the RPC to not check the timeout value.
  3. we should also update some of the itests to validate the new behavior that we don't check for timeout values, which can be any of the cases that use TimeoutSeconds: 60 when making a payment, and we can simply remove it there to validate the new behavior.

@@ -344,6 +344,11 @@ func (r *ServerShell) CreateSubServer(configRegistry lnrpc.SubServerConfigDispat
func (s *Server) SendPaymentV2(req *SendPaymentRequest,
stream Router_SendPaymentV2Server) error {

// Set payment request attempt timeout.
if req.TimeoutSeconds == 0 {
req.TimeoutSeconds = 60
Copy link
Member

Choose a reason for hiding this comment

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

Think we should make this a constant var DefaultPaymentTimeout and use it here.

@NishantBansal2003
Copy link
Author

Hey @yyforyongyu, thanks for the review! I made some modifications based on your feedback. Could you please check if everything is covered, or if I need to check anything further?
Also, could you let me know in which file I should add the changelog entry—0.18.4 or 0.19.0?

@NishantBansal2003
Copy link
Author

NishantBansal2003 commented Dec 19, 2024

Hey @yyforyongyu, thanks for the review! I made some modifications based on your feedback. Could you please check if everything is covered, or if I need to check anything further? Also, could you let me know in which file I should add the changelog entry—0.18.4 or 0.19.0?

cc: @yyforyongyu @guggero, just pinging again in case the last message was missed.

@guggero
Copy link
Collaborator

guggero commented Dec 19, 2024

Hey @yyforyongyu, thanks for the review! I made some modifications based on your feedback. Could you please check if everything is covered, or if I need to check anything further? Also, could you let me know in which file I should add the changelog entry—0.18.4 or 0.19.0?

cc: @yyforyongyu @guggero, just pinging again in case the last message was missed.

v0.18.4 was just released, so 0.19.

An optional upper limit on the amount of time we should spend when
attempting to fulfill the payment. This is expressed in seconds. If we
cannot make a successful payment within this time frame, an error will be
returned. This field must be non-zero.
Copy link
Member

Choose a reason for hiding this comment

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

we should also mention the default value of 60s is used when the field is not set, and when setting the field, a value of 0 is not allowed, and we should change the below field to optional int32 timeout_seconds = 6.

Then when we check it, we first check if the field is set by checking if it's nil, if set, we require it to be not zero, otherwise, use the default 60s.

Copy link
Author

Choose a reason for hiding this comment

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

Since timeout_seconds is of type int32 and not a pointer, its default value will be 0 if it is not set. Therefore, whether timeout_seconds is not specified or explicitly set to 0, I have implemented logic to default it to 60 seconds.

Please let me know if there is anything else I need to address.

Copy link
Member

Choose a reason for hiding this comment

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

Can you run make rpc first? Then you'll know what i meant

Copy link
Author

Choose a reason for hiding this comment

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

Done. Thanks for the help! I will make sure to learn from this and avoid making the same mistake in the future.

Copy link
Collaborator

@guggero guggero Dec 20, 2024

Choose a reason for hiding this comment

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

Wanted to comment about backward compatibility of changing the behavior of the field. But doesn't seem to be an issue, according to this: https://stackoverflow.com/a/76375904
So that seems to be the right approach indeed for this situation.

itest/lnd_amp_test.go Show resolved Hide resolved
@NishantBansal2003 NishantBansal2003 force-pushed the fix-timeout branch 2 times, most recently from 7866d62 to a6bd8c1 Compare December 19, 2024 12:27
@saubyk saubyk added this to the v0.19.0 milestone Dec 19, 2024
Signed-off-by: Nishant Bansal <[email protected]>

routerrpc: update itests to validate default timeout_seconds

Signed-off-by: Nishant Bansal <[email protected]>
@NishantBansal2003
Copy link
Author

Hey @yyforyongyu, I’ve made the required modifications. Please take a look.

@lightninglabs-deploy
Copy link

@yyforyongyu: review reminder
@NishantBansal2003, remember to re-request review from reviewers when ready

@NishantBansal2003
Copy link
Author

@yyforyongyu: review reminder @NishantBansal2003, remember to re-request review from reviewers when ready

Hey @yyforyongyu, just following up to see if there are any additional reviews pending on this PR?

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.

[feature]: add a default value for timeout_seconds in SendPaymentV2 routerrpc.SendPaymentRequest
5 participants