eventsimple 1.1.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +3 -3
- data/README.md +0 -5
- data/lib/eventsimple/active_job/arguments.rb +20 -0
- data/lib/eventsimple/configuration.rb +0 -7
- data/lib/eventsimple/reactor.rb +5 -22
- data/lib/eventsimple/version.rb +1 -1
- data/lib/eventsimple.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 989aab149125d77a97510193a1905233eef5714a798a821e14fa7697247b5403
|
4
|
+
data.tar.gz: 7dc3276c03f6ab9617733ef292297ba2e5dc9b414c5d221621b2bed5a8635151
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a378b62e0dc1e50540b85f002b06d5a8ff8b17d338b9b7a860d97f630538c919dde28bd1ff44c1d0ef62e29044e26f11089115e03bbd08545c60566fd893a9c5
|
7
|
+
data.tar.gz: 34cd12770a08ff80b4c6e7ee6e01e0c8e347415d7303ee646d4328a734ca2214180cd64e223e38fe7bae1bb6f39a702aa44ad2dc9e440677cd42e3ce1424618b
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## Unreleased
|
8
8
|
|
9
|
+
## 1.1.2 - 2023-06-22
|
10
|
+
### Changed
|
11
|
+
- Fix exception noise generated by early global_id desrialization
|
12
|
+
|
13
|
+
## 1.1.1 - 2023-06-19
|
14
|
+
### Changed
|
15
|
+
- Remove active_job_parent_klass config introduced in 1.1.0. There isn't a usecase for it yet,
|
16
|
+
and it was causing loading issues.
|
17
|
+
|
9
18
|
## 1.1.0 - 2023-06-11
|
10
19
|
### Changed
|
11
20
|
- Reactors now use ActiveJob instead of Sidekiq directly. This allows for more
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
eventsimple (1.1.
|
4
|
+
eventsimple (1.1.2)
|
5
5
|
dry-struct (~> 1.6)
|
6
6
|
dry-types (~> 1.7)
|
7
7
|
pg (~> 1.4)
|
@@ -159,7 +159,7 @@ GEM
|
|
159
159
|
mini_mime (1.1.2)
|
160
160
|
minitest (5.18.0)
|
161
161
|
nenv (0.3.0)
|
162
|
-
net-imap (0.3.
|
162
|
+
net-imap (0.3.6)
|
163
163
|
date
|
164
164
|
net-protocol
|
165
165
|
net-pop (0.1.2)
|
@@ -284,7 +284,7 @@ GEM
|
|
284
284
|
rubocop (>= 0.53.0)
|
285
285
|
ruby-progressbar (1.13.0)
|
286
286
|
shellany (0.0.1)
|
287
|
-
sidekiq (7.1.
|
287
|
+
sidekiq (7.1.2)
|
288
288
|
concurrent-ruby (< 2)
|
289
289
|
connection_pool (>= 2.3.0)
|
290
290
|
rack (>= 2.2.4)
|
data/README.md
CHANGED
@@ -74,11 +74,6 @@ Setup an initializer in `config/initializers/eventsimple.rb`:
|
|
74
74
|
# Defaults to `Eventsimple::Metadata`
|
75
75
|
config.metadata_klass = 'Eventsimple::Metadata'
|
76
76
|
|
77
|
-
# Optional: Reactors inherit from an ActiveJob base class.
|
78
|
-
# Set the parent class for reactors.
|
79
|
-
# Defaults to ActiveJob::Base.
|
80
|
-
config.active_job_parent_klass = 'ApplicationJob'
|
81
|
-
|
82
77
|
# Optional: When using an ActiveJob adapter that writes to a different data store like redis,
|
83
78
|
# it is possible that the reactor is executed before the transaction persisting the event is committed. This can result in noisy errors when using processors like Sidekiq.
|
84
79
|
# Enable this option to retry the reactor inline if the event is not found.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'active_job/arguments'
|
2
|
+
|
3
|
+
module ActiveJob
|
4
|
+
module Arguments
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def deserialize_global_id(hash)
|
8
|
+
# For non database based processors like sidekiq, the reactor may trigger before the
|
9
|
+
# transaction is committed. Attempt to wait for the transaction to be commited before
|
10
|
+
# running the reactor. This is not a perfect solution, but it's better than nothing.
|
11
|
+
if Eventsimple.configuration.retry_reactor_on_record_not_found
|
12
|
+
Retriable.with_context(:reactor) do
|
13
|
+
ApplicationRecord.uncached { GlobalID::Locator.locate hash[GLOBALID_KEY] }
|
14
|
+
end
|
15
|
+
else
|
16
|
+
GlobalID::Locator.locate hash[GLOBALID_KEY]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,7 +4,6 @@ module Eventsimple
|
|
4
4
|
class Configuration
|
5
5
|
attr_reader :max_concurrency_retries
|
6
6
|
attr_writer :metadata_klass
|
7
|
-
attr_writer :active_job_parent_klass
|
8
7
|
attr_accessor :retry_reactor_on_record_not_found
|
9
8
|
|
10
9
|
attr_accessor :ui_visible_models
|
@@ -13,7 +12,6 @@ module Eventsimple
|
|
13
12
|
@dispatchers = []
|
14
13
|
@max_concurrency_retries = 2
|
15
14
|
@metadata_klass = 'Eventsimple::Metadata'
|
16
|
-
@active_job_parent_klass = 'ActiveJob::Base'
|
17
15
|
@retry_reactor_on_record_not_found = false
|
18
16
|
|
19
17
|
@ui_visible_models = [] # internal use only
|
@@ -34,7 +32,6 @@ module Eventsimple
|
|
34
32
|
end
|
35
33
|
|
36
34
|
# rubocop:disable Naming/MemoizedInstanceVariableName
|
37
|
-
|
38
35
|
def dispatchers
|
39
36
|
@dispatchers_klass_consts ||= @dispatchers.map(&:constantize)
|
40
37
|
end
|
@@ -42,10 +39,6 @@ module Eventsimple
|
|
42
39
|
def metadata_klass
|
43
40
|
@metadata_klass_const ||= @metadata_klass.constantize
|
44
41
|
end
|
45
|
-
|
46
|
-
def active_job_parent_klass
|
47
|
-
@active_job_parent_klass_const ||= @active_job_parent_klass.constantize
|
48
|
-
end
|
49
42
|
# rubocop:enable Naming/MemoizedInstanceVariableName
|
50
43
|
end
|
51
44
|
end
|
data/lib/eventsimple/reactor.rb
CHANGED
@@ -1,32 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Eventsimple
|
4
|
-
class Reactor <
|
4
|
+
class Reactor < ActiveJob::Base # rubocop:disable Rails/ApplicationJob
|
5
5
|
queue_as :eventsimple
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
discard_on ActiveJob::DeserializationError do |job, error|
|
8
|
+
Rails.logger.warn("Event #{job.arguments.first} not found for reactor: #{self.class}")
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
reactor_class = job.arguments.second
|
14
|
-
|
15
|
-
# For non database based processors like sidekiq, the reactor may trigger before the
|
16
|
-
# transaction is committed. Attempt to wait for the transaction to be commited before
|
17
|
-
# running the reactor. This is not a perfect solution, but it's better than nothing.
|
18
|
-
if Eventsimple.configuration.retry_reactor_on_record_not_found
|
19
|
-
begin
|
20
|
-
Retriable.with_context(:reactor) do
|
21
|
-
ApplicationRecord.uncached { GlobalID::Locator.locate(event_global_id) }
|
22
|
-
end
|
23
|
-
rescue ActiveRecord::RecordNotFound
|
24
|
-
Rails.logger.error("Event #{event_global_id} not found for reactor: #{reactor_class}")
|
25
|
-
return
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
block.call
|
11
|
+
def perform(event)
|
12
|
+
call(event)
|
30
13
|
end
|
31
14
|
end
|
32
15
|
end
|
data/lib/eventsimple/version.rb
CHANGED
data/lib/eventsimple.rb
CHANGED
@@ -13,6 +13,7 @@ require 'sidekiq'
|
|
13
13
|
|
14
14
|
require 'dry_types'
|
15
15
|
|
16
|
+
require 'eventsimple/active_job/arguments'
|
16
17
|
require 'eventsimple/configuration'
|
17
18
|
require 'eventsimple/message'
|
18
19
|
require 'eventsimple/data_type'
|
@@ -20,6 +21,7 @@ require 'eventsimple/metadata_type'
|
|
20
21
|
require 'eventsimple/metadata'
|
21
22
|
require 'eventsimple/dispatcher'
|
22
23
|
require 'eventsimple/event_dispatcher'
|
24
|
+
require 'eventsimple/reactor'
|
23
25
|
require 'eventsimple/reactor_worker'
|
24
26
|
require 'eventsimple/invalid_transition'
|
25
27
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventsimple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zulfiqar Ali
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-struct
|
@@ -253,6 +253,7 @@ files:
|
|
253
253
|
- eventsimple.gemspec
|
254
254
|
- lib/dry_types.rb
|
255
255
|
- lib/eventsimple.rb
|
256
|
+
- lib/eventsimple/active_job/arguments.rb
|
256
257
|
- lib/eventsimple/configuration.rb
|
257
258
|
- lib/eventsimple/data_type.rb
|
258
259
|
- lib/eventsimple/dispatcher.rb
|