lnd icon indicating copy to clipboard operation
lnd copied to clipboard

[feature]: add a flag --count_total_invoices to listinvoices

Open Dhiren-Mhatre opened this issue 8 months ago • 5 comments

Change Description

Add a --count_total_invoices flag to the listinvoices RPC command, as requested in issue #9717. This allows users to efficiently count invoices without retrieving all invoice data, which is particularly helpful for large databases.

This implementation follows the same pattern as the existing --count_total_payments flag for the listpayments command.

Steps to Test

  1. Build LND with the changes:

    make
    make install
    
  2. Start LND in regtest mode:

    lnd --lnddir=~/lnd-test --bitcoin.regtest --bitcoin.active --bitcoin.node=neutrino --no-macaroons --no-rest
    
  3. Create a wallet and unlock it:

    lncli --lnddir=~/lnd-test --no-macaroons create
    lncli --lnddir=~/lnd-test --no-macaroons unlock
    
  4. Test the new flag:

    lncli --lnddir=~/lnd-test --no-macaroons listinvoices --count_total_invoices
    
  5. Verify that the response includes the total_num_invoices field and doesn't include any invoice data.

Pull Request Checklist

Testing

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

Code Style and Documentation

  • [x] The change is not [insubstantial](https://github.com/lightningnetwork/lnd/blob/master/docs/code_contribution_guidelines.md#substantial-contributions-only).
  • [x] The change obeys the [Code Documentation and Commenting](https://github.com/lightningnetwork/lnd/blob/master/docs/development_guidelines.md#code-documentation-and-commenting) guidelines, and lines wrap at 80.
  • [x] Commits follow the [Ideal Git Commit Structure](https://github.com/lightningnetwork/lnd/blob/master/docs/development_guidelines.md#ideal-git-commit-structure).
  • [x] Any new logging statements use an appropriate subsystem and logging level.
  • [x] Any new lncli commands have appropriate tags in the comments for the rpc in the proto file.
  • [x] Added release notes describing the new flag.

This PR addresses issue #9717.

Dhiren-Mhatre avatar Apr 20 '25 12:04 Dhiren-Mhatre

[!IMPORTANT]

Review skipped

Auto reviews are limited to specific labels.

:label: 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.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ 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.
  • @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.

coderabbitai[bot] avatar Apr 20 '25 12:04 coderabbitai[bot]

Nice work!

I'm wondering what happens if we have a database using KV schema? I don't see any clear error messages for when that is tried.

I think what you've implemented is a slightly different behavior than listpayments, but I think your way is probably the right way so I've created https://github.com/lightningnetwork/lnd/issues/9742 for listpayments

ZZiigguurraatt avatar Apr 20 '25 16:04 ZZiigguurraatt

Nice work!

I'm wondering what happens if we have a database using KV schema? I don't see any clear error messages for when that is tried.

I think what you've implemented is a slightly different behavior than listpayments, but I think your way is probably the right way so I've created #9742 for listpayments

Thanks for the positive feedback! Regarding key-value (KV) schema databases: The current implementation is tailored for SQL backends, as KV support is being phased out. If someone uses this flag with a KV backend, it will still attempt to count invoices, but less efficiently, as it would need to iterate through them instead of using a SQL COUNT operation.​ I haven't added explicit error messages for KV backends, but I can include them if you believe it's important.​ I'm glad my approach might be an improvement over the current listpayments implementation. Thanks for creating #9742 to ensure consistency!​

Dhiren-Mhatre avatar Apr 20 '25 17:04 Dhiren-Mhatre

@dhiren-mhatre, remember to re-request review from reviewers when ready

lightninglabs-deploy avatar Jun 02 '25 02:06 lightninglabs-deploy

!lightninglabs-deploy mute

saubyk avatar Jun 02 '25 02:06 saubyk

@Dhiren-Mhatre @ZZiigguurraatt @NishantBansal2003 Is work still being done on this pr if not I would like to take it up.

Suvrat1629 avatar Nov 05 '25 11:11 Suvrat1629