Class: Lowkiq::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/lowkiq/server.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(shard_handlers_by_thread, scheduler) ⇒ Server

Returns a new instance of Server.



13
14
15
16
17
# File 'lib/lowkiq/server.rb', line 13

def initialize(shard_handlers_by_thread, scheduler)
  @shard_handlers_by_thread = shard_handlers_by_thread
  @scheduler = scheduler
  @threads = []
end

Class Method Details

.build(options) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/lowkiq/server.rb', line 3

def self.build(options)
  require options[:require]
  Lowkiq.on_server_init.call

  splitter = Lowkiq.build_splitter.call
  shard_handlers_by_thread = splitter.call Lowkiq.shard_handlers
  scheduler = Lowkiq.build_scheduler.call
  new shard_handlers_by_thread, scheduler
end

Instance Method Details

#exit_from_thread?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/lowkiq/server.rb', line 44

def exit_from_thread?
  stopped? || failed?
end

#failed?Boolean

Returns:

  • (Boolean)


52
53
54
55
56
# File 'lib/lowkiq/server.rb', line 52

def failed?
  @threads.map(&:status).any? do |status|
    status != "run" && status != "sleep"
  end
end

#joinObject



40
41
42
# File 'lib/lowkiq/server.rb', line 40

def join
  @threads.each(&:join)
end

#startObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/lowkiq/server.rb', line 19

def start
  Lowkiq.server_redis_pool.with do |redis|
    Script.load! redis
  end

  @shard_handlers_by_thread.each do |handlers|
    handlers.each(&:restore)
  end

  @threads = @shard_handlers_by_thread.map do |handlers|
    job = @scheduler.build_job handlers
    Thread.new do
      job.call until exit_from_thread?
    end
  end
end

#stopObject



36
37
38
# File 'lib/lowkiq/server.rb', line 36

def stop
  @stopped = true
end

#stopped?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/lowkiq/server.rb', line 48

def stopped?
  @stopped
end