graph/db: add gossip version aliases
Introduce gossipV1 and gossipV2 package-level aliases in sql_store.go to reduce verbosity in version switch statements. Leave hard-coded v1/v2 call sites untouched so remaining upgrades are obvious. In other words, it is now easy to see where our remaining work in the sql_store.go file is by just searching for instances of `lnwire.GossipVersion1`.
This commit is contained in:
1 file changed
+42
-36
+42
-36
@@ -33,6 +33,11 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/tor"
|
"github.com/lightningnetwork/lnd/tor"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
gossipV1 = lnwire.GossipVersion1
|
||||||
|
gossipV2 = lnwire.GossipVersion2
|
||||||
|
)
|
||||||
|
|
||||||
// SQLQueries is a subset of the sqlc.Querier interface that can be used to
|
// SQLQueries is a subset of the sqlc.Querier interface that can be used to
|
||||||
// execute queries against the SQL graph tables.
|
// execute queries against the SQL graph tables.
|
||||||
//
|
//
|
||||||
@@ -305,7 +310,7 @@ func (s *SQLStore) HasV1Node(ctx context.Context,
|
|||||||
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
||||||
dbNode, err := db.GetNodeByPubKey(
|
dbNode, err := db.GetNodeByPubKey(
|
||||||
ctx, sqlc.GetNodeByPubKeyParams{
|
ctx, sqlc.GetNodeByPubKeyParams{
|
||||||
Version: int16(lnwire.GossipVersion1),
|
Version: int16(gossipV1),
|
||||||
PubKey: pubKey[:],
|
PubKey: pubKey[:],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -869,11 +874,11 @@ func (s *SQLStore) updateEdgeCache(e *models.ChannelEdgePolicy,
|
|||||||
// during the next query for this edge.
|
// during the next query for this edge.
|
||||||
if entry, ok := s.rejectCache.get(e.Version, e.ChannelID); ok {
|
if entry, ok := s.rejectCache.get(e.Version, e.ChannelID); ok {
|
||||||
switch e.Version {
|
switch e.Version {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
updateRejectCacheEntryV1(
|
updateRejectCacheEntryV1(
|
||||||
&entry, isUpdate1, e.LastUpdate,
|
&entry, isUpdate1, e.LastUpdate,
|
||||||
)
|
)
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
updateRejectCacheEntryV2(
|
updateRejectCacheEntryV2(
|
||||||
&entry, isUpdate1, e.LastBlockHeight,
|
&entry, isUpdate1, e.LastBlockHeight,
|
||||||
)
|
)
|
||||||
@@ -2242,7 +2247,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
// We'll query the cache with the shared lock held to allow multiple
|
// We'll query the cache with the shared lock held to allow multiple
|
||||||
// readers to access values in the cache concurrently if they exist.
|
// readers to access values in the cache concurrently if they exist.
|
||||||
s.cacheMu.RLock()
|
s.cacheMu.RLock()
|
||||||
if entry, ok := s.rejectCache.get(lnwire.GossipVersion1, chanID); ok {
|
if entry, ok := s.rejectCache.get(gossipV1, chanID); ok {
|
||||||
s.cacheMu.RUnlock()
|
s.cacheMu.RUnlock()
|
||||||
node1LastUpdate = time.Unix(entry.upd1Time, 0)
|
node1LastUpdate = time.Unix(entry.upd1Time, 0)
|
||||||
node2LastUpdate = time.Unix(entry.upd2Time, 0)
|
node2LastUpdate = time.Unix(entry.upd2Time, 0)
|
||||||
@@ -2258,7 +2263,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
// The item was not found with the shared lock, so we'll acquire the
|
// The item was not found with the shared lock, so we'll acquire the
|
||||||
// exclusive lock and check the cache again in case another method added
|
// exclusive lock and check the cache again in case another method added
|
||||||
// the entry to the cache while no lock was held.
|
// the entry to the cache while no lock was held.
|
||||||
if entry, ok := s.rejectCache.get(lnwire.GossipVersion1, chanID); ok {
|
if entry, ok := s.rejectCache.get(gossipV1, chanID); ok {
|
||||||
node1LastUpdate = time.Unix(entry.upd1Time, 0)
|
node1LastUpdate = time.Unix(entry.upd1Time, 0)
|
||||||
node2LastUpdate = time.Unix(entry.upd2Time, 0)
|
node2LastUpdate = time.Unix(entry.upd2Time, 0)
|
||||||
exists, isZombie = entry.flags.unpack()
|
exists, isZombie = entry.flags.unpack()
|
||||||
@@ -2271,7 +2276,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
channel, err := db.GetChannelBySCID(
|
channel, err := db.GetChannelBySCID(
|
||||||
ctx, sqlc.GetChannelBySCIDParams{
|
ctx, sqlc.GetChannelBySCIDParams{
|
||||||
Scid: chanIDB,
|
Scid: chanIDB,
|
||||||
Version: int16(lnwire.GossipVersion1),
|
Version: int16(gossipV1),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if errors.Is(err, sql.ErrNoRows) {
|
if errors.Is(err, sql.ErrNoRows) {
|
||||||
@@ -2279,7 +2284,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
isZombie, err = db.IsZombieChannel(
|
isZombie, err = db.IsZombieChannel(
|
||||||
ctx, sqlc.IsZombieChannelParams{
|
ctx, sqlc.IsZombieChannelParams{
|
||||||
Scid: chanIDB,
|
Scid: chanIDB,
|
||||||
Version: int16(lnwire.GossipVersion1),
|
Version: int16(gossipV1),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -2296,7 +2301,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
|
|
||||||
policy1, err := db.GetChannelPolicyByChannelAndNode(
|
policy1, err := db.GetChannelPolicyByChannelAndNode(
|
||||||
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
|
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
|
||||||
Version: int16(lnwire.GossipVersion1),
|
Version: int16(gossipV1),
|
||||||
ChannelID: channel.ID,
|
ChannelID: channel.ID,
|
||||||
NodeID: channel.NodeID1,
|
NodeID: channel.NodeID1,
|
||||||
},
|
},
|
||||||
@@ -2310,7 +2315,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
|
|
||||||
policy2, err := db.GetChannelPolicyByChannelAndNode(
|
policy2, err := db.GetChannelPolicyByChannelAndNode(
|
||||||
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
|
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
|
||||||
Version: int16(lnwire.GossipVersion1),
|
Version: int16(gossipV1),
|
||||||
ChannelID: channel.ID,
|
ChannelID: channel.ID,
|
||||||
NodeID: channel.NodeID2,
|
NodeID: channel.NodeID2,
|
||||||
},
|
},
|
||||||
@@ -2330,7 +2335,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
s.rejectCache.insert(
|
s.rejectCache.insert(
|
||||||
lnwire.GossipVersion1, chanID,
|
gossipV1, chanID,
|
||||||
newRejectCacheEntryV1(
|
newRejectCacheEntryV1(
|
||||||
node1LastUpdate, node2LastUpdate, exists,
|
node1LastUpdate, node2LastUpdate, exists,
|
||||||
isZombie,
|
isZombie,
|
||||||
@@ -2427,13 +2432,13 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
|
|||||||
err)
|
err)
|
||||||
} else if err == nil {
|
} else if err == nil {
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
if policy1.LastUpdate.Valid {
|
if policy1.LastUpdate.Valid {
|
||||||
node1LastUpdate = time.Unix(
|
node1LastUpdate = time.Unix(
|
||||||
policy1.LastUpdate.Int64, 0,
|
policy1.LastUpdate.Int64, 0,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
if policy1.BlockHeight.Valid {
|
if policy1.BlockHeight.Valid {
|
||||||
node1Block = uint32(
|
node1Block = uint32(
|
||||||
policy1.BlockHeight.Int64,
|
policy1.BlockHeight.Int64,
|
||||||
@@ -2454,13 +2459,13 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
|
|||||||
err)
|
err)
|
||||||
} else if err == nil {
|
} else if err == nil {
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
if policy2.LastUpdate.Valid {
|
if policy2.LastUpdate.Valid {
|
||||||
node2LastUpdate = time.Unix(
|
node2LastUpdate = time.Unix(
|
||||||
policy2.LastUpdate.Int64, 0,
|
policy2.LastUpdate.Int64, 0,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
if policy2.BlockHeight.Valid {
|
if policy2.BlockHeight.Valid {
|
||||||
node2Block = uint32(
|
node2Block = uint32(
|
||||||
policy2.BlockHeight.Int64,
|
policy2.BlockHeight.Int64,
|
||||||
@@ -2478,11 +2483,11 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
|
|||||||
|
|
||||||
var entry rejectCacheEntry
|
var entry rejectCacheEntry
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
entry = newRejectCacheEntryV1(
|
entry = newRejectCacheEntryV1(
|
||||||
node1LastUpdate, node2LastUpdate, exists, isZombie,
|
node1LastUpdate, node2LastUpdate, exists, isZombie,
|
||||||
)
|
)
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
entry = newRejectCacheEntryV2(
|
entry = newRejectCacheEntryV2(
|
||||||
node1Block, node2Block, exists, isZombie,
|
node1Block, node2Block, exists, isZombie,
|
||||||
)
|
)
|
||||||
@@ -2544,9 +2549,9 @@ func (s *SQLStore) IsPublicNode(v lnwire.GossipVersion, pubKey [33]byte) (bool,
|
|||||||
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
||||||
var err error
|
var err error
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
isPublic, err = db.IsPublicV1Node(ctx, pubKey[:])
|
isPublic, err = db.IsPublicV1Node(ctx, pubKey[:])
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
isPublic, err = db.IsPublicV2Node(ctx, pubKey[:])
|
isPublic, err = db.IsPublicV2Node(ctx, pubKey[:])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3205,7 +3210,7 @@ func (s *SQLStore) AddEdgeProof(scid lnwire.ShortChannelID,
|
|||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
switch proof.Version {
|
switch proof.Version {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
res, err = db.AddV1ChannelProof(
|
res, err = db.AddV1ChannelProof(
|
||||||
ctx, sqlc.AddV1ChannelProofParams{
|
ctx, sqlc.AddV1ChannelProofParams{
|
||||||
Scid: scidBytes,
|
Scid: scidBytes,
|
||||||
@@ -3216,7 +3221,7 @@ func (s *SQLStore) AddEdgeProof(scid lnwire.ShortChannelID,
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
res, err = db.AddV2ChannelProof(
|
res, err = db.AddV2ChannelProof(
|
||||||
ctx, sqlc.AddV2ChannelProofParams{
|
ctx, sqlc.AddV2ChannelProofParams{
|
||||||
Scid: scidBytes,
|
Scid: scidBytes,
|
||||||
@@ -3691,7 +3696,8 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
|
|||||||
Signature: edge.SigBytes,
|
Signature: edge.SigBytes,
|
||||||
}
|
}
|
||||||
|
|
||||||
if version == lnwire.GossipVersion1 {
|
switch version {
|
||||||
|
case gossipV1:
|
||||||
params.LastUpdate = sqldb.SQLInt64(edge.LastUpdate.Unix())
|
params.LastUpdate = sqldb.SQLInt64(edge.LastUpdate.Unix())
|
||||||
params.Disabled = sql.NullBool{
|
params.Disabled = sql.NullBool{
|
||||||
Valid: true,
|
Valid: true,
|
||||||
@@ -3701,7 +3707,7 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
|
|||||||
Valid: edge.MessageFlags.HasMaxHtlc(),
|
Valid: edge.MessageFlags.HasMaxHtlc(),
|
||||||
Int64: int64(edge.MaxHTLC),
|
Int64: int64(edge.MaxHTLC),
|
||||||
}
|
}
|
||||||
} else {
|
case gossipV2:
|
||||||
params.BlockHeight = sqldb.SQLInt64(
|
params.BlockHeight = sqldb.SQLInt64(
|
||||||
int64(edge.LastBlockHeight),
|
int64(edge.LastBlockHeight),
|
||||||
)
|
)
|
||||||
@@ -3718,7 +3724,7 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
|
|||||||
// Convert the flat extra opaque data into a map of TLV types to
|
// Convert the flat extra opaque data into a map of TLV types to
|
||||||
// values.
|
// values.
|
||||||
extra := edge.ExtraSignedFields
|
extra := edge.ExtraSignedFields
|
||||||
if version == lnwire.GossipVersion1 {
|
if version == gossipV1 {
|
||||||
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
|
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return node1Pub, node2Pub, false, fmt.Errorf(
|
return node1Pub, node2Pub, false, fmt.Errorf(
|
||||||
@@ -3794,9 +3800,9 @@ func buildNode(ctx context.Context, cfg *sqldb.QueryConfig, db SQLQueries,
|
|||||||
// and supported.
|
// and supported.
|
||||||
func isKnownGossipVersion(v lnwire.GossipVersion) bool {
|
func isKnownGossipVersion(v lnwire.GossipVersion) bool {
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
return true
|
return true
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
@@ -3870,7 +3876,7 @@ func buildNodeWithBatchData(dbNode sqlc.GraphNode,
|
|||||||
|
|
||||||
// Use preloaded extra fields.
|
// Use preloaded extra fields.
|
||||||
if extraFields, exists := batchData.extraFields[dbNode.ID]; exists {
|
if extraFields, exists := batchData.extraFields[dbNode.ID]; exists {
|
||||||
if v == lnwire.GossipVersion1 {
|
if v == gossipV1 {
|
||||||
records := lnwire.CustomRecords(extraFields)
|
records := lnwire.CustomRecords(extraFields)
|
||||||
recs, err := records.Serialize()
|
recs, err := records.Serialize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -3963,7 +3969,7 @@ func upsertNodeAncillaryData(ctx context.Context, db SQLQueries,
|
|||||||
// Convert the flat extra opaque data into a map of TLV types to
|
// Convert the flat extra opaque data into a map of TLV types to
|
||||||
// values.
|
// values.
|
||||||
extra := node.ExtraSignedFields
|
extra := node.ExtraSignedFields
|
||||||
if node.Version == lnwire.GossipVersion1 {
|
if node.Version == gossipV1 {
|
||||||
extra, err = marshalExtraOpaqueData(node.ExtraOpaqueData)
|
extra, err = marshalExtraOpaqueData(node.ExtraOpaqueData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to marshal extra opaque "+
|
return fmt.Errorf("unable to marshal extra opaque "+
|
||||||
@@ -4002,10 +4008,10 @@ func populateNodeParams(node *models.Node,
|
|||||||
})
|
})
|
||||||
|
|
||||||
switch node.Version {
|
switch node.Version {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
lastUpdate = sqldb.SQLInt64(node.LastUpdate.Unix())
|
lastUpdate = sqldb.SQLInt64(node.LastUpdate.Unix())
|
||||||
|
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
lastBlockHeight = sqldb.SQLInt64(int64(node.LastBlockHeight))
|
lastBlockHeight = sqldb.SQLInt64(int64(node.LastBlockHeight))
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -4582,7 +4588,7 @@ func insertChannel(ctx context.Context, db SQLQueries,
|
|||||||
|
|
||||||
// Finally, insert any extra TLV fields in the channel announcement.
|
// Finally, insert any extra TLV fields in the channel announcement.
|
||||||
extra := edge.ExtraSignedFields
|
extra := edge.ExtraSignedFields
|
||||||
if v == lnwire.GossipVersion1 {
|
if v == gossipV1 {
|
||||||
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
|
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to marshal extra opaque "+
|
return fmt.Errorf("unable to marshal extra opaque "+
|
||||||
@@ -4728,7 +4734,7 @@ func buildEdgeInfoWithBatchData(chain chainhash.Hash,
|
|||||||
// Build the appropriate channel based on version.
|
// Build the appropriate channel based on version.
|
||||||
var channel *models.ChannelEdgeInfo
|
var channel *models.ChannelEdgeInfo
|
||||||
switch v {
|
switch v {
|
||||||
case lnwire.GossipVersion1:
|
case gossipV1:
|
||||||
// For v1, serialize extras into ExtraOpaqueData.
|
// For v1, serialize extras into ExtraOpaqueData.
|
||||||
recs, err := lnwire.CustomRecords(extras).Serialize()
|
recs, err := lnwire.CustomRecords(extras).Serialize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -4777,7 +4783,7 @@ func buildEdgeInfoWithBatchData(chain chainhash.Hash,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
case lnwire.GossipVersion2:
|
case gossipV2:
|
||||||
v2Fields := &models.ChannelV2Fields{
|
v2Fields := &models.ChannelV2Fields{
|
||||||
ExtraSignedFields: extras,
|
ExtraSignedFields: extras,
|
||||||
}
|
}
|
||||||
@@ -4879,14 +4885,14 @@ func getAndBuildChanPolicies(ctx context.Context, cfg *sqldb.QueryConfig,
|
|||||||
|
|
||||||
// TODO(elle): update to support v2 policies.
|
// TODO(elle): update to support v2 policies.
|
||||||
if dbPol1 != nil &&
|
if dbPol1 != nil &&
|
||||||
lnwire.GossipVersion(dbPol1.Version) != lnwire.GossipVersion1 {
|
lnwire.GossipVersion(dbPol1.Version) != gossipV1 {
|
||||||
|
|
||||||
return nil, nil, fmt.Errorf("unsupported policy1 version: %d",
|
return nil, nil, fmt.Errorf("unsupported policy1 version: %d",
|
||||||
dbPol1.Version)
|
dbPol1.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
if dbPol2 != nil &&
|
if dbPol2 != nil &&
|
||||||
lnwire.GossipVersion(dbPol2.Version) != lnwire.GossipVersion1 {
|
lnwire.GossipVersion(dbPol2.Version) != gossipV1 {
|
||||||
|
|
||||||
return nil, nil, fmt.Errorf("unsupported policy2 version: %d",
|
return nil, nil, fmt.Errorf("unsupported policy2 version: %d",
|
||||||
dbPol2.Version)
|
dbPol2.Version)
|
||||||
@@ -4991,7 +4997,7 @@ func buildChanPolicy(isNode1 bool, dbPolicy sqlc.GraphChannelPolicy,
|
|||||||
InboundFee: inboundFee,
|
InboundFee: inboundFee,
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Version == lnwire.GossipVersion1 {
|
if p.Version != gossipV2 {
|
||||||
recs, err := lnwire.CustomRecords(extras).Serialize()
|
recs, err := lnwire.CustomRecords(extras).Serialize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to serialize extra "+
|
return nil, fmt.Errorf("unable to serialize extra "+
|
||||||
@@ -6358,7 +6364,7 @@ func handleZombieMarking(ctx context.Context, db SQLQueries,
|
|||||||
|
|
||||||
if strictZombiePruning {
|
if strictZombiePruning {
|
||||||
// TODO(elle): update for V2 last update times.
|
// TODO(elle): update for V2 last update times.
|
||||||
if v != lnwire.GossipVersion1 {
|
if v != gossipV1 {
|
||||||
return fmt.Errorf("strict zombie pruning only "+
|
return fmt.Errorf("strict zombie pruning only "+
|
||||||
"supported for gossip v1, got %v", v)
|
"supported for gossip v1, got %v", v)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user