Sha256: abeecc5b5517a84eb00bc5c12061931493144d2e671843ad2806f246019cf5e0

Contents?: true

Size: 1.86 KB

Versions: 44

Compression:

Stored size: 1.86 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
          @queue = Queue.new
          @running = Concurrent::AtomicBoolean.new(false)
        end

        def start
          if @running.value
            @config.logger.debug('splits worker already running.')
            return
          end

          @running.make_true
          perform_thread
        end

        def stop
          unless @running.value
            @config.logger.debug('splits worker not running.')
            return
          end

          @running.make_false
          SplitIoClient::Helpers::ThreadHelper.stop(:split_update_worker, @config)
        end

        def add_to_queue(change_number)
          @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 @splits_repository.get_change_number.to_i > change_number

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

        private

        def perform
          while (change_number = @queue.pop)
            @config.logger.debug("SplitsWorker change_number dequeue #{change_number}")
            @synchronizer.fetch_splits(change_number)
          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
      end
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
splitclient-rb-8.1.2.pre.rc1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.2.pre.rc1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc3-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc3 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc2-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc2 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.1.pre.rc1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.0-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.0 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.0.pre.rc1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.1.0.pre.rc1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.1.pre.rc1-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.1.pre.rc1 lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.0-java lib/splitclient-rb/sse/workers/splits_worker.rb
splitclient-rb-8.0.0 lib/splitclient-rb/sse/workers/splits_worker.rb