Skip to content

Commit 04a059f

Browse files
committed
Refactor submission processor
1 parent b5a6cf9 commit 04a059f

File tree

5 files changed

+21
-18
lines changed

5 files changed

+21
-18
lines changed

app/background_tasks/submission_long_queue_processor_task.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
require 'submission_processor'
44

5+
# In case submission processor task fails, this task will help with sending
6+
# submissions to sandbox. This task uses reverse order in order to avoid
7+
# sending the same submission to sandbox multiple times
58
class SubmissionLongQueueProcessorTask
69
def initialize
710
@processor = SubmissionProcessor.new

app/background_tasks/submission_reprocessor_task.rb renamed to app/background_tasks/submission_processor_task.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
require 'submission_processor'
44

5-
class SubmissionReprocessorTask
5+
class SubmissionProcessorTask
66
def initialize
77
@processor = SubmissionProcessor.new
88
end
99

1010
def run
11-
@processor.reprocess_timed_out_submissions
11+
@processor.process_some_submissions
1212
end
1313

1414
def wait_delay

lib/submission_processor.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ def process_submission(submission)
1414
submission.processing_began_at = Time.now
1515
submission.times_sent_to_sandbox += 1
1616
submission.save!
17+
Rails.logger.info "Submission #{submission.id} sent to sandbox."
1718
end
1819
end
1920

2021
# Called periodically by script/background_daemon.
21-
# It tries to resend submissions to a sandbox if enough time has passed
22-
# since the last attempt.
23-
def reprocess_timed_out_submissions
24-
Submission.to_be_reprocessed.limit([RemoteSandbox.total_capacity, 2].min).each do |submission|
25-
Rails.logger.info "Attempting to reprocess submission #{submission.id}"
22+
# It tries to send submissions to a sandbox
23+
def process_some_submissions
24+
Submission.to_be_reprocessed.limit(2).each do |submission|
25+
Rails.logger.info "Attempting to process submission #{submission.id}"
2626

2727
if submission.times_sent_to_sandbox < Submission.max_attempts_at_processing
2828
process_submission(submission)

spec/integration/admin_usecases_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454
click_button 'Rerun submission'
5555
expect(page).to have_content('Rerun scheduled')
56-
SubmissionProcessor.new.reprocess_timed_out_submissions
56+
SubmissionProcessor.new.process_some_submissions
5757
wait_for_submission_to_be_processed
5858

5959
expect(page).not_to have_content('some funny error')

spec/lib/submission_processor_spec.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ def expect_no_processing
2020
@sub.processing_tried_at = Time.now - Submission.processing_retry_interval - 1.second
2121
@sub.save!
2222
expect_processing
23-
SubmissionProcessor.new.reprocess_timed_out_submissions
23+
SubmissionProcessor.new.process_some_submissions
2424
end
2525

2626
it 'should not reprocess when processing was just attempted' do
2727
@sub.processing_tried_at = Time.now
2828
@sub.save!
2929
expect_no_processing
30-
SubmissionProcessor.new.reprocess_timed_out_submissions
30+
SubmissionProcessor.new.process_some_submissions
3131
end
3232

3333
it 'should reprocess even if a sandbox has received the job a long time ago' do
3434
@sub.processing_tried_at = Time.now - Submission.processing_retry_interval - 1.second
3535
@sub.processing_began_at = Time.now - Submission.processing_resend_interval - 1.second
3636
@sub.save!
3737
expect_processing
38-
SubmissionProcessor.new.reprocess_timed_out_submissions
38+
SubmissionProcessor.new.process_some_submissions
3939
end
4040

4141
it 'should not reprocess when a sandbox has received the job a reasonable time ago' do
@@ -44,7 +44,7 @@ def expect_no_processing
4444
expect(@sub.processing_began_at).to be < @sub.processing_tried_at
4545
@sub.save!
4646
expect_no_processing
47-
SubmissionProcessor.new.reprocess_timed_out_submissions
47+
SubmissionProcessor.new.process_some_submissions
4848
end
4949

5050
context 'when the submission has been reprocessed too many times' do
@@ -55,12 +55,12 @@ def expect_no_processing
5555

5656
it 'should not reprocess it any more' do
5757
expect_no_processing
58-
SubmissionProcessor.new.reprocess_timed_out_submissions
58+
SubmissionProcessor.new.process_some_submissions
5959
end
6060

6161
it 'should mark it as processed and having an error' do
6262
user = FactoryGirl.create :user
63-
SubmissionProcessor.new.reprocess_timed_out_submissions
63+
SubmissionProcessor.new.process_some_submissions
6464
@sub.reload
6565
expect(@sub).to be_processed
6666
expect(@sub.pretest_error).not_to be_empty
@@ -78,13 +78,13 @@ def expect_no_processing
7878
original_count = Submission.max_attempts_at_processing - 1
7979
@sub.times_sent_to_sandbox = original_count
8080
@sub.save!
81-
SubmissionProcessor.new.reprocess_timed_out_submissions
81+
SubmissionProcessor.new.process_some_submissions
8282
@sub.reload
8383
expect(@sub.times_sent_to_sandbox).to eq(original_count + 1)
8484
end
8585

8686
it 'should update the processing_tried_at and processing_began_at timestamps' do
87-
SubmissionProcessor.new.reprocess_timed_out_submissions
87+
SubmissionProcessor.new.process_some_submissions
8888
@sub.reload
8989
expect(@sub.processing_tried_at).to be > Time.now - 5.seconds
9090
expect(@sub.processing_began_at).to be > Time.now - 5.seconds
@@ -100,13 +100,13 @@ def expect_no_processing
100100
original_count = Submission.max_attempts_at_processing - 1
101101
@sub.times_sent_to_sandbox = original_count
102102
@sub.save!
103-
SubmissionProcessor.new.reprocess_timed_out_submissions
103+
SubmissionProcessor.new.process_some_submissions
104104
@sub.reload
105105
expect(@sub.times_sent_to_sandbox).to eq(original_count)
106106
end
107107

108108
it 'should update the processing_tried_at timestamp but not processing_began_at' do
109-
SubmissionProcessor.new.reprocess_timed_out_submissions
109+
SubmissionProcessor.new.process_some_submissions
110110
@sub.reload
111111
expect(@sub.processing_tried_at).to be > Time.now - 5.seconds
112112
expect(@sub.processing_began_at).to be_nil

0 commit comments

Comments
 (0)