Skip to content

Commit f26bf2c

Browse files
committed
multi: use ChannelEdgePolicy interface where possible
1 parent 2ffaf94 commit f26bf2c

24 files changed

+522
-349
lines changed

autopilot/graph.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (d *dbNode) Addrs() []net.Addr {
9191
func (d *dbNode) ForEachChannel(cb func(ChannelEdge) error) error {
9292
return d.db.ForEachNodeChannel(d.tx, d.node.PubKeyBytes,
9393
func(tx kvdb.RTx, ei models.ChannelEdgeInfo, ep,
94-
_ *models.ChannelEdgePolicy1) error {
94+
_ models.ChannelEdgePolicy) error {
9595

9696
// Skip channels for which no outgoing edge policy is
9797
// available.
@@ -105,15 +105,13 @@ func (d *dbNode) ForEachChannel(cb func(ChannelEdge) error) error {
105105
return nil
106106
}
107107

108-
node, err := d.db.FetchLightningNode(tx, ep.ToNode)
108+
node, err := d.db.FetchLightningNode(tx, ep.GetToNode())
109109
if err != nil {
110110
return err
111111
}
112112

113113
edge := ChannelEdge{
114-
ChanID: lnwire.NewShortChanIDFromInt(
115-
ep.ChannelID,
116-
),
114+
ChanID: ep.SCID(),
117115
Capacity: ei.GetCapacity(),
118116
Peer: &dbNode{
119117
tx: tx,

channeldb/graph.go

Lines changed: 30 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ func NewChannelGraph(db kvdb.Backend, rejectCacheSize, chanCacheSize int,
241241
}
242242

243243
err = g.ForEachChannel(func(info models.ChannelEdgeInfo,
244-
policy1, policy2 *models.ChannelEdgePolicy1) error {
244+
policy1, policy2 models.ChannelEdgePolicy) error {
245245

246246
g.graphCache.AddChannel(info, policy1, policy2)
247247

@@ -267,10 +267,10 @@ type channelMapKey struct {
267267
// getChannelMap loads all channel edge policies from the database and stores
268268
// them in a map.
269269
func (c *ChannelGraph) getChannelMap(edges kvdb.RBucket) (
270-
map[channelMapKey]*models.ChannelEdgePolicy1, error) {
270+
map[channelMapKey]models.ChannelEdgePolicy, error) {
271271

272272
// Create a map to store all channel edge policies.
273-
channelMap := make(map[channelMapKey]*models.ChannelEdgePolicy1)
273+
channelMap := make(map[channelMapKey]models.ChannelEdgePolicy)
274274

275275
err := kvdb.ForAll(edges, func(k, edgeBytes []byte) error {
276276
// Skip embedded buckets.
@@ -313,13 +313,7 @@ func (c *ChannelGraph) getChannelMap(edges kvdb.RBucket) (
313313
return err
314314
}
315315

316-
e, ok := edge.(*models.ChannelEdgePolicy1)
317-
if !ok {
318-
return fmt.Errorf("expected "+
319-
"*models.ChannelEdgePolicy1, got: %T", edge)
320-
}
321-
322-
channelMap[key] = e
316+
channelMap[key] = edge
323317

324318
return nil
325319
})
@@ -431,7 +425,7 @@ func (c *ChannelGraph) NewPathFindTx() (kvdb.RTx, error) {
431425
// for that particular channel edge routing policy will be passed into the
432426
// callback.
433427
func (c *ChannelGraph) ForEachChannel(cb func(models.ChannelEdgeInfo,
434-
*models.ChannelEdgePolicy1, *models.ChannelEdgePolicy1) error) error {
428+
models.ChannelEdgePolicy, models.ChannelEdgePolicy) error) error {
435429

436430
return c.db.View(func(tx kvdb.RTx) error {
437431
edges := tx.ReadBucket(edgeBucket)
@@ -501,7 +495,7 @@ func (c *ChannelGraph) ForEachNodeDirectedChannel(tx kvdb.RTx,
501495
}
502496

503497
dbCallback := func(tx kvdb.RTx, e models.ChannelEdgeInfo, p1,
504-
p2 *models.ChannelEdgePolicy1) error {
498+
p2 models.ChannelEdgePolicy) error {
505499

506500
var cachedInPolicy *models.CachedEdgePolicy
507501
if p2 != nil {
@@ -577,8 +571,8 @@ func (c *ChannelGraph) ForEachNodeCached(cb func(node route.Vertex,
577571

578572
err := c.ForEachNodeChannel(tx, node.PubKeyBytes,
579573
func(tx kvdb.RTx, e models.ChannelEdgeInfo,
580-
p1 *models.ChannelEdgePolicy1,
581-
p2 *models.ChannelEdgePolicy1) error {
574+
p1 models.ChannelEdgePolicy,
575+
p2 models.ChannelEdgePolicy) error {
582576

583577
toNodeCallback := func() route.Vertex {
584578
return node.PubKeyBytes
@@ -2936,7 +2930,7 @@ func makeZombiePubkeys(info models.ChannelEdgeInfo,
29362930
// updated, otherwise it's the second node's information. The node ordering is
29372931
// determined by the lexicographical ordering of the identity public keys of the
29382932
// nodes on either side of the channel.
2939-
func (c *ChannelGraph) UpdateEdgePolicy(edge *models.ChannelEdgePolicy1,
2933+
func (c *ChannelGraph) UpdateEdgePolicy(edge models.ChannelEdgePolicy,
29402934
op ...batch.SchedulerOption) error {
29412935

29422936
var (
@@ -3016,7 +3010,7 @@ func (c *ChannelGraph) updateEdgeCache(e models.ChannelEdgePolicy,
30163010
// buckets using an existing database transaction. The returned boolean will be
30173011
// true if the updated policy belongs to node1, and false if the policy belonged
30183012
// to node2.
3019-
func updateEdgePolicy(tx kvdb.RwTx, edge *models.ChannelEdgePolicy1,
3013+
func updateEdgePolicy(tx kvdb.RwTx, edge models.ChannelEdgePolicy,
30203014
graphCache *GraphCache) (bool, error) {
30213015

30223016
edges := tx.ReadWriteBucket(edgeBucket)
@@ -3031,7 +3025,7 @@ func updateEdgePolicy(tx kvdb.RwTx, edge *models.ChannelEdgePolicy1,
30313025
// Create the channelID key be converting the channel ID
30323026
// integer into a byte slice.
30333027
var chanID [8]byte
3034-
byteOrder.PutUint64(chanID[:], edge.ChannelID)
3028+
byteOrder.PutUint64(chanID[:], edge.SCID().ToUint64())
30353029

30363030
// With the channel ID, we then fetch the value storing the two
30373031
// nodes which connect this channel edge.
@@ -3220,8 +3214,8 @@ func (c *ChannelGraph) isPublic(tx kvdb.RTx, nodePub route.Vertex,
32203214
nodeIsPublic := false
32213215
errDone := errors.New("done")
32223216
err := c.ForEachNodeChannel(tx, nodePub, func(tx kvdb.RTx,
3223-
info models.ChannelEdgeInfo, _ *models.ChannelEdgePolicy1,
3224-
_ *models.ChannelEdgePolicy1) error {
3217+
info models.ChannelEdgeInfo, _ models.ChannelEdgePolicy,
3218+
_ models.ChannelEdgePolicy) error {
32253219

32263220
// If this edge doesn't extend to the source node, we'll
32273221
// terminate our search as we can now conclude that the node is
@@ -3346,8 +3340,8 @@ func (n *graphCacheNode) Features() *lnwire.FeatureVector {
33463340
//
33473341
// Unknown policies are passed into the callback as nil values.
33483342
func (n *graphCacheNode) ForEachChannel(tx kvdb.RTx,
3349-
cb func(kvdb.RTx, models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
3350-
*models.ChannelEdgePolicy1) error) error {
3343+
cb func(kvdb.RTx, models.ChannelEdgeInfo, models.ChannelEdgePolicy,
3344+
models.ChannelEdgePolicy) error) error {
33513345

33523346
return nodeTraversal(tx, n.pubKeyBytes[:], nil, cb)
33533347
}
@@ -3407,8 +3401,8 @@ func (c *ChannelGraph) HasLightningNode(nodePub [33]byte) (time.Time, bool, erro
34073401
// nodeTraversal is used to traverse all channels of a node given by its
34083402
// public key and passes channel information into the specified callback.
34093403
func nodeTraversal(tx kvdb.RTx, nodePub []byte, db kvdb.Backend,
3410-
cb func(kvdb.RTx, models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
3411-
*models.ChannelEdgePolicy1) error) error {
3404+
cb func(kvdb.RTx, models.ChannelEdgeInfo, models.ChannelEdgePolicy,
3405+
models.ChannelEdgePolicy) error) error {
34123406

34133407
traversal := func(tx kvdb.RTx) error {
34143408
edges := tx.ReadBucket(edgeBucket)
@@ -3476,30 +3470,8 @@ func nodeTraversal(tx kvdb.RTx, nodePub []byte, db kvdb.Backend,
34763470
return err
34773471
}
34783472

3479-
var (
3480-
in, out *models.ChannelEdgePolicy1
3481-
ok bool
3482-
)
3483-
if outgoingPolicy != nil {
3484-
out, ok = outgoingPolicy.(*models.ChannelEdgePolicy1) //nolint:lll
3485-
if !ok {
3486-
return fmt.Errorf("expected "+
3487-
"*models.ChannelEdgePolicy1, "+
3488-
"got %T", outgoingPolicy)
3489-
}
3490-
}
3491-
3492-
if incomingPolicy != nil {
3493-
in, ok = incomingPolicy.(*models.ChannelEdgePolicy1) //nolint:lll
3494-
if !ok {
3495-
return fmt.Errorf("expected "+
3496-
"*models.ChannelEdgePolicy1, "+
3497-
"got %T", incomingPolicy)
3498-
}
3499-
}
3500-
35013473
// Finally, we execute the callback.
3502-
err = cb(tx, edgeInfo, out, in)
3474+
err = cb(tx, edgeInfo, outgoingPolicy, incomingPolicy)
35033475
if err != nil {
35043476
return err
35053477
}
@@ -3533,8 +3505,8 @@ func nodeTraversal(tx kvdb.RTx, nodePub []byte, db kvdb.Backend,
35333505
// be nil and a fresh transaction will be created to execute the graph
35343506
// traversal.
35353507
func (c *ChannelGraph) ForEachNodeChannel(tx kvdb.RTx, nodePub route.Vertex,
3536-
cb func(kvdb.RTx, models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
3537-
*models.ChannelEdgePolicy1) error) error {
3508+
cb func(kvdb.RTx, models.ChannelEdgeInfo, models.ChannelEdgePolicy,
3509+
models.ChannelEdgePolicy) error) error {
35383510

35393511
return nodeTraversal(tx, nodePub[:], c.db, cb)
35403512
}
@@ -3621,13 +3593,13 @@ func computeEdgePolicyKeys(info models.ChannelEdgeInfo) ([]byte, []byte) {
36213593
// information for the channel itself is returned as well as two structs that
36223594
// contain the routing policies for the channel in either direction.
36233595
func (c *ChannelGraph) FetchChannelEdgesByOutpoint(op *wire.OutPoint) (
3624-
models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
3625-
*models.ChannelEdgePolicy1, error) {
3596+
models.ChannelEdgeInfo, models.ChannelEdgePolicy,
3597+
models.ChannelEdgePolicy, error) {
36263598

36273599
var (
36283600
edgeInfo models.ChannelEdgeInfo
3629-
policy1 *models.ChannelEdgePolicy1
3630-
policy2 *models.ChannelEdgePolicy1
3601+
policy1 models.ChannelEdgePolicy
3602+
policy2 models.ChannelEdgePolicy
36313603
)
36323604

36333605
err := kvdb.View(c.db, func(tx kvdb.RTx) error {
@@ -3677,34 +3649,13 @@ func (c *ChannelGraph) FetchChannelEdgesByOutpoint(op *wire.OutPoint) (
36773649
// Once we have the information about the channels' parameters,
36783650
// we'll fetch the routing policies for each for the directed
36793651
// edges.
3680-
edge1, edge2, err := fetchChanEdgePolicies(
3652+
e1, e2, err := fetchChanEdgePolicies(
36813653
edgeIndex, edges, chanID,
36823654
)
36833655
if err != nil {
36843656
return err
36853657
}
36863658

3687-
var (
3688-
e1, e2 *models.ChannelEdgePolicy1
3689-
ok bool
3690-
)
3691-
if edge1 != nil {
3692-
e1, ok = edge1.(*models.ChannelEdgePolicy1)
3693-
if !ok {
3694-
return fmt.Errorf("expected "+
3695-
"*models.ChannelEdgePolicy1, got %T",
3696-
edge1)
3697-
}
3698-
}
3699-
if edge2 != nil {
3700-
e2, ok = edge2.(*models.ChannelEdgePolicy1)
3701-
if !ok {
3702-
return fmt.Errorf("expected "+
3703-
"*models.ChannelEdgePolicy1, got %T",
3704-
edge1)
3705-
}
3706-
}
3707-
37083659
policy1 = e1
37093660
policy2 = e2
37103661
return nil
@@ -3730,13 +3681,13 @@ func (c *ChannelGraph) FetchChannelEdgesByOutpoint(op *wire.OutPoint) (
37303681
// within the database. In this case, the ChannelEdgePolicy1's will be nil, and
37313682
// the ChannelEdgeInfo1 will only include the public keys of each node.
37323683
func (c *ChannelGraph) FetchChannelEdgesByID(chanID uint64) (
3733-
models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
3734-
*models.ChannelEdgePolicy1, error) {
3684+
models.ChannelEdgeInfo, models.ChannelEdgePolicy,
3685+
models.ChannelEdgePolicy, error) {
37353686

37363687
var (
37373688
edgeInfo models.ChannelEdgeInfo
3738-
policy1 *models.ChannelEdgePolicy1
3739-
policy2 *models.ChannelEdgePolicy1
3689+
policy1 models.ChannelEdgePolicy
3690+
policy2 models.ChannelEdgePolicy
37403691
channelID [8]byte
37413692
)
37423693

@@ -3803,34 +3754,13 @@ func (c *ChannelGraph) FetchChannelEdgesByID(chanID uint64) (
38033754

38043755
// Then we'll attempt to fetch the accompanying policies of this
38053756
// edge.
3806-
edge1, edge2, err := fetchChanEdgePolicies(
3757+
e1, e2, err := fetchChanEdgePolicies(
38073758
edgeIndex, edges, channelID[:],
38083759
)
38093760
if err != nil {
38103761
return err
38113762
}
38123763

3813-
var (
3814-
e1, e2 *models.ChannelEdgePolicy1
3815-
ok bool
3816-
)
3817-
if edge1 != nil {
3818-
e1, ok = edge1.(*models.ChannelEdgePolicy1)
3819-
if !ok {
3820-
return fmt.Errorf("expecgted "+
3821-
"*models.ChannelEdgePolicy1, got %T",
3822-
edge1)
3823-
}
3824-
}
3825-
if edge2 != nil {
3826-
e2, ok = edge2.(*models.ChannelEdgePolicy1)
3827-
if !ok {
3828-
return fmt.Errorf("expecgted "+
3829-
"*models.ChannelEdgePolicy1, got %T",
3830-
edge1)
3831-
}
3832-
}
3833-
38343764
policy1 = e1
38353765
policy2 = e2
38363766
return nil

channeldb/graph_cache.go

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ type GraphCacheNode interface {
2929
// to the caller.
3030
ForEachChannel(kvdb.RTx,
3131
func(kvdb.RTx, models.ChannelEdgeInfo,
32-
*models.ChannelEdgePolicy1,
33-
*models.ChannelEdgePolicy1) error) error
32+
models.ChannelEdgePolicy,
33+
models.ChannelEdgePolicy) error) error
3434
}
3535

3636
// DirectedChannel is a type that stores the channel information as seen from
@@ -140,22 +140,10 @@ func (c *GraphCache) AddNode(tx kvdb.RTx, node GraphCacheNode) error {
140140

141141
return node.ForEachChannel(
142142
tx, func(tx kvdb.RTx, info models.ChannelEdgeInfo,
143-
outPolicy *models.ChannelEdgePolicy1,
144-
inPolicy *models.ChannelEdgePolicy1) error {
145-
146-
// TODO(elle): remove once the ForEachChannel call back
147-
// passes down the interface values instead of the
148-
// pointers. This is temporarily required to prevent
149-
// a nil pointer dereference.
150-
var in, out models.ChannelEdgePolicy
151-
if outPolicy != nil {
152-
out = outPolicy
153-
}
154-
if inPolicy != nil {
155-
in = inPolicy
156-
}
157-
158-
c.AddChannel(info, out, in)
143+
outPolicy models.ChannelEdgePolicy,
144+
inPolicy models.ChannelEdgePolicy) error {
145+
146+
c.AddChannel(info, outPolicy, inPolicy)
159147

160148
return nil
161149
},

channeldb/graph_cache_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ func (n *node) Features() *lnwire.FeatureVector {
4242
}
4343

4444
func (n *node) ForEachChannel(tx kvdb.RTx,
45-
cb func(kvdb.RTx, models.ChannelEdgeInfo, *models.ChannelEdgePolicy1,
46-
*models.ChannelEdgePolicy1) error) error {
45+
cb func(kvdb.RTx, models.ChannelEdgeInfo, models.ChannelEdgePolicy,
46+
models.ChannelEdgePolicy) error) error {
4747

4848
for idx := range n.edgeInfos {
4949
err := cb(

0 commit comments

Comments
 (0)