class PhusionPassenger::Rack::OutOfBandGc

Public Class Methods

new(app, *args) click to toggle source

Usage:

OutOfBandGc.new(app, frequency, logger = nil)
OutOfBandGc.new(app, options = {})
# File lib/phusion_passenger/rack/out_of_band_gc.rb, line 34
def initialize(app, *args)
  @app = app
  if args.size == 0 || (args.size == 1 && args[0].is_a?(Hash))
    # OutOfBandGc.new(app, options = {})
    initialize_with_options(args[0] || {})
  else
    # OutOfBandGc.new(app, frequency, logger = nil)
    initialize_legacy(*args)
  end
end

Public Instance Methods

call(env) click to toggle source
# File lib/phusion_passenger/rack/out_of_band_gc.rb, line 45
def call(env)
  status, headers, body = @app.call(env)

  case @strategy
  when :counting
    @mutex.synchronize do
      @request_count += 1
      if @request_count == @frequency
        @request_count = 0
        headers['X-Passenger-Request-OOB-Work'] = 'true'
      end
    end

  when :gctools_oobgc
    if GC::OOB.dry_run
      headers['X-Passenger-Request-OOB-Work'] = 'true'
    end

  else
    raise "Unrecognized Out-Of-Band GC strategy #{@strategy.inspect}"
  end

  [status, headers, body]
end