Class: VSphereCloud::Resources::Scorer
- Inherits:
-
Object
- Object
- VSphereCloud::Resources::Scorer
- Defined in:
- lib/cloud/vsphere/resources/scorer.rb
Overview
Resource Scorer.
Instance Method Summary collapse
-
#initialize(config, cluster, memory, ephemeral, persistent) ⇒ Scorer
constructor
Creates a new Scorer given a cluster and requested memory and storage.
-
#score ⇒ Integer
Run the scoring function and return the placement score for the required resources.
Constructor Details
#initialize(config, cluster, memory, ephemeral, persistent) ⇒ Scorer
Creates a new Scorer given a cluster and requested memory and storage.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/cloud/vsphere/resources/scorer.rb', line 16 def initialize(config, cluster, memory, ephemeral, persistent) @logger = config.logger @cluster = cluster @memory = memory @ephemeral = ephemeral @persistent = persistent @free_memory = cluster.free_memory @free_ephemeral = [] cluster.ephemeral_datastores.each_value do |datastore| @free_ephemeral << datastore.free_space end @free_persistent = [] cluster.persistent_datastores.each_value do |datastore| @free_persistent << datastore.free_space end @free_shared = [] cluster.shared_datastores.each_value do |datastore| @free_shared << datastore.free_space end end |
Instance Method Details
#score ⇒ Integer
Run the scoring function and return the placement score for the required resources.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/cloud/vsphere/resources/scorer.rb', line 45 def score min_ephemeral = @ephemeral min_persistent = @persistent.min min_shared = min_ephemeral if !min_persistent.nil? && min_persistent < min_shared min_shared = min_persistent end # Filter out any datastores that are below the min threshold filter(@free_ephemeral, min_ephemeral + DISK_THRESHOLD) filter(@free_shared, min_shared + DISK_THRESHOLD) unless @persistent.empty? filter(@free_persistent, min_persistent + DISK_THRESHOLD) end count = 0 loop do @free_memory -= @memory if @free_memory < MEMORY_THRESHOLD @logger.debug("#{@cluster.name} memory bound") break end consumed = consume_disk(@free_ephemeral, @ephemeral, min_ephemeral) unless consumed unless consume_disk(@free_shared, @ephemeral, min_shared) @logger.debug("#{@cluster.name} ephemeral disk bound") break end end unless @persistent.empty? consumed_all = true @persistent.each do |size| consumed = consume_disk(@free_persistent, size, min_persistent) unless consumed unless consume_disk(@free_shared, size, min_shared) consumed_all = false @logger.debug("#{@cluster.name} persistent disk bound") break end end end break unless consumed_all end count += 1 end count end |