class Datadog::Utils::OnlyOnce
Helper class to execute something only once such as not repeating warning logs, and instrumenting classes only once.
Thread-safe when used correctly (e.g. be careful of races when lazily initializing instances of this class).
Note: In its current state, this class is not Ractor-safe. In github.com/DataDog/dd-trace-rb/pull/1398#issuecomment-797378810 we have a discussion of alternatives, including an alternative implementation that is Ractor-safe once spent.
Public Class Methods
new()
click to toggle source
# File lib/ddtrace/utils/only_once.rb, line 15 def initialize @mutex = Mutex.new @ran_once = false end
Public Instance Methods
ran?()
click to toggle source
# File lib/ddtrace/utils/only_once.rb, line 30 def ran? @mutex.synchronize { @ran_once } end
run() { || ... }
click to toggle source
# File lib/ddtrace/utils/only_once.rb, line 20 def run @mutex.synchronize do return if @ran_once @ran_once = true yield end end
Private Instance Methods
reset_ran_once_state_for_tests()
click to toggle source
# File lib/ddtrace/utils/only_once.rb, line 36 def reset_ran_once_state_for_tests @mutex.synchronize { @ran_once = false } end