graph/db: version cacheable iteration methods
Add gossip version parameters to ForEachNodeCacheable and ForEachChannelCacheable in the Store interface and both implementations. Thread the version through SQL helpers and update call sites/tests accordingly.
This commit is contained in:
7 files changed
+83
-54
No files matched your search
+29
-17
@@ -163,19 +163,23 @@ func (c *ChannelGraph) populateCache(ctx context.Context) error {
|
||||
log.Info("Populating in-memory channel graph, this might take a " +
|
||||
"while...")
|
||||
|
||||
err := c.db.ForEachNodeCacheable(ctx, func(node route.Vertex,
|
||||
features *lnwire.FeatureVector) error {
|
||||
// TODO(elle): the cache should be populated with data from across
|
||||
// protocol versions.
|
||||
err := c.db.ForEachNodeCacheable(
|
||||
ctx, lnwire.GossipVersion1, func(node route.Vertex,
|
||||
features *lnwire.FeatureVector) error {
|
||||
|
||||
c.graphCache.AddNodeFeatures(node, features)
|
||||
c.graphCache.AddNodeFeatures(node, features)
|
||||
|
||||
return nil
|
||||
}, func() {})
|
||||
return nil
|
||||
}, func() {},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.db.ForEachChannelCacheable(
|
||||
func(info *models.CachedEdgeInfo,
|
||||
lnwire.GossipVersion1, func(info *models.CachedEdgeInfo,
|
||||
policy1, policy2 *models.CachedEdgePolicy) error {
|
||||
|
||||
c.graphCache.AddChannel(info, policy1, policy2)
|
||||
@@ -606,10 +610,10 @@ func (c *ChannelGraph) ForEachNode(ctx context.Context,
|
||||
|
||||
// ForEachNodeCacheable iterates through all stored vertices/nodes in the graph.
|
||||
func (c *ChannelGraph) ForEachNodeCacheable(ctx context.Context,
|
||||
cb func(route.Vertex, *lnwire.FeatureVector) error,
|
||||
reset func()) error {
|
||||
v lnwire.GossipVersion, cb func(route.Vertex,
|
||||
*lnwire.FeatureVector) error, reset func()) error {
|
||||
|
||||
return c.db.ForEachNodeCacheable(ctx, cb, reset)
|
||||
return c.db.ForEachNodeCacheable(ctx, v, cb, reset)
|
||||
}
|
||||
|
||||
// NodeUpdatesInHorizon returns all known lightning nodes with updates in the
|
||||
@@ -642,14 +646,6 @@ func (c *ChannelGraph) ForEachChannel(ctx context.Context,
|
||||
return c.db.ForEachChannel(ctx, v, cb, reset)
|
||||
}
|
||||
|
||||
// ForEachChannelCacheable iterates through all channel edges for the cache.
|
||||
func (c *ChannelGraph) ForEachChannelCacheable(cb func(*models.CachedEdgeInfo,
|
||||
*models.CachedEdgePolicy, *models.CachedEdgePolicy) error,
|
||||
reset func()) error {
|
||||
|
||||
return c.db.ForEachChannelCacheable(cb, reset)
|
||||
}
|
||||
|
||||
// DisabledChannelIDs returns the channel ids of disabled channels.
|
||||
func (c *ChannelGraph) DisabledChannelIDs() ([]uint64, error) {
|
||||
return c.db.DisabledChannelIDs()
|
||||
@@ -923,6 +919,22 @@ func (c *VersionedGraph) ForEachChannel(ctx context.Context,
|
||||
return c.db.ForEachChannel(ctx, c.v, cb, reset)
|
||||
}
|
||||
|
||||
// ForEachNodeCacheable iterates through all stored vertices/nodes in the graph.
|
||||
func (c *VersionedGraph) ForEachNodeCacheable(ctx context.Context,
|
||||
cb func(route.Vertex, *lnwire.FeatureVector) error,
|
||||
reset func()) error {
|
||||
|
||||
return c.db.ForEachNodeCacheable(ctx, c.v, cb, reset)
|
||||
}
|
||||
|
||||
// ForEachChannelCacheable iterates through all channel edges for the cache.
|
||||
func (c *VersionedGraph) ForEachChannelCacheable(
|
||||
cb func(*models.CachedEdgeInfo, *models.CachedEdgePolicy,
|
||||
*models.CachedEdgePolicy) error, reset func()) error {
|
||||
|
||||
return c.db.ForEachChannelCacheable(c.v, cb, reset)
|
||||
}
|
||||
|
||||
// IsPublicNode determines whether the node is seen as public in the graph.
|
||||
func (c *VersionedGraph) IsPublicNode(pubKey [33]byte) (bool, error) {
|
||||
return c.db.IsPublicNode(c.v, pubKey)
|
||||
|
||||
Reference in new issue
Block a user