1. 18 Sep, 2015 1 commit
  2. 09 Jul, 2015 1 commit
    • Optimize grading/progress page to reduce database queries (cache max scores). · 79de77cf
      The progress page did a number of things that make performance terrible for
      courses with large numbers of problems, particularly if those problems are
      customresponse CapaModule problems that need to be executed via codejail.
      
      The grading code takes pains to not instantiate student state and execute the
      problem code. If a student has answered the question, the max score is stored
      in StudentModule. However, if the student hasn't attempted the question yet, we
      have to run the problem code just to call .max_score() on it. This is necessary
      in grade() if the student has answered other problems in the assignment (so we
      can know what to divide by). This is always necessary to know in
      progress_summary() because we list out every problem there. Code execution can
      be especially slow if the problems need to invoke codejail.
      
      To address this, we create a MaxScoresCache that will cache the max raw score
      possible for every problem. We select the cache keys so that it will
      automatically become invalidated when a new version of the course is published.
      
      The fundamental assumption here is that a problem cannot have two different
      max score values for two unscored students. A problem *can* score two students
      differently such that they have different max scores. So Carlos can have 2/3 on
      a problem, while Lyla gets 3/4. But if neither Carlos nor Lyla has ever
      interacted with the problem (i.e. they're just seeing it on their progress
      page), they must both see 0/4 -- it cannot be the case that Carlos sees 0/3 and
      Lyla sees 0/4.
      
      We used to load all student state into two separate FieldDataCache instances,
      after which we do a bunch of individual queries for scored items. Part of this
      split-up was done because of locking problems, but I think we might have gotten
      overzealous with our manual transaction hammer.
      
      In this commit, we consolidate all state access in grade() and progress()
      to use one shared FieldDataCache. We also use a filter so that we only pull
      back StudentModule state for things that might possibly affect the grade --
      items that either have scores or have children.
      
      Because some older XModules do work in their __init__() methods (like Video),
      instantiating them takes time, particularly on large courses. This commit also
      changes the code that fetches the grading_context to filter out children that
      can't possibly affect the grade.
      
      Finally, we introduce a ScoresClient that also tries to fetch score
      information all at once, instead of in separate queries. Technically, we are
      fetching this information redundantly, but that's because the state and score
      interfaces are being teased apart as we move forward. Still, this only
      amounts to one extra SQL query, and has very little impact on performance
      overall.
      
      Much thanks to @adampalay -- his hackathon work in #7168 formed the basis of
      this.
      
      https://openedx.atlassian.net/browse/CSM-17
      David Ormsbee committed
  3. 20 May, 2015 5 commits
  4. 07 May, 2015 1 commit
  5. 16 Apr, 2015 1 commit
  6. 15 Apr, 2015 1 commit
  7. 17 Mar, 2015 1 commit
  8. 16 Mar, 2015 2 commits
  9. 10 Mar, 2015 1 commit
  10. 06 Mar, 2015 1 commit
  11. 04 Feb, 2015 1 commit
  12. 13 Dec, 2014 1 commit
  13. 01 Dec, 2014 2 commits
  14. 10 Nov, 2014 1 commit
  15. 06 Nov, 2014 1 commit
  16. 09 May, 2014 1 commit
  17. 06 May, 2014 1 commit
    • Make course ids and usage ids opaque to LMS and Studio [partial commit] · 9811926d
      This commit updates lms/djangoapps/courseware.
      
      These keys are now objects with a limited interface, and the particular
      internal representation is managed by the data storage layer (the
      modulestore).
      
      For the LMS, there should be no outward-facing changes to the system.
      The keys are, for now, a change to internal representation only. For
      Studio, the new serialized form of the keys is used in urls, to allow
      for further migration in the future.
      
      Co-Author: Andy Armstrong <andya@edx.org>
      Co-Author: Christina Roberts <christina@edx.org>
      Co-Author: David Baumgold <db@edx.org>
      Co-Author: Diana Huang <dkh@edx.org>
      Co-Author: Don Mitchell <dmitchell@edx.org>
      Co-Author: Julia Hansbrough <julia@edx.org>
      Co-Author: Nimisha Asthagiri <nasthagiri@edx.org>
      Co-Author: Sarina Canelake <sarina@edx.org>
      
      [LMS-2370]
      Calen Pennington committed
  18. 28 Feb, 2014 1 commit
  19. 09 Jan, 2014 1 commit
  20. 26 Nov, 2013 1 commit
  21. 06 Sep, 2013 1 commit
  22. 27 Aug, 2013 1 commit
  23. 18 Jul, 2013 2 commits
  24. 20 Jun, 2013 1 commit
  25. 13 Jun, 2013 1 commit
  26. 18 Apr, 2013 1 commit
  27. 04 Apr, 2013 1 commit
  28. 05 Mar, 2013 1 commit
  29. 01 Feb, 2013 1 commit
  30. 24 Jan, 2013 2 commits
  31. 23 Jan, 2013 1 commit
  32. 04 Jan, 2013 1 commit