Reuse fetched PPR neighbor cache entries#703
Merged
Merged
Conversation
kmontemayor2-sc
approved these changes
Jul 13, 2026
yliu2-sc
approved these changes
Jul 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves fetched PPR neighbor rows into the persistent per-state neighbor cache immediately.
Previously, pushResiduals() kept newly fetched neighbor lists in a temporary fetched map for the current push, while older neighbor lists lived in _neighborCache. That meant the push loop had to check both places, and a node that re-entered the frontier later could still trigger another lookup if its neighbor row had not been promoted into _neighborCache.
Now, every fetched (node_id, edge_type_id) row is written to _neighborCache before residuals are pushed. After that, both drainQueue() and the residual-push loop use _neighborCache as the single source of truth for known adjacency.
Example: Example: suppose node
uis fetched and pushed in iteration 1. Later, residual flows back touthrough another path andure-enters the frontier. Before this change,u’s adjacency may not have been retained unless it matched the old promotion path. With this change,drainQueue()seesu’s neighbor list in_neighborCacheand avoids re-fetching it.The PPR math is unchanged; this only avoids redundant neighbor fetches and simplifies the push path by removing the split between “newly fetched” and “previously cached” neighbor rows.