acidic_job 1.0.0.pre4 → 1.0.0.pre5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/UPGRADE_GUIDE.md +11 -1
- data/lib/acidic_job/upgrade_service.rb +112 -109
- data/lib/acidic_job/version.rb +1 -1
- data/lib/generators/acidic_job/drop_tables_generator.rb +19 -19
- data/lib/generators/acidic_job/install_generator.rb +5 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8a9a11bcedbc8703e24c32db6474dfe963d8f97120c88c90dc4712026142d61
|
4
|
+
data.tar.gz: c558f6b90c1044c1320efc018fe4f9886f4af7ebab6a0c1fa8a991232e2b4065
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9aef4b22eb6ee7860badda470c379d19395c60bc40072085ea3eae6ea140fd77103a07cf142a88310d90f67736300ceb3a755fe3f4283488caf36a7f872baf6
|
7
|
+
data.tar.gz: 8e1b7d428bc44f83274c3f64454d34c3467e7e701088aee862b71aec55c534a527d7d2e7e7a83fee4a94abe953284a092e8df24b55ae5c7fd195d8df968beb8f
|
data/Gemfile.lock
CHANGED
data/UPGRADE_GUIDE.md
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
result:
|
11
11
|
```
|
12
|
-
Installing acidic_job 1.0.0.
|
12
|
+
Installing acidic_job 1.0.0.pre4 (was 0.7.7)
|
13
13
|
Bundle updated!
|
14
14
|
```
|
15
15
|
|
@@ -67,5 +67,15 @@ Once you have successfully migrated everything over and the new system has been
|
|
67
67
|
|
68
68
|
```bash
|
69
69
|
rails generate acidic_job:drop_tables
|
70
|
+
```
|
71
|
+
|
72
|
+
result:
|
73
|
+
```
|
74
|
+
create db/migrate/#{yyyymmddhhmmss}_drop_old_acidic_job_tables.rb
|
75
|
+
```
|
76
|
+
|
77
|
+
You can then run the migration to have those tables removed:
|
78
|
+
|
79
|
+
```bash
|
70
80
|
rails db:migrate
|
71
81
|
```
|
@@ -3,113 +3,116 @@
|
|
3
3
|
require "active_support/concern"
|
4
4
|
|
5
5
|
module AcidicJob
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
6
|
+
# recreate the original `Key` model
|
7
|
+
class Key < ::ActiveRecord::Base
|
8
|
+
RECOVERY_POINT_FINISHED = "FINISHED"
|
9
|
+
|
10
|
+
self.table_name = "acidic_job_keys"
|
11
|
+
|
12
|
+
serialize :error_object
|
13
|
+
serialize :job_args
|
14
|
+
serialize :workflow
|
15
|
+
store :attr_accessors
|
16
|
+
end
|
17
|
+
|
18
|
+
# recreate the original `Staged` model
|
19
|
+
class Staged < ActiveRecord::Base
|
20
|
+
self.table_name = "staged_acidic_jobs"
|
21
|
+
|
22
|
+
serialize :job_args
|
23
|
+
|
24
|
+
after_create_commit :enqueue_job
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def enqueue_job
|
29
|
+
gid = { "staged_job_gid" => to_global_id.to_s }
|
30
|
+
|
31
|
+
if job_args.is_a?(Hash) && job_args.key?("arguments")
|
32
|
+
job_args["arguments"].concat([gid])
|
33
|
+
else
|
34
|
+
job_args.concat([gid])
|
35
|
+
end
|
36
|
+
|
37
|
+
case adapter
|
38
|
+
when "activejob"
|
39
|
+
::ActiveJob::Base.deserialize(job_args).enqueue
|
40
|
+
when "sidekiq"
|
41
|
+
job_name.constantize.perform_async(*job_args)
|
42
|
+
else
|
43
|
+
raise UnknownJobAdapter.new(adapter: adapter)
|
44
|
+
end
|
45
|
+
|
46
|
+
# NOTE: record will be deleted after the job has successfully been performed
|
47
|
+
true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
module UpgradeService
|
52
|
+
def self.execute
|
53
|
+
# prepare an array to hold the attribute hashes to be passed to `insert_all`
|
54
|
+
run_attributes = []
|
55
|
+
# prepare an array to hold any `Key` records that we couldn't successfully map to `Run` records
|
56
|
+
errored_keys = []
|
57
|
+
|
58
|
+
# iterate over all `AcidicJob::Key` records in batches,
|
59
|
+
# preparing a `Run` attribute hash to be passed to `insert_all`
|
60
|
+
::AcidicJob::Key.find_each do |key|
|
61
|
+
# map all of the simple attributes directly
|
62
|
+
attributes = {
|
63
|
+
id: key.id,
|
64
|
+
staged: false,
|
65
|
+
idempotency_key: key.idempotency_key,
|
66
|
+
job_class: key.job_name,
|
67
|
+
last_run_at: key.last_run_at,
|
68
|
+
locked_at: key.locked_at,
|
69
|
+
recovery_point: key.recovery_point,
|
70
|
+
error_object: key.error_object,
|
71
|
+
attr_accessors: key.attr_accessors,
|
72
|
+
workflow: key.workflow,
|
73
|
+
created_at: key.created_at,
|
74
|
+
updated_at: key.updated_at
|
75
|
+
}
|
76
|
+
|
77
|
+
# prepare the more complicated `job_args` -> `serialized_job` translation
|
78
|
+
job_class = key.job_name.constantize
|
79
|
+
if defined?(::Sidekiq) && job_class.include?(::Sidekiq::Worker)
|
80
|
+
unless job_class.include?(::AcidicJob::Extensions::Sidekiq)
|
81
|
+
job_class.include(::AcidicJob::Extensions::Sidekiq)
|
82
|
+
end
|
83
|
+
job_instance = job_class.new
|
84
|
+
serialized_job = job_instance.serialize_job(*key.job_args)
|
85
|
+
elsif defined?(::ActiveJob) && job_class < ::ActiveJob::Base
|
86
|
+
unless job_class.include?(::AcidicJob::Extensions::ActiveJob)
|
87
|
+
job_class.include(::AcidicJob::Extensions::ActiveJob)
|
88
|
+
end
|
89
|
+
job_args = begin
|
90
|
+
::ActiveJob::Arguments.deserialize(key.job_args)
|
91
|
+
rescue ::ActiveJob::DeserializationError
|
92
|
+
key.job_args
|
93
|
+
end
|
94
|
+
job_instance = job_class.new(*job_args)
|
95
|
+
serialized_job = job_instance.serialize_job
|
96
|
+
end
|
97
|
+
|
98
|
+
attributes[:serialized_job] = serialized_job
|
99
|
+
run_attributes << attributes
|
100
|
+
rescue StandardError => e
|
101
|
+
errored_keys << [e, key]
|
102
|
+
end
|
103
|
+
|
104
|
+
# insert all of the `Run` records
|
105
|
+
::AcidicJob::Run.insert_all(run_attributes)
|
106
|
+
|
107
|
+
# delete all successfully migrated `Key` record
|
108
|
+
::AcidicJob::Key.where(id: ::AcidicJob::Run.select(:id)).delete_all
|
109
|
+
|
110
|
+
# return a report of the upgrade migration
|
111
|
+
{
|
112
|
+
run_records: ::AcidicJob::Run.count,
|
113
|
+
key_records: ::AcidicJob::Key.count,
|
114
|
+
errored_keys: errored_keys
|
115
|
+
}
|
116
|
+
end
|
117
|
+
end
|
115
118
|
end
|
data/lib/acidic_job/version.rb
CHANGED
@@ -3,24 +3,24 @@
|
|
3
3
|
require "rails/generators/active_record"
|
4
4
|
|
5
5
|
module AcidicJob
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module Generators
|
7
|
+
class DropTablesGenerator < ::Rails::Generators::Base
|
8
|
+
include ActiveRecord::Generators::Migration
|
9
|
+
source_root File.expand_path("templates", __dir__)
|
10
10
|
|
11
|
-
|
11
|
+
desc "Drops the pre-1.0 tables for the AcidicJob::Key and AcidicJob::Staged models."
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
13
|
+
def copy_migration
|
14
|
+
migration_template "drop_acidic_job_keys_migration.rb.erb",
|
15
|
+
"db/migrate/drop_old_acidic_job_tables.rb",
|
16
|
+
migration_version: migration_version
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def migration_version
|
22
|
+
"[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -7,21 +7,21 @@ module AcidicJob
|
|
7
7
|
class InstallGenerator < ::Rails::Generators::Base
|
8
8
|
include ActiveRecord::Generators::Migration
|
9
9
|
source_root File.expand_path("templates", __dir__)
|
10
|
-
|
10
|
+
|
11
11
|
desc "Generates a migration for the AcidicJob::Run table."
|
12
|
-
|
12
|
+
|
13
13
|
# Copies the migration template to db/migrate.
|
14
14
|
def copy_acidic_job_runs_migration_files
|
15
15
|
migration_template "create_acidic_job_runs_migration.rb.erb",
|
16
16
|
"db/migrate/create_acidic_job_runs.rb",
|
17
17
|
migration_version: migration_version
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
protected
|
21
|
-
|
21
|
+
|
22
22
|
def migration_version
|
23
23
|
"[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
-
end
|
27
|
+
end
|