Class: VSphereCloud::Resources::Scorer
- Inherits:
-
Object
- Object
- VSphereCloud::Resources::Scorer
- Defined in:
- lib/cloud/vsphere/resources/scorer.rb
Defined Under Namespace
Classes: DiskPool
Class Method Summary collapse
-
.score(logger, cluster, requested_memory, requested_ephemeral_size, requested_persistent_sizes) ⇒ Integer
Run the scoring function and return the placement score for the required resources.
Class Method Details
.score(logger, cluster, requested_memory, requested_ephemeral_size, requested_persistent_sizes) ⇒ Integer
Run the scoring function and return the placement score for the required resources.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/cloud/vsphere/resources/scorer.rb', line 16 def self.score(logger, cluster, requested_memory, requested_ephemeral_size, requested_persistent_sizes) free_memory = cluster.free_memory ephemeral_pool = DiskPool.new(cluster.ephemeral_datastores.values.map(&:free_space)) persistent_pool = DiskPool.new(cluster.persistent_datastores.values.map(&:free_space)) successful_allocations = 0 loop do free_memory -= requested_memory if free_memory < MEMORY_HEADROOM logger.debug("#{cluster.name} memory bound") break end unless ephemeral_pool.consume_disk(requested_ephemeral_size) logger.debug("#{cluster.name} ephemeral disk bound") break end unless requested_persistent_sizes.empty? placed = requested_persistent_sizes.select { |size| persistent_pool.consume_disk(size) } unless requested_persistent_sizes == placed logger.debug("#{cluster.name} persistent disk bound") break end end successful_allocations += 1 end successful_allocations end |