Sha256: 539d943e459e721f27f8b682059f1b23864e2576fb661c87992b0de9f1b0715e

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'forwardable'

module BigBrother
  class ClusterCollection
    extend Forwardable
    def_delegators :@clusters, :[], :[]=, :size, :clear

    def initialize
      @clusters = {}
    end

    def config(new_clusters)
      (@clusters.keys - new_clusters.keys).each do |removed_name|
        @clusters.delete(removed_name).stop_monitoring!
      end

      ipvs_state = BigBrother.ipvs.running_configuration

      new_clusters.each do |cluster_name, cluster|
        if @clusters.key?(cluster_name)
          current_cluster = @clusters[cluster_name]
          current_cluster.stop_relay_fwmark if current_cluster.is_a?(BigBrother::ActiveActiveCluster) && !cluster.is_a?(BigBrother::ActiveActiveCluster)

          @clusters[cluster_name] = cluster.incorporate_state(@clusters[cluster_name])
        else
          @clusters[cluster_name] = cluster

          if ipvs_state.key?(cluster.fwmark.to_s)
            BigBrother.logger.info("resuming previously running cluster from kernel state (#{cluster.fwmark})")
            cluster.start_monitoring!
          end
        end
      end
    end

    def running
      @clusters.values.select(&:monitored?)
    end

    def stopped
      @clusters.values.reject(&:monitored?)
    end

    def ready_for_check
      @clusters.values.select(&:needs_check?)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
big_brother-0.8.8.1 lib/big_brother/cluster_collection.rb
big_brother-0.8.8 lib/big_brother/cluster_collection.rb