From 1df92271292ebbe55054c0d56bda31f8332962ef Mon Sep 17 00:00:00 2001 From: hramadan Date: Tue, 29 Aug 2023 16:48:35 -0700 Subject: [PATCH] Describe Rails subscriber implementation The agent uses a non-traditional way to subscribe to Rails events. Instead of passing a block to ActiveSupport::Notifications.subscribe, the agent defines a #start and #finish method, which Rails responds to. This is due to a threading issue discovered on initial instrumentation. Issue: https://github.com/rails/rails/issues/12069 Rails code: https://github.com/rails/rails/blob/ed5af004598fa7645fec2210453cca00f4b59168/activesupport/lib/active_support/notifications/fanout.rb#L320 --- .../agent/instrumentation/notifications_subscriber.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/new_relic/agent/instrumentation/notifications_subscriber.rb b/lib/new_relic/agent/instrumentation/notifications_subscriber.rb index 1bff8b2732..09972206e5 100644 --- a/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +++ b/lib/new_relic/agent/instrumentation/notifications_subscriber.rb @@ -47,6 +47,9 @@ def self.subscribe(pattern) end end + # The agent doesn't use the traditional ActiveSupport::Notifications.subscribe + # pattern due to threading issues discovered on initial instrumentation. + # Instead we define a #start and #finish method, which Rails responds to. def start(name, id, payload) return unless state.is_execution_traced?