diff --git a/discovery/ban.go b/discovery/ban.go index 7100c2f8b..0425948cb 100644 --- a/discovery/ban.go +++ b/discovery/ban.go @@ -59,7 +59,7 @@ type GraphCloser interface { PutClosedScid(context.Context, lnwire.ShortChannelID) error // IsClosedScid checks if a short channel id is closed. - IsClosedScid(lnwire.ShortChannelID) (bool, error) + IsClosedScid(context.Context, lnwire.ShortChannelID) (bool, error) } // NodeInfoInquirier handles queries relating to specific nodes and channels @@ -97,10 +97,10 @@ func (s *ScidCloserMan) PutClosedScid(ctx context.Context, // IsClosedScid checks whether scid is closed so that the gossiper can ignore // it. -func (s *ScidCloserMan) IsClosedScid(scid lnwire.ShortChannelID) (bool, - error) { +func (s *ScidCloserMan) IsClosedScid(ctx context.Context, + scid lnwire.ShortChannelID) (bool, error) { - return s.graph.IsClosedScid(scid) + return s.graph.IsClosedScid(ctx, scid) } // IsChannelPeer checks whether we have a channel with the peer. diff --git a/discovery/gossiper.go b/discovery/gossiper.go index 11aa4ce90..42fe9ac72 100644 --- a/discovery/gossiper.go +++ b/discovery/gossiper.go @@ -2724,7 +2724,7 @@ func (d *AuthenticatedGossiper) handleChanAnnouncement(ctx context.Context, // Check if the channel is already closed in which case we can ignore // it. - closed, err := d.cfg.ScidCloser.IsClosedScid(scid) + closed, err := d.cfg.ScidCloser.IsClosedScid(ctx, scid) if err != nil { log.Errorf("failed to check if scid %v is closed: %v", scid, err) diff --git a/discovery/gossiper_test.go b/discovery/gossiper_test.go index 74409196b..0ee33ec0e 100644 --- a/discovery/gossiper_test.go +++ b/discovery/gossiper_test.go @@ -4793,7 +4793,7 @@ func TestChanAnnBanningNonChanPeer(t *testing.T) { // Check that the announcement's scid is marked as closed. isClosed, err := tCtx.gossiper.cfg.ScidCloser.IsClosedScid( - ca.ShortChannelID, + ctx, ca.ShortChannelID, ) require.Nil(t, err) require.True(t, isClosed) diff --git a/discovery/mock_test.go b/discovery/mock_test.go index 87464c755..050c57096 100644 --- a/discovery/mock_test.go +++ b/discovery/mock_test.go @@ -187,8 +187,8 @@ func (m *mockScidCloser) PutClosedScid(_ context.Context, return nil } -func (m *mockScidCloser) IsClosedScid(scid lnwire.ShortChannelID) (bool, - error) { +func (m *mockScidCloser) IsClosedScid(_ context.Context, + scid lnwire.ShortChannelID) (bool, error) { m.Lock() defer m.Unlock() diff --git a/graph/db/graph.go b/graph/db/graph.go index de10bacd0..eaf3526eb 100644 --- a/graph/db/graph.go +++ b/graph/db/graph.go @@ -779,8 +779,10 @@ func (c *ChannelGraph) PutClosedScid(ctx context.Context, } // IsClosedScid checks whether a channel identified by the scid is closed. -func (c *ChannelGraph) IsClosedScid(scid lnwire.ShortChannelID) (bool, error) { - return c.db.IsClosedScid(scid) +func (c *ChannelGraph) IsClosedScid(ctx context.Context, + scid lnwire.ShortChannelID) (bool, error) { + + return c.db.IsClosedScid(ctx, scid) } // SetSourceNode sets the source node within the graph database. diff --git a/graph/db/graph_test.go b/graph/db/graph_test.go index 5dd84c410..ebe958bc2 100644 --- a/graph/db/graph_test.go +++ b/graph/db/graph_test.go @@ -5086,7 +5086,7 @@ func TestClosedScid(t *testing.T) { scid := lnwire.ShortChannelID{} // The scid should not exist in the closedScidBucket. - exists, err := graph.IsClosedScid(scid) + exists, err := graph.IsClosedScid(t.Context(), scid) require.Nil(t, err) require.False(t, exists) @@ -5095,7 +5095,7 @@ func TestClosedScid(t *testing.T) { err = graph.PutClosedScid(t.Context(), scid) require.Nil(t, err) - exists, err = graph.IsClosedScid(scid) + exists, err = graph.IsClosedScid(t.Context(), scid) require.Nil(t, err) require.True(t, exists) } diff --git a/graph/db/interfaces.go b/graph/db/interfaces.go index 15b9b5f55..06c74c910 100644 --- a/graph/db/interfaces.go +++ b/graph/db/interfaces.go @@ -353,7 +353,8 @@ type Store interface { //nolint:interfacebloat // IsClosedScid checks whether a channel identified by the passed in // scid is closed. This helps avoid having to perform expensive // validation checks. - IsClosedScid(scid lnwire.ShortChannelID) (bool, error) + IsClosedScid(ctx context.Context, + scid lnwire.ShortChannelID) (bool, error) // UpdateEdgePolicy updates the edge routing policy for a single // directed edge within the database for the referenced channel. The diff --git a/graph/db/kv_store.go b/graph/db/kv_store.go index 96ea2f254..a353257d3 100644 --- a/graph/db/kv_store.go +++ b/graph/db/kv_store.go @@ -4456,7 +4456,9 @@ func (c *KVStore) PutClosedScid(_ context.Context, // IsClosedScid checks whether a channel identified by the passed in scid is // closed. This helps avoid having to perform expensive validation checks. // TODO: Add an LRU cache to cut down on disc reads. -func (c *KVStore) IsClosedScid(scid lnwire.ShortChannelID) (bool, error) { +func (c *KVStore) IsClosedScid(_ context.Context, + scid lnwire.ShortChannelID) (bool, error) { + var isClosed bool err := kvdb.View(c.db, func(tx kvdb.RTx) error { closedScids := tx.ReadBucket(closedScidBucket) diff --git a/graph/db/sql_store.go b/graph/db/sql_store.go index a146a831b..b31089788 100644 --- a/graph/db/sql_store.go +++ b/graph/db/sql_store.go @@ -3287,9 +3287,10 @@ func (s *SQLStore) PutClosedScid(ctx context.Context, // closed. This helps avoid having to perform expensive validation checks. // // NOTE: part of the Store interface. -func (s *SQLStore) IsClosedScid(scid lnwire.ShortChannelID) (bool, error) { +func (s *SQLStore) IsClosedScid(ctx context.Context, + scid lnwire.ShortChannelID) (bool, error) { + var ( - ctx = context.TODO() isClosed bool chanIDB = channelIDToBytes(scid.ToUint64()) )