Skip to content

Latest commit

 

History

History
373 lines (211 loc) · 13.3 KB

File metadata and controls

373 lines (211 loc) · 13.3 KB
  • Guard against NULL values in the methodinfo table for tracepoint method entry and return events

  • Ruby 3.1.1 support

  • Build by default with debug symbols enabled

  • Implement conditional hooks loading to facilitate debugging

  • Guard against multiple prepends of tracer hooks

  • Handle the filter case where a transient thread has the same thread group as the trace context thread

  • Expose a Apm::Tracer.synchronize{} API with a single shared mutex instance for the profiler to use for init purposes in shims

  • Fix static batch buffer overrun by 1 byte for SQL query specific events that were exactly 4033 bytes big

  • Support TCP mode for dispatch

  • Handle case where the exception message in rb_rg_log_silenced_error can be undefined

  • Log exceptions raised and swallowed by rb_protect in the timer and dispatch threads

  • Handle edge case in blacklist parsing of .NET style Foo::bar

  • Introduce support for parsing live blacklist entries (L- prefix) as well

  • Ensure that the trace context thread group can always be set (ensures 1:1 mapping of thread -> trace context)

  • Support Ruby 3

  • Fix LICENSE merge conflict

  • Remove the non-gated symbol table free of the builtin method translator and introduce RB_RG_TRACER_BUILTIN_METHODS_TRANSLATED as a constant

  • Open Source the profiler

  • Prevent rare shutdown segfault when freeing the builtin method translation table on GC finalization of the tracer instance

  • Also include LICENSE.bipbuffer and COPYING.rax in gemspec

  • Fix an unitialized memory access path in rb_rg_blacklisted_method_p

  • Guard against an nil URI value and improve test coverage

  • Fix bug in 1.0.76 where third party libraries are invisible it traces

  • Let sync / wait sources like sleep, mutex etc. be filtered out for deep stack library code as well

  • Fix segfault observed in Spree for the batch finalization path of events > MTU size but < 4kb

  • Blacklist Singleton, Dir and fix typo on Tempfile blacklist

  • Do not observe exceptions thrown from libraries when deeper than 1 shadow stack frame into a library

  • Let oversized events less than 4096 bytes encoded finalize the current batch and emit as a new batch, otherwise emit as raw UDP

  • Limiting profiling of third party libraries to being 1 method deep to improve performance

  • Attempt to reference the platform specific default blacklist overrides file locations as a fallback if PROTON_OVERRIDES_FILE is not set

  • Fix regression from: Ensure all of the supported hooks are evaluated at boot time

  • Ensure all of the supported hooks are evaluated at boot time

  • Introduce support for coercing mongodb client events to SQL extended events

  • Add config options PROTON_UDP_HOST and PROTON_UDP_PORT (DANGER!!!: security, private networks only!!!!)

  • Introduce support for Mutex#synchronize, Mutex#lock, Mutex#unlock and Mutex#sleep as synchronization method sources

  • Let Object#sleep be flagged as waiting for syncrhonization method source

  • Oust rb_rg_add_to_thread_group - does not work well on Windows

  • Beginnings of a task to trigger per ruby version and platform test suite runs on build

  • Prefer %p to log the trace context key in diagnostics as well

  • Let rb_rg_add_to_thread_group accept an explicit thread group argument

  • rb_rg_thread_group does not accept a tracer argument

  • Introduce additional logging around thread group retrieval

  • Add a log message right after trace context allocation for debug mode

  • Also include the execution context thread group and noop status in diagnostics output

  • No need to explicitly free the trace context pointer on the tracer as walking the symbol table of contexts to free it covers

  • Introduce additional logging context to debug the Windows trace context leaks and prefer rb_rg_trace_context_free to cleanup the context from the tracer struct on GC

  • Also log when the tracepoint was not stopped because the trace context was nullified

  • Include trace contexts in diagnostics output’

  • Let minimum agent version be 1.0.1190.0

  • Introduce support for inferring complex Agent versions via the GetAgentInfo control command

  • Fix typo in version.rb

  • Depend on Agent version 1.0.1186.0 (first release with thread started v2 support)

  • Implement support for hooking a select few potential high overhead C API (internal) methods without tracing RUBY_EVENT_C_CALL which has severe perf regressions; Implement specific Excon and HTTPClient libraries

  • Introduce support for noop on unsupported minimum agent version and print a warning to incentivate an Agent upgrade

  • Activate thread started v2

  • Fix typo

  • Add a unknown status fallback to the agent up check

  • Compile Darwin FAT binary build rubies with static libruby linking support to mirror semantics of the Linux builds already covered by rake-compiler-dock

  • Refactor the default blacklist entries and improve test coverage

  • Implement support for the more complex and identified edge case required black and whitelist operations during beta testing

  • Ensure we respect the entry frames IDed 1 that starts with Ruby to not be coerced as .NET fallback

  • Add support for a new blacklist syntax to handle Method# style filtering (non-namespaced class) - pending implementation of behaviour

  • Expose the internal radix tree lookups as API for unit testing

  • Further alignment on .NET syntax fallback support

  • Introduce black and whitelist support for native Ruby with fallback to .NET

  • Reduce noise for raygun4ruby (Rails only, pending Sidekiq testing)

  • Reduce noisy frames around the Redis integration

  • Let the profiler -> agent diagnostic check run on Tracer init for it to be an automatic as opposed to be a manual out of band process

  • Introduce support for tracking thread ancestry despite it not being natively supported by the Ruby VM

  • Check interrupts after thread sleep and define RG_SINK_THREAD_TICK_INTERVAL instead of an inline value

  • Prevent thread deadlock / indefinite sleep on shutdown via ruby_cleanup MRI core method by NOT scheduling or sleeping from an aborted or killed thread

  • Let standard library be considered a known library method source too

  • Remove Tracer#process_started callback as no need to emit process frequency on startup as it is emitted alongside each transaction now

  • Remove process_type command emission from prior to begin_transaction and on process boot, but maintain it for the async methodinfo table sync

  • Also set technology and process type fields on the begin transaction command

  • Support CT_EXCEPTION_THROWN_2 and formally remove exception thrown support

  • Introduce a Redis client hook

  • Add test case and wrapper frame presence for Net::HTTP specific HTTP OUT events

  • Improve test coverage of HTTP OUT events (pending specific httpclient and excon hooks)

  • Add a test case for method source and library frame classifications

  • Initial pass at supporting classification of known library specific frames

  • Also add an entrypoint and appropriate black and whitelist entries for HTTPClient

  • Also add an entrypoint and appropriate black and whitelist entries for HTTParty

  • Also add an entrypoint and appropriate black and whitelist entries for Excon

  • Also add an entrypoint and appropriate black and whitelist entries for rest-client

  • Also add an entrypoint and appropriate black and whitelist entries for multipart-post

  • Add library entry point wrapper coverage for Faraday (not at the frame level flags yet)

  • Implement a method specific blacklisted to compliment the existing namespace one

  • Guard against really large Ruby strings overflowing the int16 Raygun string length by assigning length to an intermediate long first and truncating thereafter

  • Let the shadow stack only track the VM stack up to a depth of 256 for deep nested stacks or recursive functions

  • Let the methodtable be included in Tracer#diagnostics as well

  • Introduce a reverse jitter buffer for the UDP output to ease pressure on intermediate OS buffers to reduce probability of drops between profiler and Agent

  • Gate the jitter buffer log output with the tracer debug log level at compile time

  • Introduce a jittered output buffer feature in the dispatcher thread to slow down filling up Kernel buffers for an Agent on the same host

  • Let the SO_SNDBUF socket option set mirror the batch packet size

  • Let batch packet size be reflected in Tracer::BATCH_PACKET_SIZE as well

  • Move the batch size constants up to the top of the protocol header (all constants grouped together)

  • Move sink_data to be the last member of the tracer struct

  • Max methodinfo needle size should be 4kb (class) +

    + 4kb (method) + sentinel

  • Move struct members around a bit for better cache locality of reference

  • Also preserve method source for async method table sync

  • Guard against buffer overflow of the blacklist needle as well for exceptionally large methods

  • Add overflow checks for the encoded strings API as well

  • Add a few more missing GC guards in the tracer core

  • Add additional encoding and bipbuf stats for sink debugging

  • Introduce a Tracer#diagnostics method to aid with Gitlab debugging

  • Dispatch buffer bumped to 5MB (up from 1MB)

  • Add GC guards for strings passed into Event#[]= and within rb_rg_encode_string* variants as well

  • Let the encoder scratch buffer be much larger in order to accommodate potentially massive SQL queries from the SQL OUT events too

  • No need to mark the thread from a trace context as the VM will iterate all living threads explicitly for marking from GC roots

  • Extract a first class rg_thread_t to wrap Ruby threads and let the shadow stack be per thread

  • Let batches belong to sink data - 💥 any static globals to ensure a clean slate that could only come from Tracer alloc

  • Introduce support for configuring the profiler with an API key with the PROTON_API_KEY env var, passed through to the agent via the BEGIN_TRANSACTION command

  • Introduce support for tracer environments and implement an alternative (expensive) str based hashing of method paths for Rails development environment

  • Do not cache PID on HTTP OUT events to account for forked processes

  • Also reset the batch counter, sequence and pid in the UDP sink on fork

  • Let tracer instances be indexed by PID to play well with forking servers

  • Guard against shadow stack underflow errors which can happen when an exception raises

  • Combine blacklist and methodinfo tables (one less symbol table lookup on method entry)

  • Let the shadow stack be used for method return function ID lookups (saves a symbol table call)

  • Let errors never be pinned to the entrypoint frame (function ID 1)

  • Let the Tracer be able to track a singleton instance per request and plug that into the Net::HTTP hooks

  • Implement a better fallback for libraries like HTTParty which does not set request.uri

  • Blacklist RbConfig, Bundler, WeakRef, Singleton and OpenStruct

  • Let the encoder size assertions only be enabled in debug builds

  • Prefer a single global methodinfo table and synchronize writes to it