ddtrace 0.18.0 → 0.18.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c4e552c5952c4dfa4cd7889db389bf87c06e400
4
- data.tar.gz: 635dc26f996a8cf9c424dacf85a3e48ae6ca7517
3
+ metadata.gz: 40d91156b9aa968ec8412ffaea02b727deb47660
4
+ data.tar.gz: f45dd35b50a8f8b9db17a0421d88ae5b50e4fbd5
5
5
  SHA512:
6
- metadata.gz: 16d01f87e058e4d0d77936c39d9115075dfdcff3cfdc1a2ba74c668c5b27e6d8376d2b5327b18ae0f2d2fe6587254d5328d409b8e7ea0b82430b63d3e7a36cb7
7
- data.tar.gz: e5897d2d6756d99465d8bcbbd2169997d6e5f30f791eece446c8b56c112f3f22ef3c5f5d7b38621fde1bd1cdc2d65c3746f147dfba78f8497cdaf803423e616f
6
+ metadata.gz: f122ec820458d5fd1f0fe4502846a9ce84f725a24d749118e63d67f16aae5a0408c2101eab79c5f30e97850e7530a15fd4af384c4ebcdd170704a501fd24ac09
7
+ data.tar.gz: a5e0d439791bca6b6c48caeb54db0bc113875e97dc3a2c7c4c9ee3e05041578b204cc0fae21b4e8ea7cc71ca117d9b877417d9f4d732d8fa265b23f26437e9a8
data/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
  ## [Unreleased (beta)]
6
6
 
7
+ ## [0.18.1] - 2018-12-20
8
+
9
+ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.18.1
10
+
11
+ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.18.0...v0.18.1
12
+
13
+ ### Fixed
14
+
15
+ - ActiveRecord `SystemStackError` with some 3rd party libraries. (@EpiFouloux, @tjgrathwell, @guizmaii)
16
+
7
17
  ## [0.18.0] - 2018-12-18
8
18
 
9
19
  Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.18.0
@@ -594,8 +604,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
594
604
 
595
605
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
596
606
 
597
- [Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.18.0...master
598
- [Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.18.0...0.19-dev
607
+ [Unreleased (stable)]: https://github.com/DataDog/dd-trace-rb/compare/v0.18.1...master
608
+ [Unreleased (beta)]: https://github.com/DataDog/dd-trace-rb/compare/v0.18.1...0.19-dev
609
+ [0.18.1]: https://github.com/DataDog/dd-trace-rb/compare/v0.18.0...v0.18.1
599
610
  [0.18.0]: https://github.com/DataDog/dd-trace-rb/compare/v0.17.3...v0.18.0
600
611
  [0.17.3]: https://github.com/DataDog/dd-trace-rb/compare/v0.17.2...v0.17.3
601
612
  [0.17.2]: https://github.com/DataDog/dd-trace-rb/compare/v0.17.1...v0.17.2
@@ -24,7 +24,7 @@ module Datadog
24
24
  end
25
25
 
26
26
  def process(span, event, _id, payload)
27
- config = Utils.connection_config(payload[:connection])
27
+ config = Utils.connection_config(payload[:connection], payload[:connection_id])
28
28
  settings = Datadog.configuration[:active_record, config]
29
29
  adapter_name = Datadog::Utils::Database.normalize_vendor(config[:adapter])
30
30
  service_name = if settings.service_name != Datadog::Utils::Database::VENDOR_DEFAULT
@@ -1,5 +1,4 @@
1
1
  require 'ddtrace/contrib/patcher'
2
- require 'ddtrace/contrib/active_record/patches/abstract_adapter'
3
2
  require 'ddtrace/contrib/active_record/events'
4
3
 
5
4
  module Datadog
@@ -18,7 +17,6 @@ module Datadog
18
17
  def patch
19
18
  do_once(:active_record) do
20
19
  begin
21
- ::ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, Patches::AbstractAdapter)
22
20
  Events.subscribe!
23
21
  rescue StandardError => e
24
22
  Datadog::Tracer.log.error("Unable to apply Active Record integration: #{e}")
@@ -21,14 +21,37 @@ module Datadog
21
21
  connection_config[:port]
22
22
  end
23
23
 
24
- def self.connection_config(connection = nil)
25
- connection.nil? ? default_connection_config : connection_config_from_connection(connection)
26
- end
24
+ # In newer Rails versions, the `payload` contains both the `connection` and its `object_id` named `connection_id`.
25
+ #
26
+ # So, if rails is recent we'll have a direct access to the connection.
27
+ # Else, we'll find it thanks to the passed `connection_id`.
28
+ #
29
+ # See this PR for more details: https://github.com/rails/rails/pull/34602
30
+ #
31
+ def self.connection_config(connection = nil, connection_id = nil)
32
+ return default_connection_config if connection.nil? && connection_id.nil?
33
+
34
+ conn = if !connection.nil?
35
+ connection
36
+ # Rails 3.0 - 3.2
37
+ elsif Gem.loaded_specs['activerecord'].version < Gem::Version.new('4.0')
38
+ ::ActiveRecord::Base
39
+ .connection_handler
40
+ .connection_pools
41
+ .values
42
+ .flat_map(&:connections)
43
+ .find { |c| c.object_id == connection_id }
44
+ # Rails 4.2+
45
+ else
46
+ ::ActiveRecord::Base
47
+ .connection_handler
48
+ .connection_pool_list
49
+ .flat_map(&:connections)
50
+ .find { |c| c.object_id == connection_id }
51
+ end
27
52
 
28
- # Typical of ActiveSupport::Notifications `sql.active_record`
29
- def self.connection_config_from_connection(connection)
30
- if connection.instance_variable_defined?(:@config)
31
- connection.instance_variable_get(:@config)
53
+ if conn.instance_variable_defined?(:@config)
54
+ conn.instance_variable_get(:@config)
32
55
  else
33
56
  EMPTY_CONFIG
34
57
  end
@@ -2,7 +2,7 @@ module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 18
5
- PATCH = 0
5
+ PATCH = 1
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddtrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-18 00:00:00.000000000 Z
11
+ date: 2018-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -312,7 +312,6 @@ files:
312
312
  - lib/ddtrace/contrib/active_record/ext.rb
313
313
  - lib/ddtrace/contrib/active_record/integration.rb
314
314
  - lib/ddtrace/contrib/active_record/patcher.rb
315
- - lib/ddtrace/contrib/active_record/patches/abstract_adapter.rb
316
315
  - lib/ddtrace/contrib/active_record/utils.rb
317
316
  - lib/ddtrace/contrib/active_support/notifications/event.rb
318
317
  - lib/ddtrace/contrib/active_support/notifications/subscriber.rb
@@ -1,72 +0,0 @@
1
- require 'set'
2
- require 'ddtrace/augmentation/shim'
3
-
4
- module Datadog
5
- module Contrib
6
- module ActiveRecord
7
- # Defines basic behaviors for an ActiveRecord event.
8
- module Patches
9
- # Adds patch to AbstractAdapter to make it pass more information through
10
- # ActiveSupport notifications, for better instrumentation.
11
- module AbstractAdapter
12
- def self.included(base)
13
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
14
- base.class_eval do
15
- alias_method :log_without_datadog, :log
16
- remove_method :log
17
- include InstanceMethods
18
- end
19
- else
20
- base.send(:prepend, InstanceMethods)
21
- end
22
- end
23
-
24
- # Compatibility shim for Rubies not supporting `.prepend`
25
- module InstanceMethodsCompatibility
26
- def log(*args, &block)
27
- log_without_datadog(*args, &block)
28
- end
29
- end
30
-
31
- # InstanceMethods - implementing instrumentation
32
- module InstanceMethods
33
- include InstanceMethodsCompatibility unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0.0')
34
-
35
- EVENT_ACTIVERECORD_SQL = 'sql.active_record'.freeze
36
-
37
- # Override #log since sometimes connections are initialized prior
38
- # to when the patch is applied; this will allow existing connections
39
- # to receive the Shim as well.
40
- def log(*args, &block)
41
- insert_shim! unless shim_inserted?
42
- super
43
- end
44
-
45
- private
46
-
47
- def shim_inserted?
48
- instance_variable_defined?(:@instrumenter) \
49
- && Datadog::Shim.shim?(@instrumenter)
50
- end
51
-
52
- def insert_shim!
53
- @instrumenter = Datadog::Shim.new(@instrumenter) do |shim|
54
- connection = self
55
-
56
- shim.override_method!(:instrument) do |*args, &block|
57
- # Inject connection into arguments
58
- if args[0] == EVENT_ACTIVERECORD_SQL && args[1].is_a?(Hash)
59
- args[1][:connection] ||= connection
60
- end
61
-
62
- # Call original
63
- shim_target.instrument(*args, &block)
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end