Class: DRbQS::Server::Message

Inherits:
Object
  • Object
show all
Includes:
Misc
Defined in:
lib/drbqs/server/message.rb

Constant Summary

Constants included from Misc

Misc::STRINGS_FOR_KEY

Instance Method Summary collapse

Methods included from Misc

create_logger, create_uri, output_error, process_running_normally?, random_key, time_to_history_string, time_to_history_string2, uri_drbunix

Constructor Details

#initialize(message, logger = DRbQS::Misc::LoggerDummy.new) ⇒ Message

Returns a new instance of Message.



8
9
10
11
12
# File 'lib/drbqs/server/message.rb', line 8

def initialize(message, logger = DRbQS::Misc::LoggerDummy.new)
  @message = message
  @node_list = DRbQS::Server::NodeList.new
  @logger = logger
end

Instance Method Details

#check_connectionObject



74
75
76
77
78
79
80
81
82
# File 'lib/drbqs/server/message.rb', line 74

def check_connection
  deleted = @node_list.delete_not_alive
  @logger.info("IDs of deleted nodes") { deleted } if deleted.size > 0 && @logger
  @node_list.each do |id, str|
    @message.write([id, :alive_p])
  end
  @node_list.set_check_connection
  deleted
end

#each_node_history(&block) ⇒ Object



121
122
123
# File 'lib/drbqs/server/message.rb', line 121

def each_node_history(&block)
  @node_list.history.each(&block)
end

#get_all_nodesObject



141
142
143
# File 'lib/drbqs/server/message.rb', line 141

def get_all_nodes
  @node_list.list.dup
end

#get_messageArray

One of the following messages is returned.

  • [:exit_server, nil]
  • [:request_status, nil]
  • [:request_history, nil]
  • [:exit_after_task, node_id]
  • [:wake_node, node_id]
  • [:sleep_node, node_id]
  • [:node_error, [node_id, error_message]]
  • [:initialize, Array]
  • [:finalize, Array]

Returns:

  • (Array)

    Message array



27
28
29
30
31
32
33
34
# File 'lib/drbqs/server/message.rb', line 27

def get_message
  begin
    mes = @message.take([:server, Symbol, nil], 0)
    manage_message(*mes[1..2])
  rescue Rinda::RequestExpiredError
    nil
  end
end

#node_exist?(node_id) ⇒ Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/drbqs/server/message.rb', line 149

def node_exist?(node_id)
  @node_list.exist?(node_id)
end

#node_not_exist?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/drbqs/server/message.rb', line 145

def node_not_exist?
  @node_list.empty?
end

#send_exitObject

Send all nodes a message to exit.



99
100
101
# File 'lib/drbqs/server/message.rb', line 99

def send_exit
  send_signal_to_all_nodes(:exit)
end

#send_exit_after_task(node_id) ⇒ Object



116
117
118
119
# File 'lib/drbqs/server/message.rb', line 116

def send_exit_after_task(node_id)
  @node_list.add_to_preparation_to_exit(node_id)
  send_signal(node_id, :exit_after_task)
end

#send_finalizationObject

Send all nodes a message to finalize and exit.



112
113
114
# File 'lib/drbqs/server/message.rb', line 112

def send_finalization
  send_signal_to_all_nodes(:finalize)
end

#send_history(history_string) ⇒ Object



133
134
135
136
137
138
139
# File 'lib/drbqs/server/message.rb', line 133

def send_history(history_string)
  begin
    @message.take([:history, nil], 0)
  rescue Rinda::RequestExpiredError
  end
  @message.write([:history, history_string])
end

#send_sleep(node_id) ⇒ Object



103
104
105
# File 'lib/drbqs/server/message.rb', line 103

def send_sleep(node_id)
  send_signal(node_id, :sleep)
end

#send_status(server_status_string) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/drbqs/server/message.rb', line 125

def send_status(server_status_string)
  begin
    @message.take([:status, nil], 0)
  rescue Rinda::RequestExpiredError
  end
  @message.write([:status, server_status_string])
end

#send_wake(node_id) ⇒ Object



107
108
109
# File 'lib/drbqs/server/message.rb', line 107

def send_wake(node_id)
  send_signal(node_id, :wake)
end

#set_finalization_tasks(task_ary) ⇒ Object



172
173
174
# File 'lib/drbqs/server/message.rb', line 172

def set_finalization_tasks(task_ary)
  set_special_task(:finalize, *task_ary)
end

#set_initialization_tasks(task_ary) ⇒ Object

If the task has already set, the method overwrite old task of initialization by new task.



168
169
170
# File 'lib/drbqs/server/message.rb', line 168

def set_initialization_tasks(task_ary)
  set_special_task(:initialize, *task_ary)
end

#shutdown_unused_nodes(calculating_nodes) ⇒ Object



176
177
178
179
180
181
182
183
184
185
# File 'lib/drbqs/server/message.rb', line 176

def shutdown_unused_nodes(calculating_nodes)
  shutdown_nodes = []
  @node_list.each do |node_id, id_str|
    if !@node_list.prepare_to_exit?(node_id) && !calculating_nodes.include?(node_id)
      send_exit_after_task(node_id)
      shutdown_nodes << node_id
    end
  end
  shutdown_nodes
end