Closed remoteweb closed 1 year ago
I used rails_event_store version 2.1 and the problem disappeared.
Something might have changed with the deserialize method of Rails Event Store gem and it causes errors in Active Event Store job execution.
Full error backtrace
ERROR: Error performing OnHubCompanyUpdated::SyncCompany::SubscriberJob (Job ID: 6f094d2d-a383-4c48-94dc-00f63ada7221) from Sidekiq(events_subscribers) in 185291.56ms: ArgumentError (missing keywords: :event_type, :event_id, :data, :metadata):
/Users/arisxama/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/ruby_event_store-2.11.1/lib/ruby_event_store/client.rb:273:in `deserialize'
/Users/arisxama/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/active_event_store-1.0.2/lib/active_event_store/subscriber_job.rb:42:in `perform'
...
...
2023-08-18T12:07:51.359Z pid=34729 tid=4b6t class=OnHubCompanyUpdated::SyncCompany::SubscriberJob jid=76a3177eb4a9071d664c81b1 elapsed=185.342 INFO: fail
The problem is this part of code here
# .rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/active_event_store-1.0.2/lib/active_event_store/subscriber_job.rb#41
event = event_store.deserialize(**payload, serializer: ActiveEventStore.config.serializer)
Payload from Rails Event Store 2.11.1 is
{"event_id"=>"7eac442a-6966-4241-a33f-419dd82f3a50",
"data"=>"\"{\\\"company_guid\\\":\\\"UUID\\\"}\"",
"metadata"=>"\"{\\\"timestamp\\\":\\\"2023-08-18 12:58:27 UTC\\\",\\\"valid_at\\\":\\\"2023-08-18 12:58:27 UTC\\\",\\\"correlation_id\\\":\\\"1a56cc7f-fa95-47d7-96bb-36db02bd8181\\\"}\"",
"event_type"=>"hub_company_updated",
"timestamp"=>"2023-08-18T12:58:27.114715Z",
"valid_at"=>"2023-08-18T12:58:27.114715Z"}
while Payload from Rails Event Store 2.1 was
{:event_id=>"7eac442a-6966-4241-a33f-419dd82f3a50",
:data=>"\"{\\\"company_guid\\\":\\\"UUID\\\"}\"",
:metadata=>"\"{\\\"timestamp\\\":\\\"2023-08-18 12:58:27 UTC\\\",\\\"valid_at\\\":\\\"2023-08-18 12:58:27 UTC\\\",\\\"correlation_id\\\":\\\"1a56cc7f-fa95-47d7-96bb-36db02bd8181\\\"}\"",
:event_type=>"hub_company_updated",
:timestamp=>"2023-08-18T12:58:27.114715Z",
:valid_at=>"2023-08-18T12:58:27.114715Z"}
due to this part of code that changed in Rails Event Store gem
# .rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rails_event_store-2.11.1/lib/rails_event_store/active_job_scheduler.rb#12
klass.perform_later(record.serialize(serializer).to_h.transform_keys(&:to_s))
# .rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rails_event_store-2.1.0/lib/rails_event_store/active_job_scheduler.rb#12
klass.perform_later(record.serialize(serializer).to_h)
Thanks for the detailed report. Will take a look later this week.
Fixed and released in 1.1.0.
What did you do?
Implementing active event store for async events with sidekiq as ActiveJob adapter.
What did you expect to happen?
The SubscriberJob to execute properly
What actually happened?
ArgumentError (missing keywords: :event_type, :event_id, :data, :metadata): upon subscriber sidekiq job execution
Additional context
Environment
Ruby Version: 3.2.2
Framework Version (Rails, whatever): Rails 7.0.7
Active Event Store Version: active_event_store (1.0.2)
Rails Event Store Version: rails_event_store (2.11.1)
Sidekiq Version: sidekiq (7.1.2)