Module: Wakame::StatusDB

Defined in:
lib/wakame/status_db.rb

Defined Under Namespace

Classes: Model, SequelAdapter, WorkerThread

Class Method Summary collapse

Class Method Details

.adapterObject



81
82
83
# File 'lib/wakame/status_db.rb', line 81

def self.adapter
  @adapter ||= SequelAdapter.new
end

.barrier(&blk) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/wakame/status_db.rb', line 15

def self.barrier(&blk)
  abort "Cant use barrier() in side of the EventMachine thread." if Kernel.const_defined?(:EventMachine) && ::EventMachine.reactor_thread?

  if Thread.current == WorkerThread.worker_thread
    return blk.call
  end
  
  @q ||= ::Queue.new
  time_start = ::Time.now
  
  self.pass {
    begin
      res = blk.call
      @q << [true, res]
    rescue => e
      @q << [false, e]
    end
  }
  
  res = @q.shift
  time_elapsed = ::Time.now - time_start
  Wakame.log.debug("#{self}.barrier: Elapsed time for #{blk}: #{time_elapsed} sec") if time_elapsed > 0.05
  if res[0] == false && res[1].is_a?(Exception)
    raise res[1]
  end
  res[1]
end

.pass(&blk) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/wakame/status_db.rb', line 7

def self.pass(&blk)
  if Thread.current == WorkerThread.worker_thread
    blk.call
  else
    WorkerThread.queue.enq(blk)
  end
end