Class: Gearman::Client

Inherits:
Object
  • Object
show all
Includes:
Celluloid
Defined in:
lib/gearman/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(*addresses) ⇒ Client

Returns a new instance of Client.



14
15
16
17
18
19
20
# File 'lib/gearman/client.rb', line 14

def initialize(*addresses)
  @addresses = addresses.map(&Kernel.method(:URI))
  @generate_unique_id = SecureRandom.method(:uuid)
  @addresses_by_connection_id = {}
  @connections = []
  build_connections
end

Instance Method Details

#build_connection(address) ⇒ Object



49
50
51
52
53
# File 'lib/gearman/client.rb', line 49

def build_connection(address)
  connection = Connection.new_link(address)
  @addresses_by_connection_id[connection.object_id] = address
  @connections << connection
end

#build_connectionsObject



43
44
45
46
47
# File 'lib/gearman/client.rb', line 43

def build_connections
  @addresses.each do |address|
    build_connection(address)
  end
end

#current_connectionObject



70
71
72
# File 'lib/gearman/client.rb', line 70

def current_connection
  @connections.first
end

#disconnectObject



39
40
41
# File 'lib/gearman/client.rb', line 39

def disconnect
  @connections.select(&:alive?).each(&:terminate)
end

#forget_connection(connection) {|| ... } ⇒ Object

Yields:

  • ()


74
75
76
77
# File 'lib/gearman/client.rb', line 74

def forget_connection(connection)
  @connections.delete(connection)
  yield @addresses_by_connection_id[connection.object_id]
end

#generate_unique_id_with(methodology) ⇒ Object



35
36
37
# File 'lib/gearman/client.rb', line 35

def generate_unique_id_with(methodology)
  @generate_unique_id = methodology
end

#reconnect(connection = nil, reason = nil) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/gearman/client.rb', line 55

def reconnect(connection = nil, reason = nil)
  Celluloid.logger.debug(reason) if reason

  connection ||= current_connection
  connection.terminate if connection.alive?

  forget_connection(connection) do |address|
    build_connection(address)
  end
end

#submit_job_bg(function_name, data) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/gearman/client.rb', line 22

def submit_job_bg(function_name, data)
  packet = Packet::SUBMIT_JOB_BG.new(
    function_name: function_name,
    unique_id: @generate_unique_id.(),
    data: data
  )

  with_connection do |connection|
    connection.write(packet)
    connection.async.next
  end
end

#with_connection(&action) ⇒ Object



66
67
68
# File 'lib/gearman/client.rb', line 66

def with_connection(&action)
  action.call(current_connection)
end