Skip to content

Commit f0c080f

Browse files
committed
Add update generator and new migration
To be used as `bin/rails solid_queue:update` to copy new migrations. The new migration links claimed executions to processes with `process_name`, and replaces the unique index on processes on `supervisor_id, name` with just `name`, as we'll want the name to uniquely identify a process because we'll rely on that to release claimed executions, independently from the supervisor. Even though it was really unlikely to have a collision on name because these are set randomly with `SecureRandom.hex(10)`, in this way we guarantee it. fix
1 parent 6da82a9 commit f0c080f

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class LinkClaimedExecutionsWithProcessesThroughName < ActiveRecord::Migration[<%= ActiveRecord::VERSION::STRING.to_f %>]
2+
def up
3+
unless connection.column_exists?(:solid_queue_claimed_executions, :process_name)
4+
add_column :solid_queue_claimed_executions, :process_name, :string
5+
add_index :solid_queue_claimed_executions, :process_name
6+
end
7+
8+
unless connection.index_exists?(:solid_queue_processes, :name)
9+
add_index :solid_queue_processes, :name, unique: true
10+
end
11+
12+
if connection.index_exists?(:solid_queue_processes, [ :name, :supervisor_id ])
13+
remove_index :solid_queue_processes, [ :name, :supervisor_id ]
14+
end
15+
end
16+
17+
def down
18+
if connection.column_exists?(:solid_queue_claimed_executions, :process_name)
19+
remove_column :solid_queue_claimed_executions, :process_name
20+
end
21+
22+
if connection.index_exists?(:solid_queue_processes, :name)
23+
remove_index :solid_queue_processes, :name
24+
end
25+
26+
unless connection.index_exists?(:solid_queue_processes, [ :name, :supervisor_id ])
27+
add_index :solid_queue_processes, [ :name, :supervisor_id ], unique: true
28+
end
29+
end
30+
end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
require "rails/generators/active_record"
4+
5+
class SolidQueue::UpdateGenerator < Rails::Generators::Base
6+
include ActiveRecord::Generators::Migration
7+
8+
source_root File.expand_path("templates", __dir__)
9+
10+
class_option :database, type: :string, aliases: %i[ --db ], default: "queue",
11+
desc: "The database that Solid Queue uses. Defaults to `queue`"
12+
13+
def copy_new_migrations
14+
template_dir = Dir.new(File.join(self.class.source_root, "db"))
15+
16+
template_dir.each_child do |migration_file|
17+
migration_template File.join("db", migration_file), File.join(db_migrate_path, migration_file), skip: true
18+
end
19+
end
20+
end

lib/solid_queue/tasks.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44
Rails::Command.invoke :generate, [ "solid_queue:install" ]
55
end
66

7-
desc "start solid_queue supervisor to dispatch and process jobs"
7+
desc "Update Solid Queue"
8+
task :update do
9+
Rails::Command.invoke :generate, [ "solid_queue:update" ]
10+
end
11+
12+
desc "Start Solid Queue supervisor to dispatch and process jobs"
813
task start: :environment do
914
SolidQueue::Supervisor.start
1015
end

0 commit comments

Comments
 (0)