Sha256: 8f85d22a511d33592f497be69e3642423189008a9ad4864f066ae7beca65820b

Contents?: true

Size: 1 KB

Versions: 27

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true
require 'yaml'

module Sidekiq
  module Extensions
    SIZE_LIMIT = 8_192

    class Proxy < BasicObject
      def initialize(performable, target, options={})
        @performable = performable
        @target = target
        @opts = options
      end

      def method_missing(name, *args)
        # Sidekiq has a limitation in that its message must be JSON.
        # JSON can't round trip real Ruby objects so we use YAML to
        # serialize the objects to a String.  The YAML will be converted
        # to JSON and then deserialized on the other side back into a
        # Ruby object.
        obj = [@target, name, args]
        marshalled = ::YAML.dump(obj)
        if marshalled.size > SIZE_LIMIT
          ::Sidekiq.logger.warn { "#{@target}.#{name} job argument is #{marshalled.bytesize} bytes, you should refactor it to reduce the size" }
        end
        @performable.client_push({ 'class' => @performable, 'args' => [marshalled] }.merge(@opts))
      end
    end

  end
end

Version data entries

27 entries across 27 versions & 2 rubygems

Version Path
sidekiq-5.0.2 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.1 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.0 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.0.rc1 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.0.beta3 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.0.beta2 lib/sidekiq/extensions/generic_proxy.rb
sidekiq-5.0.0.beta1 lib/sidekiq/extensions/generic_proxy.rb