Expose Postgres storage backend - #243
Conversation
|
👋 Thanks for assigning @tankyleo as a reviewer! |
c79c1a4 to
a4378ea
Compare
tankyleo
left a comment
There was a problem hiding this comment.
skimmed briefly one question
|
|
||
| When `[storage.postgres]` is configured, LDK Node wallet/channel state is stored in | ||
| PostgreSQL instead of `ldk_node_data.sqlite`. The storage directory remains required for | ||
| the mnemonic, API key, TLS material, logs, and `ldk_server_data.sqlite`. |
There was a problem hiding this comment.
Would big routing nodes want ldk_server_data.sqlite to be in the postgres db too, given that they'll be forwarding a lot of payments ? Or is that for a later PR / out-of-scope here ?
There was a problem hiding this comment.
It will be after lightningdevkit/ldk-node#772, just keeping the docs accurate of the local state of the repo. Will update once we merge and upgrade here
|
|
||
| # Optional LDK Node PostgreSQL storage for wallet and channel state. | ||
| #[storage.postgres] | ||
| #connection_string = "postgresql://postgres:postgres@localhost:5432" # PostgreSQL connection string. Do not include dbname if db_name is set. |
There was a problem hiding this comment.
If it works I find the key value format to be cleaner, less error prone ie host=localhost port=5432 user=postgres sslmode=disable
There was a problem hiding this comment.
tbh i always hate these, but can switch if we really want
| ``` | ||
|
|
||
| Only `connection_string` is required. `db_name`, `kv_table_name`, and `certificate_path` | ||
| are optional. If `db_name` is set, do not also include a database name in the connection |
There was a problem hiding this comment.
Don't remember us explicitly rejecting a database name in the connection string anywhere in this patch ? Would it be good to add test coverage for this?
There was a problem hiding this comment.
that's in ldk-node, added a test for this
|
|
||
| ```toml | ||
| [storage.postgres] | ||
| connection_string = "postgresql://postgres:postgres@localhost:5432" |
There was a problem hiding this comment.
Similar here, the key-value format would be better if we can have it.
| || args.storage_postgres_kv_table_name.is_some() | ||
| || args.storage_postgres_certificate_path.is_some() | ||
| { | ||
| let mut postgres = self.ldk_node_postgres.take().unwrap_or_default(); |
There was a problem hiding this comment.
Here we can do a get_or_insert_default, so we don't need the assignment at the end of the block.
There was a problem hiding this comment.
Similar here can do a get_or_insert_default if you care to :)
| LdkNodeStorageConfig::Postgres { | ||
| connection_string: postgres | ||
| .connection_string | ||
| .ok_or_else(|| missing_field_err("storage_postgres_connection_string"))?, |
There was a problem hiding this comment.
For this field I wonder if this is a sensible default:
host=localhost port=5432 user=postgres sslmode=disable
There was a problem hiding this comment.
Imo probably better to not have a defualt connection string
|
Posting some AI comments that look sensible. Second one is in flight in lightningdevkit/ldk-node#1000, but maybe it should be a prerequisite. 🤖 Requesting changes for two fund-safety blockers.
The previous cross-network concern is fail-closed in the pinned dependency because the persisted BDK network is checked during wallet load. The target is still not network-isolated, however, so the operations claim that multiple networks can share one storage root without conflicts should state that PostgreSQL deployments need distinct database or table targets per network. |
|
Allow ldk-server to configure LDK Node wallet and channel state storage through PostgreSQL without a feature-gated server build. Refuse switching between SQLite and PostgreSQL after initialization so the same node identity cannot silently start without its persisted channel state. Clarify the backup and per-network isolation boundaries. AI-assisted-by: OpenAI Codex
|
I’m not sure we should rush PostgreSQL support into ldk-server with an interim locking mechanism, only to replace it with a different approach later. That could also leave us with migration or compatibility concerns between deployed versions? lightningdevkit/ldk-node#1012 does not look entirely trivial either. |
Allow ldk-server to configure LDK Node wallet and channel state storage through PostgreSQL without a feature-gated server build. Keep local disk storage for server-owned files and history, and document the backup boundary.
Refuse switching between SQLite and PostgreSQL after initialization so the same node identity cannot silently start without its persisted channel state. Clarify the backup and per-network isolation boundaries.