Class: Pione::Agent::EasyTaskWorkerBalancer
- Inherits:
-
TaskWorkerBalancer
- Object
- TaskWorkerBalancer
- Pione::Agent::EasyTaskWorkerBalancer
- Defined in:
- lib/pione/agent/broker.rb
Overview
EasyBalancer is a balancer by ratios of tuple space and task worker.
Instance Method Summary collapse
-
#adjust_task_worker(min_server, max_server) ⇒ Object
Adjusts task worker size between tuple space servers.
-
#balance ⇒ Object
Balance task worker ratio by creating a new task worker in minimum tuple space or killing a task worker in maximum.
-
#calc_resource_ratios(revision = {}) ⇒ Object
Calculate resource ratios of tuple space servers.
-
#create_task_worker(min_server) ⇒ Object
Creates a new task worker.
-
#initialize(broker) ⇒ EasyTaskWorkerBalancer
constructor
see Balancer.new.
Constructor Details
#initialize(broker) ⇒ EasyTaskWorkerBalancer
see Balancer.new
236 237 238 |
# File 'lib/pione/agent/broker.rb', line 236 def initialize(broker) @broker = broker end |
Instance Method Details
#adjust_task_worker(min_server, max_server) ⇒ Object
Adjusts task worker size between tuple space servers.
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/pione/agent/broker.rb', line 282 def adjust_task_worker(min_server, max_server) revision = {min_server => 1, max_server => -1} new_ratios = calc_resource_ratios(revision) # failed to calculate tuple space ratio return unless new_ratios.has_key?(min_server) return unless new_ratios.has_key?(max_server) # kill a task worker for moving worker from max server to min server if new_ratios[min_server] < new_ratios[max_server] if @broker.terminate_task_worker_if do |worker| worker.tuple_space == max_server && worker.states.any?{|s| s.current?(:take_task)} end return true end end # failed to adjust task workers return false end |
#balance ⇒ Object
Balance task worker ratio by creating a new task worker in minimum tuple space or killing a task worker in maximum.
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/pione/agent/broker.rb', line 242 def balance ratios = calc_resource_ratios min = ratios.values.min max = ratios.values.max min_server = ratios.key(min) max_server = ratios.key(max) return false unless min_server return false unless max_server if @broker.excess_task_workers > 0 and min_server return create_task_worker(min_server) else return adjust_task_worker(min_server, max_server) end end |
#calc_resource_ratios(revision = {}) ⇒ Object
Calculate resource ratios of tuple space servers.
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/pione/agent/broker.rb', line 260 def calc_resource_ratios(revision={}) ratio = {} # make ratio table @broker.tuple_space_lock.synchronize do @broker.tuple_spaces.each do |tuple_space| rev = revision.has_key?(tuple_space) ? revision[tuple_space] : 0 current = timeout(1){tuple_space.current_task_worker_size} + rev resource = tuple_space.task_worker_resource # minimum resource is 1 resource = 1 unless resource > 0 ratio[tuple_space] = current / resource.to_f end end return ratio end |
#create_task_worker(min_server) ⇒ Object
Creates a new task worker.
277 278 279 |
# File 'lib/pione/agent/broker.rb', line 277 def create_task_worker(min_server) return @broker.create_task_worker(min_server) end |