Sha256: d6ed477edfbddec8d77b1786ab3fbebd882cd7a734ac6ec663970c298e619bda

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

module Qfill
  module Strategy
    class DrainToLimit < Qfill::Strategy::Base
      NAME = :drain_to_limit

      def on_fill!
        # NOOP
      end

      def result_max!
        result.max = Qfill::Result.get_limit_from_max_and_ratio(primary_list_total, result.ratio, remaining)
      end

      def fill_up_to_ratio!
        num_primary = popper.primary.length
        ratio = 1.0 / num_primary # 1 divided by the number of queues
        max_from_list = Qfill::Result.get_limit_from_max_and_ratio(result.max, ratio, remaining)
        popper.primary.each_with_index do |queue, idx|
          # Are there leftovers that will be missed by a straight ratio'd iteration?
          mod = result.max % num_primary
          max_from_list += (mod / num_primary).ceil if idx.zero? && mod.positive?
          array_to_push = popper.next_objects!(queue.name, [max_from_list, remaining].min)
          self.added = result.push(array_to_push, queue.name)
          popper.current_index = popper.index_of(queue.name)
          puts "[fill_up_to_ratio!]#{self}[Q:#{queue.name}][added:#{added}]" if Qfill::VERBOSE
          bump!
          break if is_full?
        end
      end

      def fill_according_to_list_ratios!
        result.list_ratios.each do |list_name, list_ratio|
          max_from_list = Qfill::Result.get_limit_from_max_and_ratio(result.max, list_ratio, remaining)
          array_to_push = popper.next_objects!(list_name, max_from_list)
          self.added = result.push(array_to_push, list_name)
          popper.current_index = popper.index_of(list_name)
          puts "[fill_according_to_list_ratios!]#{self}[#{list_name}][added:#{added}]" if Qfill::VERBOSE
          bump!
          break if is_full?
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
qfill-0.1.1 lib/qfill/strategy/drain_to_limit.rb
qfill-0.1.0 lib/qfill/strategy/drain_to_limit.rb