Class: Ring::SQA::Analyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/ring/sqa/analyzer.rb

Constant Summary collapse

INTERVAL =

how often to run analyze loop

60
INFLIGHT_WAIT =

how long to wait for inflight records

1

Instance Method Summary collapse

Instance Method Details

#runObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ring/sqa/analyzer.rb', line 9

def run
  sleep INTERVAL
  loop do
    start = Time.now
    @db.purge
    @db_id_seen, records = @db.nodes_down(@db_id_seen+1)
    sleep INFLIGHT_WAIT
    records = records.all
    @buffer.push records.map { |record| record.peer }
    @buffer.exceed_median? ? @alarm.set(@buffer) : @alarm.clear(@buffer)
    delay = INTERVAL-(Time.now-start)
    # in case delay happens to be too big
    if delay > INTERVAL
      delay = INTERVAL
      Log.warn "delay became larger than #{INTERVAL}, capping it. (did ntp just sync?)"
    end
    if delay > 0
      sleep delay
    else
      Log.error "Analyzer loop took longer than #{INTERVAL}, wanted to sleep for #{delay}s"
    end
  end
end