graph/db+sqldb: impl IsPublicNode
Which lets us run `TestNodeIsPublic` against our SQL DB backends. Note that we need to tweak the tests a little bit so that `AddLightningNode` for the same node is always called with a newer LastUpdate time else it will fail the SQL constraint that only allows the upsert if the update is newer than the persisted one.
This commit is contained in:
5 files changed
+90
-9
No files matched your search
@@ -62,6 +62,7 @@ type SQLQueries interface {
|
||||
GetNodesByLastUpdateRange(ctx context.Context, arg sqlc.GetNodesByLastUpdateRangeParams) ([]sqlc.Node, error)
|
||||
ListNodesPaginated(ctx context.Context, arg sqlc.ListNodesPaginatedParams) ([]sqlc.Node, error)
|
||||
ListNodeIDsAndPubKeys(ctx context.Context, arg sqlc.ListNodeIDsAndPubKeysParams) ([]sqlc.ListNodeIDsAndPubKeysRow, error)
|
||||
IsPublicV1Node(ctx context.Context, pubKey []byte) (bool, error)
|
||||
DeleteNodeByPubKey(ctx context.Context, arg sqlc.DeleteNodeByPubKeyParams) (sql.Result, error)
|
||||
|
||||
GetExtraNodeTypes(ctx context.Context, nodeID int64) ([]sqlc.NodeExtraType, error)
|
||||
@@ -1990,6 +1991,29 @@ func (s *SQLStore) ChannelID(chanPoint *wire.OutPoint) (uint64, error) {
|
||||
return channelID, nil
|
||||
}
|
||||
|
||||
// IsPublicNode is a helper method that determines whether the node with the
|
||||
// given public key is seen as a public node in the graph from the graph's
|
||||
// source node's point of view.
|
||||
//
|
||||
// NOTE: part of the V1Store interface.
|
||||
func (s *SQLStore) IsPublicNode(pubKey [33]byte) (bool, error) {
|
||||
ctx := context.TODO()
|
||||
|
||||
var isPublic bool
|
||||
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
||||
var err error
|
||||
isPublic, err = db.IsPublicV1Node(ctx, pubKey[:])
|
||||
|
||||
return err
|
||||
}, sqldb.NoOpReset)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("unable to check if node is "+
|
||||
"public: %w", err)
|
||||
}
|
||||
|
||||
return isPublic, nil
|
||||
}
|
||||
|
||||
// FetchChanInfos returns the set of channel edges that correspond to the passed
|
||||
// channel ID's. If an edge is the query is unknown to the database, it will
|
||||
// skipped and the result will contain only those edges that exist at the time
|
||||
|
||||
Reference in new issue
Block a user