Skip to content

Commit 094eba1

Browse files
committed
Clean up
1 parent 8f6850c commit 094eba1

File tree

8 files changed

+50
-49
lines changed

8 files changed

+50
-49
lines changed

app/models/solid_queue/record.rb

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@ module SolidQueue
44
class Record < ActiveRecord::Base
55
self.abstract_class = true
66

7-
connects_to(**SolidQueue.connects_to) if SolidQueue.connects_to
7+
def self.connects_to_and_set_active_shard
8+
connects_to(**SolidQueue.connects_to)
9+
10+
if SolidQueue.connects_to.key?(:shards) &&
11+
SolidQueue.connects_to[:shards].key?(SolidQueue.active_shard)
12+
self.default_shard = SolidQueue.active_shard
13+
end
14+
end
15+
16+
connects_to_and_set_active_shard if SolidQueue.connects_to
817

918
def self.non_blocking_lock
1019
if SolidQueue.use_skip_locked

lib/active_job/queue_adapters/solid_queue_adapter.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ def enqueue_all(active_jobs) # :nodoc:
3232

3333
private
3434

35-
def select_shard
35+
def select_shard(&block)
3636
shard = @db_shard || SolidQueue.primary_shard
3737

3838
if shard
39-
ActiveRecord::Base.connected_to(shard: shard) { yield }
39+
ActiveRecord::Base.connected_to(shard: shard) { block.call }
4040
else
41-
yield
41+
block.call
4242
end
4343
end
4444
end

lib/solid_queue/engine.rb

+10
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,15 @@ class Engine < ::Rails::Engine
3737
include ActiveJob::ConcurrencyControls
3838
end
3939
end
40+
41+
initializer "solid_queue.shard_configuration" do
42+
ActiveSupport.on_load(:solid_queue) do
43+
# Record the name of the primary shard, which should be used for
44+
# adapter less jobs
45+
if SolidQueue.connects_to.key?(:shards) && SolidQueue.primary_shard.nil?
46+
SolidQueue.primary_shard = SolidQueue.connects_to[:shards].keys.first
47+
end
48+
end
49+
end
4050
end
4151
end

lib/solid_queue/processes/base.rb

-17
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,6 @@ class Base
66
include Callbacks # Defines callbacks needed by other concerns
77
include AppExecutor, Registrable, Interruptible, Procline
88

9-
after_boot -> do
10-
if SolidQueue.connects_to.key?(:shards)
11-
# Record the name of the primary shard, which should be used for
12-
# adapter less jobs
13-
if SolidQueue.primary_shard.nil?
14-
SolidQueue.primary_shard = SolidQueue.connects_to[:shards].keys.first
15-
end
16-
17-
# Move active_shard to first position in connects_to[:shards] Hash to
18-
# make it the default
19-
if SolidQueue.active_shard.present? &&
20-
SolidQueue.connects_to[:shards].key?(SolidQueue.active_shard)
21-
SolidQueue::Record.default_shard = SolidQueue.active_shard
22-
end
23-
end
24-
end
25-
269
attr_reader :name
2710

2811
def initialize(*)

test/test_helper.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ExpectedTestError < RuntimeError; end
2828

2929

3030
class ActiveSupport::TestCase
31-
include ConfigurationTestHelper, ProcessesTestHelper, JobsTestHelper
31+
include ConfigurationTestHelper, ProcessesTestHelper, JobsTestHelper, MultishardingTestHelper
3232

3333
setup do
3434
# Could be cleaner with one several minitest gems, but didn't want to add new dependency

test/test_helpers/jobs_test_helper.rb

-9
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,4 @@ def assert_claimed_jobs(count = 1)
3434
assert_equal count, SolidQueue::ClaimedExecution.count
3535
end
3636
end
37-
38-
def change_active_shard_to(new_shard_name, &block)
39-
old_shard_name = SolidQueue.active_shard
40-
SolidQueue.active_shard = new_shard_name
41-
block.call
42-
ensure
43-
SolidQueue.active_shard = old_shard_name
44-
SolidQueue::Record.connects_to(**SolidQueue.connects_to) if SolidQueue.connects_to
45-
end
4637
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module MultishardingTestHelper
2+
private
3+
4+
def connected_to_shard_two(&block)
5+
ActiveRecord::Base.connected_to(shard: :queue_shard_two) { block.call }
6+
end
7+
8+
def change_active_shard_to(new_shard_name, &block)
9+
old_shard_name = SolidQueue.active_shard
10+
SolidQueue.active_shard = new_shard_name
11+
SolidQueue::Record.connects_to_and_set_active_shard
12+
block.call
13+
ensure
14+
SolidQueue.active_shard = old_shard_name
15+
SolidQueue::Record.connects_to_and_set_active_shard
16+
end
17+
end

test/unit/multisharding_test.rb

+9-18
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,22 @@
33
class MultishardingTest < ActiveSupport::TestCase
44
test "jobs are enqueued in the right shard" do
55
assert_difference -> { SolidQueue::Job.count }, 1 do
6-
assert_difference -> do
7-
ActiveRecord::Base.connected_to(
8-
shard: :queue_shard_two
9-
) { SolidQueue::Job.count }
10-
end,
11-
1 do
6+
assert_difference -> { connected_to_shard_two { SolidQueue::Job.count } }, 1 do
127
AddToBufferJob.perform_later "hey!"
138
ShardTwoJob.perform_later "coucou!"
149
end
1510
end
1611
end
1712

13+
test "jobs are enqueued in the right shard no matter the primary shard" do
14+
assert_difference -> { SolidQueue::Job.count }, 1 do
15+
change_active_shard_to(:queue_shard_two) { AddToBufferJob.perform_later "hey!" }
16+
end
17+
end
18+
1819
test "jobs are enqueued for later in the right shard" do
1920
assert_difference -> { SolidQueue::ScheduledExecution.count }, 1 do
20-
assert_difference -> do
21-
ActiveRecord::Base.connected_to(
22-
shard: :queue_shard_two
23-
) { SolidQueue::ScheduledExecution.count }
24-
end,
25-
1 do
21+
assert_difference -> { connected_to_shard_two { SolidQueue::ScheduledExecution.count } }, 1 do
2622
AddToBufferJob.set(wait: 1).perform_later "hey!"
2723
ShardTwoJob.set(wait: 1).perform_later "coucou!"
2824
end
@@ -38,12 +34,7 @@ class MultishardingTest < ActiveSupport::TestCase
3834
]
3935

4036
assert_difference -> { SolidQueue::Job.count }, 2 do
41-
assert_difference -> do
42-
ActiveRecord::Base.connected_to(
43-
shard: :queue_shard_two
44-
) { SolidQueue::Job.count }
45-
end,
46-
2 do
37+
assert_difference -> { connected_to_shard_two { SolidQueue::Job.count } }, 2 do
4738
ActiveJob.perform_all_later(active_jobs)
4839
end
4940
end

0 commit comments

Comments
 (0)