lib/pitchfork/refork_condition.rb in pitchfork-0.2.0 vs lib/pitchfork/refork_condition.rb in pitchfork-0.3.0
- old
+ new
@@ -3,19 +3,37 @@
module Pitchfork
module ReforkCondition
class RequestsCount
def initialize(request_counts)
@limits = request_counts
+ @backoff_until = nil
end
def met?(worker, logger)
if limit = @limits.fetch(worker.generation) { @limits.last }
if worker.requests_count >= limit
+ return false if backoff?
+
logger.info("worker=#{worker.nr} pid=#{worker.pid} processed #{worker.requests_count} requests, triggering a refork")
return true
end
end
false
+ end
+
+ def backoff?
+ return false if @backoff_until.nil?
+
+ if @backoff_until > Pitchfork.time_now
+ true
+ else
+ @backoff_until = nil
+ false
+ end
+ end
+
+ def backoff!(delay = 10.0)
+ @backoff_until = Pitchfork.time_now + delay
end
end
end
end