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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85210767fa6162b49189f17ff57be701393a99cc19b78750b6a47004a66d7310
4
- data.tar.gz: 4ae9769770245ed92151e4779698ef280c1f22b4d39167c41a5d1ecd337da771
3
+ metadata.gz: a3658d78b5c940cc301a82b1bb4231a1c9800c40c0a5aafb57dd3ed7e7adcdfc
4
+ data.tar.gz: 3873d3fae8741ff25d0c0d10d1ecf25b239832506c82532a21ca37dd08d796fa
5
5
  SHA512:
6
- metadata.gz: 1352340c9daf585df4eac26079530aa1b53f2fca54286505d2884620e0c245178ec2d28435764cf90ec9fb9f2beb4865c7e3a2a457e1db6b74949c600a951bcf
7
- data.tar.gz: 2f4145975d6c8e61db4a48a92f0bc676a953c59b180ec2fc9f0b4c7a572ae4b4ac214cc6edbc95e2bfa953a0e2bf29bb73da770efcafabe696b4df2fbbb0f4fc
6
+ metadata.gz: c64039dc32f92ffada444e5e46bcabfb187d23127c94a619c19fb656c608120c6ddd5613a97fee44f4a661b5e14a5547c10c2829e398e31118e08de4d4e7194e
7
+ data.tar.gz: bbe4ced9ecb8acb236e88cc2297f9a568602517d7a444141c60ff92bbfe8e5e07965979658d7b3501dd13b0df2b92836ebb30f46f7dc9a91504633902434088d
@@ -168,7 +168,7 @@ module GraphQL
168
168
  nil
169
169
  end
170
170
 
171
- attr_reader :pending
171
+ attr_reader :pending, :results
172
172
 
173
173
  private
174
174
 
@@ -118,12 +118,7 @@ module GraphQL
118
118
  #
119
119
  # @return [void]
120
120
  def yield
121
- if use_fiber_resume?
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
- source_instance.pending.merge!(pending)
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
- while first_pass || job_fibers.any?
183
- first_pass = false
184
-
185
- while (f = job_fibers.shift || spawn_job_fiber)
186
- if f.alive?
187
- run_fiber(f)
188
- next_job_fibers << f
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
- end
191
- join_queues(job_fibers, next_job_fibers)
192
+ join_queues(job_fibers, next_job_fibers)
192
193
 
193
- while source_fibers.any? || @source_cache.each_value.any? { |group_sources| group_sources.each_value.any?(&:pending?) }
194
- while (f = source_fibers.shift || spawn_source_fiber)
195
- if f.alive?
196
- run_fiber(f)
197
- next_source_fibers << f
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
- if use_fiber_resume?
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
- if parent_fiber
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: "ruby-graphql", **rest)
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
- analytics_available = defined?(Datadog::Contrib::Analytics) \
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
- span.span_type = 'custom'
39
- if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
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
- # For top span of query, set the analytics sample rate tag, if available.
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.span_type = 'custom'
94
- if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
95
- span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
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.span_type = 'custom'
130
- if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
131
- span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
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.span_type = 'custom'
163
- if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
164
- span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
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: service_name) do |span|
19
- span.span_type = 'custom'
20
- if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
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
- # For top span of query, set the analytics sample rate tag, if available.
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
- analytics_available? && Datadog::Contrib::Analytics.enabled?(options.fetch(:analytics_enabled, false))
65
+ options.fetch(:analytics_enabled, false)
80
66
  end
81
67
 
82
68
  def analytics_sample_rate
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.1.9"
3
+ VERSION = "2.1.11"
4
4
  end
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.9
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: 2023-12-21 00:00:00.000000000 Z
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.4.10
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