Sha256: db76dff4b536b9dce3390fc60eba87522ad5f8b27da155b887f5409faed3a9f3

Contents?: true

Size: 1.91 KB

Versions: 12

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module SplitIoClient
  module SSE
    module Workers
      class SplitsWorker
        def initialize(synchronizer, config, splits_repository)
          @synchronizer = synchronizer
          @config = config
          @splits_repository = splits_repository
        end

        def start
          return if SplitIoClient::Helpers::ThreadHelper.alive?(:split_update_worker, @config)

          @queue = Queue.new
          perform_thread
          perform_passenger_forked if defined?(PhusionPassenger)
        end

        def add_to_queue(change_number)
          return if @queue.nil?

          @config.logger.debug("SplitsWorker add to queue #{change_number}")
          @queue.push(change_number)
        end

        def kill_split(change_number, split_name, default_treatment)
          return if @queue.nil?

          @config.logger.debug("SplitsWorker kill #{split_name}, #{change_number}")
          @splits_repository.kill(change_number, split_name, default_treatment)
          add_to_queue(change_number)
        end

        def stop
          SplitIoClient::Helpers::ThreadHelper.stop(:split_update_worker, @config)
          @queue = nil
        end

        private

        def perform
          while (change_number = @queue.pop)
            since = @splits_repository.get_change_number

            unless since.to_i >= change_number
              @config.logger.debug("SplitsWorker fetch_splits with #{since}")
              @synchronizer.fetch_splits
            end
          end
        end

        def perform_thread
          @config.threads[:split_update_worker] = Thread.new do
            @config.logger.debug('Starting splits worker ...') if @config.debug_enabled
            perform
          end
        end

        def perform_passenger_forked
          PhusionPassenger.on_event(:starting_worker_process) { |forked| perform_thread if forked }
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
splitclient-rb-7.1.0.pre.rc12-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc12 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc9-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc9 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc8-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc8 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc7-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc7 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc6-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc6 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc5-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-7.1.0.pre.rc5 lib/splitclient-rb/sse/workers/splits_worker.rb