From df085a8a875e1a02f93bd823ef2cb915563f21dd Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 21 Mar 2023 14:28:15 +1030 Subject: [PATCH] wallet/db: don't use migration_context. `struct lightningd` is not completely initialized, so we added a "migration_context" which only had some of the fields. But we ended up handing in `struct lightningd` anyway, so I don't think this complexity is worthwhile. Signed-off-by: Rusty Russell --- wallet/db.c | 88 ++++++++++++++++------------------------------------- 1 file changed, 26 insertions(+), 62 deletions(-) diff --git a/wallet/db.c b/wallet/db.c index 1e903f714d75..f81c75449f0d 100644 --- a/wallet/db.c +++ b/wallet/db.c @@ -18,59 +18,38 @@ #include #include -/* Small container for things that are needed by migrations. The - * fields are guaranteed to be initialized and can be relied upon when - * migrating. - */ -struct migration_context { - const struct ext_key *bip32_base; - int hsm_fd; -}; - struct migration { const char *sql; - void (*func)(struct lightningd *ld, struct db *db, - const struct migration_context *mc); + void (*func)(struct lightningd *ld, struct db *db); }; -static void migrate_pr2342_feerate_per_channel(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +static void migrate_pr2342_feerate_per_channel(struct lightningd *ld, struct db *db); -static void migrate_our_funding(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +static void migrate_our_funding(struct lightningd *ld, struct db *db); -static void migrate_last_tx_to_psbt(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +static void migrate_last_tx_to_psbt(struct lightningd *ld, struct db *db); static void -migrate_inflight_last_tx_to_psbt(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +migrate_inflight_last_tx_to_psbt(struct lightningd *ld, struct db *db); -static void fillin_missing_scriptpubkeys(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +static void fillin_missing_scriptpubkeys(struct lightningd *ld, struct db *db); -static void fillin_missing_channel_id(struct lightningd *ld, struct db *db, - const struct migration_context *mc); +static void fillin_missing_channel_id(struct lightningd *ld, struct db *db); static void fillin_missing_local_basepoints(struct lightningd *ld, - struct db *db, - const struct migration_context *mc); + struct db *db); static void fillin_missing_channel_blockheights(struct lightningd *ld, - struct db *db, - const struct migration_context *mc); + struct db *db); static void migrate_channels_scids_as_integers(struct lightningd *ld, - struct db *db, - const struct migration_context *mc); + struct db *db); static void migrate_payments_scids_as_integers(struct lightningd *ld, - struct db *db, - const struct migration_context *mc); + struct db *db); static void fillin_missing_lease_satoshi(struct lightningd *ld, - struct db *db, - const struct migration_context *mc); + struct db *db); /* Do not reorder or remove elements from this array, it is used to * migrate existing databases from a previous state, based on the @@ -966,10 +945,6 @@ static bool db_migrate(struct lightningd *ld, struct db *db, int current, orig, available; char *err_msg; struct db_stmt *stmt; - const struct migration_context mc = { - .bip32_base = bip32_base, - .hsm_fd = ld->hsm_fd, - }; orig = current = db_get_version(db); available = ARRAY_SIZE(dbmigrations) - 1; @@ -1005,7 +980,7 @@ static bool db_migrate(struct lightningd *ld, struct db *db, tal_free(stmt); } if (dbmigrations[current].func) - dbmigrations[current].func(ld, db, &mc); + dbmigrations[current].func(ld, db); } /* Finally update the version number in the version table */ @@ -1052,8 +1027,7 @@ struct db *db_setup(const tal_t *ctx, struct lightningd *ld, } /* Will apply the current config fee settings to all channels */ -static void migrate_pr2342_feerate_per_channel(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +static void migrate_pr2342_feerate_per_channel(struct lightningd *ld, struct db *db) { struct db_stmt *stmt = db_prepare_v2( db, SQL("UPDATE channels SET feerate_base = ?, feerate_ppm = ?;")); @@ -1071,8 +1045,7 @@ static void migrate_pr2342_feerate_per_channel(struct lightningd *ld, struct db * is the same as the funding_satoshi for every channel where we are * the `funder` */ -static void migrate_our_funding(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +static void migrate_our_funding(struct lightningd *ld, struct db *db) { struct db_stmt *stmt; @@ -1088,8 +1061,7 @@ static void migrate_our_funding(struct lightningd *ld, struct db *db, tal_free(stmt); } -void fillin_missing_scriptpubkeys(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +void fillin_missing_scriptpubkeys(struct lightningd *ld, struct db *db) { struct db_stmt *stmt; @@ -1175,8 +1147,7 @@ void fillin_missing_scriptpubkeys(struct lightningd *ld, struct db *db, * could simply derive the channel_id whenever it was required, but since there * are now two ways to do it, we save the derived channel id. */ -static void fillin_missing_channel_id(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +static void fillin_missing_channel_id(struct lightningd *ld, struct db *db) { struct db_stmt *stmt; @@ -1213,8 +1184,7 @@ static void fillin_missing_channel_id(struct lightningd *ld, struct db *db, } static void fillin_missing_local_basepoints(struct lightningd *ld, - struct db *db, - const struct migration_context *mc) + struct db *db) { struct db_stmt *stmt; @@ -1240,12 +1210,12 @@ static void fillin_missing_local_basepoints(struct lightningd *ld, dbid = db_col_u64(stmt, "channels.id"); db_col_node_id(stmt, "peers.node_id", &peer_id); - if (!wire_sync_write(mc->hsm_fd, + if (!wire_sync_write(ld->hsm_fd, towire_hsmd_get_channel_basepoints( tmpctx, &peer_id, dbid))) fatal("could not retrieve basepoint from hsmd"); - msg = wire_sync_read(tmpctx, mc->hsm_fd); + msg = wire_sync_read(tmpctx, ld->hsm_fd); if (!fromwire_hsmd_get_channel_basepoints_reply( msg, &base, &funding_pubkey)) fatal("malformed hsmd_get_channel_basepoints_reply " @@ -1277,8 +1247,7 @@ static void fillin_missing_local_basepoints(struct lightningd *ld, /* New 'channel_blockheights' table, every existing channel gets a * 'initial blockheight' of 0 */ static void fillin_missing_channel_blockheights(struct lightningd *ld, - struct db *db, - const struct migration_context *mc) + struct db *db) { struct db_stmt *stmt; @@ -1302,8 +1271,7 @@ static void fillin_missing_channel_blockheights(struct lightningd *ld, } void -migrate_inflight_last_tx_to_psbt(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +migrate_inflight_last_tx_to_psbt(struct lightningd *ld, struct db *db) { struct db_stmt *stmt, *update_stmt; stmt = db_prepare_v2(db, SQL("SELECT " @@ -1399,8 +1367,7 @@ migrate_inflight_last_tx_to_psbt(struct lightningd *ld, struct db *db, * This migration loads all of the last_tx's and 're-formats' them into psbts, * adds the required input witness utxo information, and then saves it back to disk * */ -void migrate_last_tx_to_psbt(struct lightningd *ld, struct db *db, - const struct migration_context *mc) +void migrate_last_tx_to_psbt(struct lightningd *ld, struct db *db) { struct db_stmt *stmt, *update_stmt; @@ -1490,8 +1457,7 @@ void migrate_last_tx_to_psbt(struct lightningd *ld, struct db *db, /* We used to store scids as strings... */ static void migrate_channels_scids_as_integers(struct lightningd *ld, - struct db *db, - const struct migration_context *mc) + struct db *db) { struct db_stmt *stmt; char **scids = tal_arr(tmpctx, char *, 0); @@ -1548,8 +1514,7 @@ static void migrate_channels_scids_as_integers(struct lightningd *ld, } static void migrate_payments_scids_as_integers(struct lightningd *ld, - struct db *db, - const struct migration_context *mc) + struct db *db) { struct db_stmt *stmt; const char *colnames[] = {"failchannel"}; @@ -1585,8 +1550,7 @@ static void migrate_payments_scids_as_integers(struct lightningd *ld, } static void fillin_missing_lease_satoshi(struct lightningd *ld, - struct db *db, - const struct migration_context *mc) + struct db *db) { struct db_stmt *stmt;