Class: Pione::TaskWorkerBroker::EasyProvider
- Inherits:
-
BasicProvider
- Object
- BasicProvider
- Pione::TaskWorkerBroker::EasyProvider
- Defined in:
- lib/pione/task-worker-broker/easy-provider.rb
Overview
EasyProvider
is a task worker provider by blancing 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.
-
#calc_resource_ratios(revision = {}) ⇒ Object
Calculate resource ratios of tuple space servers.
-
#provide ⇒ Object
Balance task worker ratio by creating a new task worker in minimum tuple space or killing a task worker in maximum.
Methods inherited from BasicProvider
Constructor Details
This class inherits a constructor from Pione::TaskWorkerBroker::BasicProvider
Instance Method Details
#adjust_task_worker(min_server, max_server) ⇒ Object
Adjusts task worker size between tuple space servers.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/pione/task-worker-broker/easy-provider.rb', line 43 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 @model.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 |
#calc_resource_ratios(revision = {}) ⇒ Object
Calculate resource ratios of tuple space servers.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/pione/task-worker-broker/easy-provider.rb', line 26 def calc_resource_ratios(revision={}) ratio = {} # make ratio table @model.tuple_space_lock.synchronize do @model.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 |
#provide ⇒ Object
Balance task worker ratio by creating a new task worker in minimum tuple space or killing a task worker in maximum.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/pione/task-worker-broker/easy-provider.rb', line 8 def provide 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 @model.excess_task_workers > 0 and min_server return @model.create_task_worker(min_server) else return adjust_task_worker(min_server, max_server) end end |