Skip to content

Commit

Permalink
[api] lock events for modification
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianschroeter committed Apr 15, 2016
1 parent 659a3ad commit c4bca01
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
4 changes: 3 additions & 1 deletion src/api/app/jobs/cleanup_events.rb
@@ -1,5 +1,7 @@
class CleanupEvents < ActiveJob::Base
def perform
Event::Base.where(project_logged: true, queued: true, undone_jobs: 0).delete_all
Event::Base.transaction do
Event::Base.where(project_logged: true, queued: true, undone_jobs: 0).lock(true).delete_all
end
end
end
22 changes: 12 additions & 10 deletions src/api/app/jobs/project_log_rotate.rb
Expand Up @@ -5,18 +5,20 @@ def perform

# First, skip old events and mark them all as "logged" (even those that
# don't belong to the event_classes)
Event::Base.where(project_logged: false).where(["created_at < ?", oldest_date]).update_all(project_logged: true)
Event::Base.transaction do
Event::Base.where(project_logged: false).where(["created_at < ?", oldest_date]).lock(true).update_all(project_logged: true)

# Create log entries based on the events (but this time, only those in event_classes)
event_classes.each do |event_class|
event_class.where(project_logged: false).find_in_batches batch_size: 10000 do |group|
processed_ids = []
group.each do |event|
entry = ProjectLogEntry.create_from(event)
# Mark the event as logged if the entry was succesfully created
processed_ids << event.id if entry.id
# Create log entries based on the events (but this time, only those in event_classes)
event_classes.each do |event_class|
event_class.where(project_logged: false).find_in_batches batch_size: 10000 do |group|
processed_ids = []
group.each do |event|
entry = ProjectLogEntry.create_from(event)
# Mark the event as logged if the entry was succesfully created
processed_ids << event.id if entry.id
end
Event::Base.where(id: processed_ids).update_all(project_logged: true)
end
Event::Base.where(id: processed_ids).update_all(project_logged: true)
end
end

Expand Down
2 changes: 1 addition & 1 deletion src/api/app/jobs/send_event_emails.rb
Expand Up @@ -5,7 +5,7 @@ class SendEventEmails
attr_accessor :event

def perform
Event::Base.where(mails_sent: false).order(:created_at).limit(1000).each do |event|
Event::Base.where(mails_sent: false).order(:created_at).limit(1000).lock(true).each do |event|
event.mails_sent = true
begin
event.save!
Expand Down

0 comments on commit c4bca01

Please sign in to comment.