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
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. AI-assisted-by: OpenAI Codex
|
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. Keep local disk storage for server-owned files and history, and document the backup boundary.