Skip to content

NoMethodError: undefined method `[]' for true:TrueClass #643

@saiqulhaq

Description

@saiqulhaq

Describe the bug
I got NoMethodError: undefined method []' for true:TrueClassfor every worker that hasuntil_and_while_executinglock it happens when executingperform_async` method

Expected behavior
perform_async should working fine

Current behavior
I got NoMethodError: undefined method `[]' for true:TrueClass

Worker class

class MyWorker
  include Sidekiq::Worker
  sidekiq_options(queue: :critical,
                  backtrace: true,
                  lock: :until_and_while_executing,
                  lock_timeout: 600,
                  on_conflict: {
                    client: :reject,
                    server: :reject
                  },
                  lock_prefix: 'xxxx')

  def perform(args); end

  def self.lock_args(args)
   [args[0], args[1]]
  end
end

Additional context
Add any other context about the problem here.
I have many workers that have until_and_while_executing lock
it seems only works when I have 1 worker with until_and_while_executing lock

This is the backtrace

/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:192:in `atomic_push'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:185:in `block (2 levels) in raw_push'
/usr/local/bundle/ruby/2.5.0/gems/redis-4.1.4/lib/redis.rb:2462:in `block in multi'
/usr/local/bundle/ruby/2.5.0/gems/redis-4.1.4/lib/redis.rb:51:in `block in synchronize'
/usr/lib/fullstaq-ruby/versions/2.5-jemalloc/lib/ruby/2.5.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/ruby/2.5.0/gems/redis-4.1.4/lib/redis.rb:51:in `synchronize'
/usr/local/bundle/ruby/2.5.0/gems/redis-4.1.4/lib/redis.rb:2455:in `multi'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:184:in `block in raw_push'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:63:in `block (2 levels) in with'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:62:in `handle_interrupt'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:62:in `block in with'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:59:in `handle_interrupt'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:59:in `with'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:183:in `raw_push'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:74:in `push'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/client.rb:132:in `push'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:477:in `block in retry'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-unique-jobs-7.1.5/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb:38:in `block in remove_job'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:503:in `block in remove_job'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq.rb:97:in `block in redis'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:63:in `block (2 levels) in with'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:62:in `handle_interrupt'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:62:in `block in with'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:59:in `handle_interrupt'
/usr/local/bundle/ruby/2.5.0/gems/connection_pool-2.2.5/lib/connection_pool.rb:59:in `with'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq.rb:94:in `redis'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:496:in `remove_job'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-unique-jobs-7.1.5/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb:36:in `remove_job'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:474:in `retry'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:576:in `block in each'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:575:in `each'
/usr/local/bundle/ruby/2.5.0/gems/sidekiq-5.2.9/lib/sidekiq/api.rb:575:in `each'

I use following script in rails console to retry all dead jobs

loop do
  ds = Sidekiq::DeadSet.new;
  break if ds.size.zero?
  ds.map &:retry
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions