fix performance regression in gradebook csv
fixes CNVS-5492 test plan (external): - download the gradebook csv with and without sis ids - it should still work test plan (internal): - run gradebook csv with sis ids from the console and watch the db queries - it should not load quiz submissions - it should not load the account once per student Change-Id: I2665041d8733856d8b32547b49d5af5b69292076 Reviewed-on: https://gerrit.instructure.com/20007 Tested-by: Jenkins <jenkins@instructure.com> Reviewed-by: Cameron Matheson <cameron@instructure.com> Reviewed-by: Stanley Stuart <stanley@instructure.com> QA-Review: Amber Taniuchi <amber@instructure.com> Product-Review: Simon Williams <simon@instructure.com>
This commit is contained in:
parent
450d433167
commit
b35b70580d
|
@ -1376,8 +1376,12 @@ class Course < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def gradebook_to_csv(options = {})
|
||||
# user: used for name in csv output
|
||||
# course_section: used for display_name in csv output
|
||||
# user > pseudonyms: used for sis_user_id/unique_id if options[:include_sis_id]
|
||||
# user > pseudonyms > account: used in find_pseudonym_for_account > works_for_account
|
||||
includes = [:user, :course_section]
|
||||
includes = {:user => :pseudonyms, :course_section => []} if options[:include_sis_id]
|
||||
includes = {:user => {:pseudonyms => :account}, :course_section => []} if options[:include_sis_id]
|
||||
scope = options[:user] ? self.enrollments_visible_to(options[:user]) : self.student_enrollments
|
||||
student_enrollments = scope.includes(includes).order_by_sortable_name # remove duplicate enrollments for students enrolled in multiple sections
|
||||
student_enrollments = student_enrollments.all.uniq_by(&:user_id)
|
||||
|
|
|
@ -44,7 +44,7 @@ class GradeCalculator
|
|||
|
||||
# recomputes the scores and saves them to each user's Enrollment
|
||||
def compute_scores
|
||||
@submissions = @course.submissions.for_user(@user_ids)
|
||||
@submissions = @course.submissions.except(:includes).for_user(@user_ids)
|
||||
submissions_by_user = @submissions.group_by(&:user_id)
|
||||
@user_ids.map do |user_id|
|
||||
user_submissions = submissions_by_user[user_id] || []
|
||||
|
|
Loading…
Reference in New Issue