mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-28 22:50:58 +02:00
lnd: plug in graph SQL migration into dev build
This commit plugs in the graph kvdb-to-sql migration for builds containing the `test_native_sql` tag. This will allow us to perform local tests and write itests for the migration without exposing it to the production release build.
This commit is contained in:
@@ -1097,7 +1097,7 @@ func (d *DefaultDatabaseBuilder) BuildDatabase(
|
|||||||
// migration's version (7), it will be skipped permanently,
|
// migration's version (7), it will be skipped permanently,
|
||||||
// regardless of the flag.
|
// regardless of the flag.
|
||||||
if !d.cfg.DB.SkipNativeSQLMigration {
|
if !d.cfg.DB.SkipNativeSQLMigration {
|
||||||
migrationFn := func(tx *sqlc.Queries) error {
|
invoiceMig := func(tx *sqlc.Queries) error {
|
||||||
err := invoices.MigrateInvoicesToSQL(
|
err := invoices.MigrateInvoicesToSQL(
|
||||||
ctx, dbs.ChanStateDB.Backend,
|
ctx, dbs.ChanStateDB.Backend,
|
||||||
dbs.ChanStateDB, tx,
|
dbs.ChanStateDB, tx,
|
||||||
@@ -1119,11 +1119,22 @@ func (d *DefaultDatabaseBuilder) BuildDatabase(
|
|||||||
// Make sure we attach the custom migration function to
|
// Make sure we attach the custom migration function to
|
||||||
// the correct migration version.
|
// the correct migration version.
|
||||||
for i := 0; i < len(migrations); i++ {
|
for i := 0; i < len(migrations); i++ {
|
||||||
if migrations[i].Version != invoiceMigration {
|
version := migrations[i].Version
|
||||||
|
if version == invoiceMigration {
|
||||||
|
migrations[i].MigrationFn = invoiceMig
|
||||||
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
migrations[i].MigrationFn = migrationFn
|
migFn, ok := getSQLMigration(
|
||||||
|
ctx, version, dbs.ChanStateDB.Backend,
|
||||||
|
*d.cfg.ActiveNetParams.GenesisHash,
|
||||||
|
)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
migrations[i].MigrationFn = migFn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,9 +3,13 @@
|
|||||||
package lnd
|
package lnd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
"github.com/lightningnetwork/lnd/sqldb"
|
"github.com/lightningnetwork/lnd/sqldb"
|
||||||
|
"github.com/lightningnetwork/lnd/sqldb/sqlc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getGraphStore returns a graphdb.V1Store backed by a graphdb.KVStore
|
// getGraphStore returns a graphdb.V1Store backed by a graphdb.KVStore
|
||||||
@@ -16,3 +20,15 @@ func (d *DefaultDatabaseBuilder) getGraphStore(_ *sqldb.BaseDB,
|
|||||||
|
|
||||||
return graphdb.NewKVStore(kvBackend, opts...)
|
return graphdb.NewKVStore(kvBackend, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getSQLMigration returns a migration function for the given version.
|
||||||
|
//
|
||||||
|
// NOTE: this is a no-op for the production build since all migrations that are
|
||||||
|
// in production will also be in development builds, and so they are not
|
||||||
|
// defined behind a build tag.
|
||||||
|
func getSQLMigration(ctx context.Context, version int,
|
||||||
|
kvBackend kvdb.Backend,
|
||||||
|
chain chainhash.Hash) (func(tx *sqlc.Queries) error, bool) {
|
||||||
|
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
@@ -3,11 +3,15 @@
|
|||||||
package lnd
|
package lnd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
graphdb "github.com/lightningnetwork/lnd/graph/db"
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
"github.com/lightningnetwork/lnd/sqldb"
|
"github.com/lightningnetwork/lnd/sqldb"
|
||||||
|
"github.com/lightningnetwork/lnd/sqldb/sqlc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getGraphStore returns a graphdb.V1Store backed by a graphdb.SQLStore
|
// getGraphStore returns a graphdb.V1Store backed by a graphdb.SQLStore
|
||||||
@@ -29,3 +33,32 @@ func (d *DefaultDatabaseBuilder) getGraphStore(baseDB *sqldb.BaseDB,
|
|||||||
graphExecutor, opts...,
|
graphExecutor, opts...,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// graphSQLMigration is the version number for the graph migration
|
||||||
|
// that migrates the KV graph to the native SQL schema.
|
||||||
|
const graphSQLMigration = 9
|
||||||
|
|
||||||
|
// getSQLMigration returns a migration function for the given version.
|
||||||
|
func getSQLMigration(ctx context.Context, version int,
|
||||||
|
kvBackend kvdb.Backend,
|
||||||
|
chain chainhash.Hash) (func(tx *sqlc.Queries) error, bool) {
|
||||||
|
|
||||||
|
switch version {
|
||||||
|
case graphSQLMigration:
|
||||||
|
return func(tx *sqlc.Queries) error {
|
||||||
|
err := graphdb.MigrateGraphToSQL(
|
||||||
|
ctx, kvBackend, tx, chain,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to migrate graph "+
|
||||||
|
"to SQL: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// No version was matched, so we return false to indicate that no
|
||||||
|
// migration is known for the given version.
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
@@ -8,4 +8,13 @@ var migrationAdditions = []MigrationConfig{
|
|||||||
Version: 8,
|
Version: 8,
|
||||||
SchemaVersion: 7,
|
SchemaVersion: 7,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "kv_graph_migration",
|
||||||
|
Version: 9,
|
||||||
|
SchemaVersion: 7,
|
||||||
|
// A migration function may be attached to this
|
||||||
|
// migration to migrate KV graph to the native SQL
|
||||||
|
// schema. This is optional and can be disabled by the
|
||||||
|
// user if necessary.
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user