MCPcopy Create free account
hub / github.com/ElementsProject/lightning / db_migrate

Function db_migrate

wallet/db.c:945–1004  ·  view source on GitHub ↗

* db_migrate - Apply all remaining migrations from the current version */

Source from the content-addressed store, hash-verified

943 * db_migrate - Apply all remaining migrations from the current version
944 */
945static bool db_migrate(struct lightningd *ld, struct db *db,
946 const struct ext_key *bip32_base)
947{
948 /* Attempt to read the version from the database */
949 int current, orig, available;
950 struct db_stmt *stmt;
951 const struct migration_context mc = {
952 .bip32_base = bip32_base,
953 .hsm_fd = ld->hsm_fd,
954 };
955
956 orig = current = db_get_version(db);
957 available = ARRAY_SIZE(dbmigrations) - 1;
958
959 if (current == -1)
960 log_info(ld->log, "Creating database");
961 else if (available < current)
962 db_fatal("Refusing to migrate down from version %u to %u",
963 current, available);
964 else if (current != available) {
965 if (ld->db_upgrade_ok && *ld->db_upgrade_ok == false) {
966 db_fatal("Refusing to upgrade db from version %u to %u (database-upgrade=false)",
967 current, available);
968 } else if (!ld->db_upgrade_ok && !is_released_version()) {
969 db_fatal("Refusing to irreversibly upgrade db from version %u to %u in non-final version %s (use --database-upgrade=true to override)",
970 current, available, version());
971 }
972 log_info(ld->log, "Updating database from version %u to %u",
973 current, available);
974 }
975
976 while (current < available) {
977 current++;
978 if (dbmigrations[current].sql) {
979 stmt = db_prepare_v2(db, dbmigrations[current].sql);
980 db_exec_prepared_v2(stmt);
981 tal_free(stmt);
982 }
983 if (dbmigrations[current].func)
984 dbmigrations[current].func(ld, db, &mc);
985 }
986
987 /* Finally update the version number in the version table */
988 stmt = db_prepare_v2(db, SQL("UPDATE version SET version=?;"));
989 db_bind_int(stmt, 0, available);
990 db_exec_prepared_v2(stmt);
991 tal_free(stmt);
992
993 /* Annotate that we did upgrade, if any. */
994 if (current != orig) {
995 stmt = db_prepare_v2(
996 db, SQL("INSERT INTO db_upgrades VALUES (?, ?);"));
997 db_bind_int(stmt, 0, orig);
998 db_bind_text(stmt, 1, version());
999 db_exec_prepared_v2(stmt);
1000 tal_free(stmt);
1001 }
1002

Callers 4

db_setupFunction · 0.70
test_empty_db_migrateFunction · 0.50
test_varsFunction · 0.50
create_test_walletFunction · 0.50

Calls 9

db_get_versionFunction · 0.85
log_infoClass · 0.85
is_released_versionFunction · 0.85
db_exec_prepared_v2Function · 0.85
tal_freeFunction · 0.85
db_bind_intFunction · 0.85
db_bind_textFunction · 0.85
db_fatalFunction · 0.70
versionFunction · 0.50

Tested by 3

test_empty_db_migrateFunction · 0.40
test_varsFunction · 0.40
create_test_walletFunction · 0.40