mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
![Mike Perham](/assets/img/avatar_default.png)
* Initial work on Sidekiq::Config * Initial work on Sidekiq::Config * reduce dependencies in deploy marks * bare sidekiq and webapp * Modify runtime to work with Capsules * Cleanup * Rename test files to remove test_ prefix * Update test suite and standard rules to be more compliant * Move constant definition outside code, per standard formatting * Loads of changes for introduction of Capsules * Remove Redis adapter abstraction * update capsule overview * Ensure Sidekiq.redis uses the correct pool for jobs running within a Capsule * Use default_capsule for safety * Slow down the beat to halve its Redis overhead * move config fixtures into cfg/ * Add capsule middleware test * use accessor
44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "securerandom"
|
|
require "sidekiq/client"
|
|
|
|
module Sidekiq
|
|
class TransactionAwareClient
|
|
def initialize(pool: nil, config: nil)
|
|
@redis_client = Client.new(pool: pool, config: config)
|
|
end
|
|
|
|
def push(item)
|
|
# pre-allocate the JID so we can return it immediately and
|
|
# save it to the database as part of the transaction.
|
|
item["jid"] ||= SecureRandom.hex(12)
|
|
AfterCommitEverywhere.after_commit { @redis_client.push(item) }
|
|
item["jid"]
|
|
end
|
|
|
|
##
|
|
# We don't provide transactionality for push_bulk because we don't want
|
|
# to hold potentially hundreds of thousands of job records in memory due to
|
|
# a long running enqueue process.
|
|
def push_bulk(items)
|
|
@redis_client.push_bulk(items)
|
|
end
|
|
end
|
|
end
|
|
|
|
##
|
|
# Use `Sidekiq.transactional_push!` in your sidekiq.rb initializer
|
|
module Sidekiq
|
|
def self.transactional_push!
|
|
begin
|
|
require "after_commit_everywhere"
|
|
rescue LoadError
|
|
raise %q(You need to add `gem "after_commit_everywhere"` to your Gemfile to use Sidekiq's transactional client)
|
|
end
|
|
|
|
Sidekiq.default_job_options["client_class"] = Sidekiq::TransactionAwareClient
|
|
Sidekiq::JobUtil::TRANSIENT_ATTRIBUTES << "client_class"
|
|
true
|
|
end
|
|
end
|