graphql 2.1.9 → 2.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/graphql/dataloader/source.rb +1 -1
- data/lib/graphql/dataloader.rb +34 -44
- data/lib/graphql/tracing/data_dog_trace.rb +21 -34
- data/lib/graphql/tracing/data_dog_tracing.rb +7 -21
- data/lib/graphql/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3658d78b5c940cc301a82b1bb4231a1c9800c40c0a5aafb57dd3ed7e7adcdfc
|
4
|
+
data.tar.gz: 3873d3fae8741ff25d0c0d10d1ecf25b239832506c82532a21ca37dd08d796fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c64039dc32f92ffada444e5e46bcabfb187d23127c94a619c19fb656c608120c6ddd5613a97fee44f4a661b5e14a5547c10c2829e398e31118e08de4d4e7194e
|
7
|
+
data.tar.gz: bbe4ced9ecb8acb236e88cc2297f9a568602517d7a444141c60ff92bbfe8e5e07965979658d7b3501dd13b0df2b92836ebb30f46f7dc9a91504633902434088d
|
data/lib/graphql/dataloader.rb
CHANGED
@@ -118,12 +118,7 @@ module GraphQL
|
|
118
118
|
#
|
119
119
|
# @return [void]
|
120
120
|
def yield
|
121
|
-
|
122
|
-
Fiber.yield
|
123
|
-
else
|
124
|
-
parent_fiber = Thread.current[:parent_fiber]
|
125
|
-
parent_fiber.transfer
|
126
|
-
end
|
121
|
+
Fiber.yield
|
127
122
|
nil
|
128
123
|
end
|
129
124
|
|
@@ -168,7 +163,11 @@ module GraphQL
|
|
168
163
|
ensure
|
169
164
|
@pending_jobs = prev_queue
|
170
165
|
prev_pending_keys.each do |source_instance, pending|
|
171
|
-
|
166
|
+
pending.each do |key, value|
|
167
|
+
if !source_instance.results.key?(key)
|
168
|
+
source_instance.pending[key] = value
|
169
|
+
end
|
170
|
+
end
|
172
171
|
end
|
173
172
|
end
|
174
173
|
|
@@ -178,62 +177,62 @@ module GraphQL
|
|
178
177
|
source_fibers = []
|
179
178
|
next_source_fibers = []
|
180
179
|
first_pass = true
|
180
|
+
manager = spawn_fiber do
|
181
|
+
while first_pass || job_fibers.any?
|
182
|
+
first_pass = false
|
181
183
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
184
|
+
while (f = (job_fibers.shift || spawn_job_fiber))
|
185
|
+
if f.alive?
|
186
|
+
finished = run_fiber(f)
|
187
|
+
if !finished
|
188
|
+
next_job_fibers << f
|
189
|
+
end
|
190
|
+
end
|
189
191
|
end
|
190
|
-
|
191
|
-
join_queues(job_fibers, next_job_fibers)
|
192
|
+
join_queues(job_fibers, next_job_fibers)
|
192
193
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
194
|
+
while source_fibers.any? || @source_cache.each_value.any? { |group_sources| group_sources.each_value.any?(&:pending?) }
|
195
|
+
while (f = source_fibers.shift || spawn_source_fiber)
|
196
|
+
if f.alive?
|
197
|
+
finished = run_fiber(f)
|
198
|
+
if !finished
|
199
|
+
next_source_fibers << f
|
200
|
+
end
|
201
|
+
end
|
198
202
|
end
|
203
|
+
join_queues(source_fibers, next_source_fibers)
|
199
204
|
end
|
200
|
-
join_queues(source_fibers, next_source_fibers)
|
201
205
|
end
|
202
206
|
end
|
203
207
|
|
208
|
+
run_fiber(manager)
|
209
|
+
|
210
|
+
if manager.alive?
|
211
|
+
raise "Invariant: Manager fiber didn't terminate properly."
|
212
|
+
end
|
213
|
+
|
204
214
|
if job_fibers.any?
|
205
215
|
raise "Invariant: job fibers should have exited but #{job_fibers.size} remained"
|
206
216
|
end
|
207
217
|
if source_fibers.any?
|
208
218
|
raise "Invariant: source fibers should have exited but #{source_fibers.size} remained"
|
209
219
|
end
|
210
|
-
|
211
220
|
rescue UncaughtThrowError => e
|
212
221
|
throw e.tag, e.value
|
213
222
|
end
|
214
223
|
|
215
224
|
def run_fiber(f)
|
216
|
-
|
217
|
-
f.resume
|
218
|
-
else
|
219
|
-
f.transfer
|
220
|
-
end
|
225
|
+
f.resume
|
221
226
|
end
|
222
227
|
|
223
228
|
def spawn_fiber
|
224
229
|
fiber_vars = get_fiber_variables
|
225
|
-
parent_fiber = use_fiber_resume? ? nil : Fiber.current
|
226
230
|
Fiber.new(blocking: !@nonblocking) {
|
227
231
|
set_fiber_variables(fiber_vars)
|
228
|
-
Thread.current[:parent_fiber] = parent_fiber
|
229
232
|
yield
|
230
233
|
# With `.transfer`, you have to explicitly pass back to the parent --
|
231
234
|
# if the fiber is allowed to terminate normally, control is passed to the main fiber instead.
|
232
|
-
|
233
|
-
parent_fiber.transfer(true)
|
234
|
-
else
|
235
|
-
true
|
236
|
-
end
|
235
|
+
true
|
237
236
|
}
|
238
237
|
end
|
239
238
|
|
@@ -245,15 +244,6 @@ module GraphQL
|
|
245
244
|
new_queue.clear
|
246
245
|
end
|
247
246
|
|
248
|
-
def use_fiber_resume?
|
249
|
-
Fiber.respond_to?(:scheduler) &&
|
250
|
-
(
|
251
|
-
(defined?(::DummyScheduler) && Fiber.scheduler.is_a?(::DummyScheduler)) ||
|
252
|
-
(defined?(::Evt) && ::Evt::Scheduler.singleton_class::BACKENDS.any? { |be| Fiber.scheduler.is_a?(be) }) ||
|
253
|
-
(defined?(::Libev) && Fiber.scheduler.is_a?(::Libev::Scheduler))
|
254
|
-
)
|
255
|
-
end
|
256
|
-
|
257
247
|
def spawn_job_fiber
|
258
248
|
if @pending_jobs.any?
|
259
249
|
spawn_fiber do
|
@@ -3,20 +3,18 @@
|
|
3
3
|
module GraphQL
|
4
4
|
module Tracing
|
5
5
|
module DataDogTrace
|
6
|
+
# @param tracer [#trace] Deprecated
|
6
7
|
# @param analytics_enabled [Boolean] Deprecated
|
7
8
|
# @param analytics_sample_rate [Float] Deprecated
|
8
|
-
def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service:
|
9
|
+
def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service: nil, **rest)
|
9
10
|
if tracer.nil?
|
10
11
|
tracer = defined?(Datadog::Tracing) ? Datadog::Tracing : Datadog.tracer
|
11
12
|
end
|
12
13
|
@tracer = tracer
|
13
14
|
|
14
|
-
|
15
|
-
&& Datadog::Contrib::Analytics.respond_to?(:enabled?) \
|
16
|
-
&& Datadog::Contrib::Analytics.respond_to?(:set_sample_rate)
|
17
|
-
|
18
|
-
@analytics_enabled = analytics_available && Datadog::Contrib::Analytics.enabled?(analytics_enabled)
|
15
|
+
@analytics_enabled = analytics_enabled
|
19
16
|
@analytics_sample_rate = analytics_sample_rate
|
17
|
+
|
20
18
|
@service_name = service
|
21
19
|
@has_prepare_span = respond_to?(:prepare_span)
|
22
20
|
super
|
@@ -34,12 +32,9 @@ module GraphQL
|
|
34
32
|
}.each do |trace_method, trace_key|
|
35
33
|
module_eval <<-RUBY, __FILE__, __LINE__
|
36
34
|
def #{trace_method}(**data)
|
37
|
-
@tracer.trace("#{trace_key}", service: @service_name) do |span|
|
38
|
-
|
39
|
-
|
40
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
|
41
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, '#{trace_method}')
|
42
|
-
end
|
35
|
+
@tracer.trace("#{trace_key}", service: @service_name, type: 'custom') do |span|
|
36
|
+
span.set_tag('component', 'graphql')
|
37
|
+
span.set_tag('operation', '#{trace_method}')
|
43
38
|
|
44
39
|
#{
|
45
40
|
if trace_method == 'execute_multiplex'
|
@@ -54,10 +49,8 @@ module GraphQL
|
|
54
49
|
end
|
55
50
|
span.resource = resource if resource
|
56
51
|
|
57
|
-
#
|
58
|
-
if @analytics_enabled
|
59
|
-
Datadog::Contrib::Analytics.set_sample_rate(span, @analytics_sample_rate)
|
60
|
-
end
|
52
|
+
# [Deprecated] will be removed in the future
|
53
|
+
span.set_metric('_dd1.sr.eausr', @analytics_sample_rate) if @analytics_enabled
|
61
54
|
RUBY
|
62
55
|
elsif trace_method == 'execute_query'
|
63
56
|
<<-RUBY
|
@@ -89,12 +82,10 @@ module GraphQL
|
|
89
82
|
nil
|
90
83
|
end
|
91
84
|
if platform_key && trace_field
|
92
|
-
@tracer.trace(platform_key, service: @service_name) do |span|
|
93
|
-
span.
|
94
|
-
|
95
|
-
|
96
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
|
97
|
-
end
|
85
|
+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
|
86
|
+
span.set_tag('component', 'graphql')
|
87
|
+
span.set_tag('operation', span_key)
|
88
|
+
|
98
89
|
if @has_prepare_span
|
99
90
|
prepare_span_data = { query: query, field: field, ast_node: ast_node, arguments: arguments, object: object }
|
100
91
|
prepare_span(span_key, prepare_span_data, span)
|
@@ -125,12 +116,10 @@ module GraphQL
|
|
125
116
|
|
126
117
|
def authorized_span(span_key, object, type, query)
|
127
118
|
platform_key = @platform_key_cache[DataDogTrace].platform_authorized_key_cache[type]
|
128
|
-
@tracer.trace(platform_key, service: @service_name) do |span|
|
129
|
-
span.
|
130
|
-
|
131
|
-
|
132
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
|
133
|
-
end
|
119
|
+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
|
120
|
+
span.set_tag('component', 'graphql')
|
121
|
+
span.set_tag('operation', span_key)
|
122
|
+
|
134
123
|
if @has_prepare_span
|
135
124
|
prepare_span(span_key, {object: object, type: type, query: query}, span)
|
136
125
|
end
|
@@ -158,12 +147,10 @@ module GraphQL
|
|
158
147
|
|
159
148
|
def resolve_type_span(span_key, object, type, query)
|
160
149
|
platform_key = @platform_key_cache[DataDogTrace].platform_resolve_type_key_cache[type]
|
161
|
-
@tracer.trace(platform_key, service: @service_name) do |span|
|
162
|
-
span.
|
163
|
-
|
164
|
-
|
165
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
|
166
|
-
end
|
150
|
+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
|
151
|
+
span.set_tag('component', 'graphql')
|
152
|
+
span.set_tag('operation', span_key)
|
153
|
+
|
167
154
|
if @has_prepare_span
|
168
155
|
prepare_span(span_key, {object: object, type: type, query: query}, span)
|
169
156
|
end
|
@@ -15,12 +15,9 @@ module GraphQL
|
|
15
15
|
}
|
16
16
|
|
17
17
|
def platform_trace(platform_key, key, data)
|
18
|
-
tracer.trace(platform_key, service:
|
19
|
-
span.
|
20
|
-
|
21
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
|
22
|
-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, key)
|
23
|
-
end
|
18
|
+
tracer.trace(platform_key, service: options[:service], type: 'custom') do |span|
|
19
|
+
span.set_tag('component', 'graphql')
|
20
|
+
span.set_tag('operation', key)
|
24
21
|
|
25
22
|
if key == 'execute_multiplex'
|
26
23
|
operations = data[:multiplex].queries.map(&:selected_operation_name).join(', ')
|
@@ -33,10 +30,8 @@ module GraphQL
|
|
33
30
|
end
|
34
31
|
span.resource = resource if resource
|
35
32
|
|
36
|
-
#
|
37
|
-
if analytics_enabled?
|
38
|
-
Datadog::Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
39
|
-
end
|
33
|
+
# [Deprecated] will be removed in the future
|
34
|
+
span.set_metric('_dd1.sr.eausr', analytics_sample_rate) if analytics_enabled?
|
40
35
|
end
|
41
36
|
|
42
37
|
if key == 'execute_query'
|
@@ -51,10 +46,6 @@ module GraphQL
|
|
51
46
|
end
|
52
47
|
end
|
53
48
|
|
54
|
-
def service_name
|
55
|
-
options.fetch(:service, 'ruby-graphql')
|
56
|
-
end
|
57
|
-
|
58
49
|
# Implement this method in a subclass to apply custom tags to datadog spans
|
59
50
|
# @param key [String] The event being traced
|
60
51
|
# @param data [Hash] The runtime data for this event (@see GraphQL::Tracing for keys for each event)
|
@@ -65,18 +56,13 @@ module GraphQL
|
|
65
56
|
def tracer
|
66
57
|
default_tracer = defined?(Datadog::Tracing) ? Datadog::Tracing : Datadog.tracer
|
67
58
|
|
59
|
+
# [Deprecated] options[:tracer] will be removed in the future
|
68
60
|
options.fetch(:tracer, default_tracer)
|
69
61
|
end
|
70
62
|
|
71
|
-
def analytics_available?
|
72
|
-
defined?(Datadog::Contrib::Analytics) \
|
73
|
-
&& Datadog::Contrib::Analytics.respond_to?(:enabled?) \
|
74
|
-
&& Datadog::Contrib::Analytics.respond_to?(:set_sample_rate)
|
75
|
-
end
|
76
|
-
|
77
63
|
def analytics_enabled?
|
78
64
|
# [Deprecated] options[:analytics_enabled] will be removed in the future
|
79
|
-
|
65
|
+
options.fetch(:analytics_enabled, false)
|
80
66
|
end
|
81
67
|
|
82
68
|
def analytics_sample_rate
|
data/lib/graphql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: racc
|
@@ -629,7 +629,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
629
629
|
- !ruby/object:Gem::Version
|
630
630
|
version: '0'
|
631
631
|
requirements: []
|
632
|
-
rubygems_version: 3.
|
632
|
+
rubygems_version: 3.5.5
|
633
633
|
signing_key:
|
634
634
|
specification_version: 4
|
635
635
|
summary: A GraphQL language and runtime for Ruby
|