otwarchive-symphonyarchive/app/jobs/readings_job.rb

38 lines
872 B
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class ReadingsJob < RedisSetJob
queue_as :readings
def self.base_key
"Reading:new"
end
def self.job_size
ArchiveConfig.READING_JOB_SIZE
end
def self.batch_size
ArchiveConfig.READING_BATCH_SIZE
end
def perform_on_batch(batch)
# Each item in the batch is an array of arguments encoded as a JSON:
parsed_batch = batch.map do |json|
ActiveSupport::JSON.decode(json)
end
# Sort to try to reduce deadlocks.
#
# The first argument is user_id, the third argument is work_id:
sorted_batch = parsed_batch.sort_by do |args|
[args.first.to_i, args.third.to_i]
end
# Finally, start a transaction and call Reading.reading_object to write the
# information to the database:
Reading.transaction do
sorted_batch.each do |args|
Reading.reading_object(*args)
end
end
end
end