mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-20 13:04:28 +02:00
graph/db+sqldb: improve efficiency of node migration
There is no need to use the "collect-then-update" pattern for node insertion during the SQL migration since if we do have any previously persisted data for the node and happen to re-run the insertion for that node, the data will be exactly the same. So we can make use of "On conflict, no nothing" here too.
This commit is contained in:
@@ -2389,39 +2389,6 @@ func (q *Queries) InsertClosedChannel(ctx context.Context, scid []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
const insertNodeAddress = `-- name: InsertNodeAddress :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
graph_node_addresses table queries
|
||||
───────────────────────────────────<E29480><E29480>─────────
|
||||
*/
|
||||
|
||||
INSERT INTO graph_node_addresses (
|
||||
node_id,
|
||||
type,
|
||||
address,
|
||||
position
|
||||
) VALUES (
|
||||
$1, $2, $3, $4
|
||||
)
|
||||
`
|
||||
|
||||
type InsertNodeAddressParams struct {
|
||||
NodeID int64
|
||||
Type int16
|
||||
Address string
|
||||
Position int32
|
||||
}
|
||||
|
||||
func (q *Queries) InsertNodeAddress(ctx context.Context, arg InsertNodeAddressParams) error {
|
||||
_, err := q.db.ExecContext(ctx, insertNodeAddress,
|
||||
arg.NodeID,
|
||||
arg.Type,
|
||||
arg.Address,
|
||||
arg.Position,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const insertNodeFeature = `-- name: InsertNodeFeature :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
graph_node_features table queries
|
||||
@@ -2432,7 +2399,9 @@ INSERT INTO graph_node_features (
|
||||
node_id, feature_bit
|
||||
) VALUES (
|
||||
$1, $2
|
||||
)
|
||||
) ON CONFLICT (node_id, feature_bit)
|
||||
-- Do nothing if the feature already exists for the node.
|
||||
DO NOTHING
|
||||
`
|
||||
|
||||
type InsertNodeFeatureParams struct {
|
||||
@@ -3462,6 +3431,40 @@ func (q *Queries) UpsertNode(ctx context.Context, arg UpsertNodeParams) (int64,
|
||||
return id, err
|
||||
}
|
||||
|
||||
const upsertNodeAddress = `-- name: UpsertNodeAddress :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
graph_node_addresses table queries
|
||||
───────────────────────────────────<E29480><E29480>─────────
|
||||
*/
|
||||
|
||||
INSERT INTO graph_node_addresses (
|
||||
node_id,
|
||||
type,
|
||||
address,
|
||||
position
|
||||
) VALUES (
|
||||
$1, $2, $3, $4
|
||||
) ON CONFLICT (node_id, type, position)
|
||||
DO UPDATE SET address = EXCLUDED.address
|
||||
`
|
||||
|
||||
type UpsertNodeAddressParams struct {
|
||||
NodeID int64
|
||||
Type int16
|
||||
Address string
|
||||
Position int32
|
||||
}
|
||||
|
||||
func (q *Queries) UpsertNodeAddress(ctx context.Context, arg UpsertNodeAddressParams) error {
|
||||
_, err := q.db.ExecContext(ctx, upsertNodeAddress,
|
||||
arg.NodeID,
|
||||
arg.Type,
|
||||
arg.Address,
|
||||
arg.Position,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const upsertNodeExtraType = `-- name: UpsertNodeExtraType :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
graph_node_extra_types table queries
|
||||
|
@@ -97,7 +97,6 @@ type Querier interface {
|
||||
InsertInvoiceHTLCCustomRecord(ctx context.Context, arg InsertInvoiceHTLCCustomRecordParams) error
|
||||
InsertKVInvoiceKeyAndAddIndex(ctx context.Context, arg InsertKVInvoiceKeyAndAddIndexParams) error
|
||||
InsertMigratedInvoice(ctx context.Context, arg InsertMigratedInvoiceParams) (int64, error)
|
||||
InsertNodeAddress(ctx context.Context, arg InsertNodeAddressParams) error
|
||||
InsertNodeFeature(ctx context.Context, arg InsertNodeFeatureParams) error
|
||||
// NOTE: This query is only meant to be used by the graph SQL migration since
|
||||
// for that migration, in order to be retry-safe, we don't want to error out if
|
||||
@@ -133,6 +132,7 @@ type Querier interface {
|
||||
UpsertAMPSubInvoice(ctx context.Context, arg UpsertAMPSubInvoiceParams) (sql.Result, error)
|
||||
UpsertEdgePolicy(ctx context.Context, arg UpsertEdgePolicyParams) (int64, error)
|
||||
UpsertNode(ctx context.Context, arg UpsertNodeParams) (int64, error)
|
||||
UpsertNodeAddress(ctx context.Context, arg UpsertNodeAddressParams) error
|
||||
UpsertNodeExtraType(ctx context.Context, arg UpsertNodeExtraTypeParams) error
|
||||
UpsertPruneLogEntry(ctx context.Context, arg UpsertPruneLogEntryParams) error
|
||||
UpsertZombieChannel(ctx context.Context, arg UpsertZombieChannelParams) error
|
||||
|
@@ -105,7 +105,9 @@ INSERT INTO graph_node_features (
|
||||
node_id, feature_bit
|
||||
) VALUES (
|
||||
$1, $2
|
||||
);
|
||||
) ON CONFLICT (node_id, feature_bit)
|
||||
-- Do nothing if the feature already exists for the node.
|
||||
DO NOTHING;
|
||||
|
||||
-- name: GetNodeFeatures :many
|
||||
SELECT *
|
||||
@@ -135,7 +137,7 @@ WHERE node_id = $1
|
||||
───────────────────────────────────<E29480><E29480>─────────
|
||||
*/
|
||||
|
||||
-- name: InsertNodeAddress :exec
|
||||
-- name: UpsertNodeAddress :exec
|
||||
INSERT INTO graph_node_addresses (
|
||||
node_id,
|
||||
type,
|
||||
@@ -143,7 +145,8 @@ INSERT INTO graph_node_addresses (
|
||||
position
|
||||
) VALUES (
|
||||
$1, $2, $3, $4
|
||||
);
|
||||
) ON CONFLICT (node_id, type, position)
|
||||
DO UPDATE SET address = EXCLUDED.address;
|
||||
|
||||
-- name: GetNodeAddresses :many
|
||||
SELECT type, address
|
||||
|
Reference in New Issue
Block a user