[feature]: add a flag --count_total_invoices to listinvoices
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
-
Build LND with the changes:
make make install -
Start LND in regtest mode:
lnd --lnddir=~/lnd-test --bitcoin.regtest --bitcoin.active --bitcoin.node=neutrino --no-macaroons --no-rest -
Create a wallet and unlock it:
lncli --lnddir=~/lnd-test --no-macaroons create lncli --lnddir=~/lnd-test --no-macaroons unlock -
Test the new flag:
lncli --lnddir=~/lnd-test --no-macaroons listinvoices --count_total_invoices -
Verify that the response includes the
total_num_invoicesfield 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.
[!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.yamlfile in this repository. To trigger a single review, invoke the@coderabbitai reviewcommand.You can disable this status message by setting the
reviews.review_statustofalsein 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.
🪧 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
@coderabbitaiin 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
@coderabbitaiin 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 pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai generate docstringsto generate docstrings for this PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile 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.
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
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 forlistpayments
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, remember to re-request review from reviewers when ready
!lightninglabs-deploy mute
@Dhiren-Mhatre @ZZiigguurraatt @NishantBansal2003 Is work still being done on this pr if not I would like to take it up.