Sha256: 716cb6c01263b9893dfdf540c4e5d65d95ba9be3586a6fc51570a12c2b036b1b

Contents?: true

Size: 789 Bytes

Versions: 3

Compression:

Stored size: 789 Bytes

Contents

module DeadlySerious
  module Processes
    class ResilientSplitter
      def initialize
        @reallocate = false
        Signal.trap('USR1') do
          @reallocate = true
        end
      end

      def run(readers: [], writers: [])
        reader = readers.first
        outputs = writers.dup
        current = nil
        reader.each do |line|
          begin
            if @reallocate
              @reallocate = false
              outputs = writers.dup
            end
            current = outputs.first
            current << line << "\n"
            outputs.rotate!
          rescue Errno::EPIPE => e
            puts e.inspect
            outputs.delete(current)
            raise e if outputs.empty?
            redo
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
deadly_serious-2.0.0.pre.rc3 lib/deadly_serious/processes/resilient_splitter.rb
deadly_serious-2.0.0.pre.rc2 lib/deadly_serious/processes/resilient_splitter.rb
deadly_serious-2.0.0.pre.rc1 lib/deadly_serious/processes/resilient_splitter.rb