Fix Sidekiq warnings about JSON serialization (#17381)

* Fix Sidekiq warnings about JSON serialization

This occurs on every symbol argument we pass, and every symbol key in hashes,
because Sidekiq expects strings instead.

See https://github.com/mperham/sidekiq/pull/5071

We do not need to change how workers parse their arguments because this has
not changed and we were already converting to symbols adequately or using
`with_indifferent_access`.

* Set Sidekiq to raise on unsafe arguments in test mode

In order to more easily catch issues that would produce warnings in production
code.
This commit is contained in:
Claire 2022-01-28 00:43:56 +01:00 committed by GitHub
parent 14c69a535b
commit 03d59340da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 25 additions and 22 deletions

View file

@ -15,7 +15,7 @@ class AccountStatusesCleanupService < BaseService
account_policy.statuses_to_delete(budget, cutoff_id, account_policy.last_inspected).reorder(nil).find_each(order: :asc) do |status|
status.discard
RemovalWorker.perform_async(status.id, redraft: false)
RemovalWorker.perform_async(status.id, { 'redraft' => false })
num_deleted += 1
last_deleted = status.id
end

View file

@ -266,7 +266,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
end
def broadcast_updates!
::DistributionWorker.perform_async(@status.id, update: true)
::DistributionWorker.perform_async(@status.id, { 'update' => true })
end
def queue_poll_notifications!

View file

@ -59,7 +59,7 @@ class FanOutOnWriteService < BaseService
def notify_mentioned_accounts!
@status.active_mentions.where.not(id: @options[:silenced_account_ids] || []).joins(:account).merge(Account.local).select(:id, :account_id).reorder(nil).find_in_batches do |mentions|
LocalNotificationWorker.push_bulk(mentions) do |mention|
[mention.account_id, mention.id, 'Mention', :mention]
[mention.account_id, mention.id, 'Mention', 'mention']
end
end
end
@ -67,7 +67,7 @@ class FanOutOnWriteService < BaseService
def deliver_to_all_followers!
@account.followers_for_local_distribution.select(:id).reorder(nil).find_in_batches do |followers|
FeedInsertWorker.push_bulk(followers) do |follower|
[@status.id, follower.id, :home, update: update?]
[@status.id, follower.id, 'home', { 'update' => update? }]
end
end
end
@ -75,7 +75,7 @@ class FanOutOnWriteService < BaseService
def deliver_to_lists!
@account.lists_for_local_distribution.select(:id).reorder(nil).find_in_batches do |lists|
FeedInsertWorker.push_bulk(lists) do |list|
[@status.id, list.id, :list, update: update?]
[@status.id, list.id, 'list', { 'update' => update? }]
end
end
end
@ -83,7 +83,7 @@ class FanOutOnWriteService < BaseService
def deliver_to_mentioned_followers!
@status.mentions.joins(:account).merge(@account.followers_for_local_distribution).select(:id, :account_id).reorder(nil).find_in_batches do |mentions|
FeedInsertWorker.push_bulk(mentions) do |mention|
[@status.id, mention.account_id, :home, update: update?]
[@status.id, mention.account_id, 'home', { 'update' => update? }]
end
end
end

View file

@ -68,7 +68,7 @@ class FollowService < BaseService
follow_request = @source_account.request_follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])
if @target_account.local?
LocalNotificationWorker.perform_async(@target_account.id, follow_request.id, follow_request.class.name, :follow_request)
LocalNotificationWorker.perform_async(@target_account.id, follow_request.id, follow_request.class.name, 'follow_request')
elsif @target_account.activitypub?
ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), @source_account.id, @target_account.inbox_url)
end
@ -79,7 +79,7 @@ class FollowService < BaseService
def direct_follow!
follow = @source_account.follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])
LocalNotificationWorker.perform_async(@target_account.id, follow.id, follow.class.name, :follow)
LocalNotificationWorker.perform_async(@target_account.id, follow.id, follow.class.name, 'follow')
MergeWorker.perform_async(@target_account.id, @source_account.id)
follow

View file

@ -76,7 +76,7 @@ class ImportService < BaseService
if presence_hash[target_account.acct]
items.delete(target_account.acct)
extra = presence_hash[target_account.acct][1]
Import::RelationshipWorker.perform_async(@account.id, target_account.acct, action, extra)
Import::RelationshipWorker.perform_async(@account.id, target_account.acct, action, extra.stringify_keys)
else
Import::RelationshipWorker.perform_async(@account.id, target_account.acct, undo_action)
end
@ -87,7 +87,7 @@ class ImportService < BaseService
tail_items = items - head_items
Import::RelationshipWorker.push_bulk(head_items + tail_items) do |acct, extra|
[@account.id, acct, action, extra]
[@account.id, acct, action, extra.stringify_keys]
end
end

View file

@ -47,7 +47,7 @@ class ReblogService < BaseService
reblogged_status = reblog.reblog
if reblogged_status.account.local?
LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name, :reblog)
LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name, 'reblog')
elsif reblogged_status.account.activitypub? && !reblogged_status.account.following?(reblog.account)
ActivityPub::DeliveryWorker.perform_async(build_json(reblog), reblog.account_id, reblogged_status.account.inbox_url)
end

View file

@ -143,7 +143,7 @@ class ResolveAccountService < BaseService
def queue_deletion!
@account.suspend!(origin: :remote)
AccountDeletionWorker.perform_async(@account.id, reserve_username: false, skip_activitypub: true)
AccountDeletionWorker.perform_async(@account.id, { 'reserve_username' => false, 'skip_activitypub' => true })
end
def lock_options