From 929956a5ffd26fa9bc145449f8212835b1f7836c Mon Sep 17 00:00:00 2001 From: Ben Schwarz Date: Thu, 6 Aug 2026 22:51:55 +1000 Subject: [PATCH] Refactor load_nodes for better concurrency handling Refactor load_nodes method to improve node loading logic and handle concurrent access. --- lib/graphql/pagination/relation_connection.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/graphql/pagination/relation_connection.rb b/lib/graphql/pagination/relation_connection.rb index 0e6b091474f..b5ef4bb97e1 100644 --- a/lib/graphql/pagination/relation_connection.rb +++ b/lib/graphql/pagination/relation_connection.rb @@ -220,8 +220,19 @@ def limited_nodes # Load nodes after applying first/last/before/after, # returns an array of nodes def load_nodes - # Return an array so we can consistently use `.index(node)` on it - @nodes ||= limited_nodes.to_a + return @nodes if @nodes + + if @loading_nodes + context.dataloader.yield until @nodes + return @nodes + end + + @loading_nodes = true + begin + @nodes = limited_nodes.to_a + ensure + @loading_nodes = false + end end end end