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
lnd: ensure that LND won't start in native SQL mode if it has any KV invoices #8568
lnd: ensure that LND won't start in native SQL mode if it has any KV invoices #8568
Conversation
Important Auto Review SkippedAuto reviews are limited to the following labels: llm-review. Please add one of these labels to enable auto reviews. Please check the settings in the CodeRabbit UI or the To trigger a single review, invoke the 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? TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Additionally, you can add CodeRabbit Configration File (
|
a6e6a00
to
55b3b85
Compare
55b3b85
to
751caa1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! tACK 🚀
One comment about re-using the passed in context instead.
Then as mentioned offline: realised that we dont do this check the other way around (ie it is possible to add native sql invoice & then remove the flag and it will go back to adding kvdb invoices). But Andras pointed out that this is already the case with any backend change we have today. So potentially not needed to be that defensive especially cause in future when we add migration scripts, then we do want to allow this 👍
config_builder.go
Outdated
// start lnd with native SQL enabled, as we don't currently | ||
// migrate the invoices to the new database schema. | ||
invoiceSlice, err := dbs.GraphDB.QueryInvoices( | ||
context.Background(), invoices.InvoiceQuery{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think you can instead use the context that is already available
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed, thanks :)
return fmt.Errorf("cannot use native SQL with bolt " + | ||
"backend") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🙏
This commit adds a check to ensure that we don't start LND with native SQL invoice DB if we already have any invoices in our KV channeldb. This is needed as native SQL invoices is an experimental feature and we do not yet support migration.
751caa1
to
483f5f3
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 🎉. Only to clarify, it doesn't matter if the database contained any invoices that were deleted, we just require that it is empty?
Good question! As deleted invoices are completely removed from the KV invoice DB, it'd be fine. We could be more strict by not even caring about the invoice DB, but only about whether this is a first ever start of the node. I believe the current approach is quite liberal in that it allows "old" nodes to also use the native schema (given no invoices). |
Thanks for the testing and discussion! :) I agree that we could be more strict about preconditions, see also my other comment above. I'm also open to changing things up if you both think more strict checking is better. |
The only thing that would get out of sync would be the add index (if I understand that correctly). I think keeping that liberal approach is ok, while being somewhat defensive against accidentally mixing native with the preexisting kv db 👍. |
This PR is a temporary measure for 0.18 as we don't plan to add invoice migration yet for native SQL invoice DB.