Skip to content
Snippets Groups Projects
  1. Mar 11, 2021
  2. Mar 10, 2021
  3. Mar 09, 2021
    • David Ormsbee's avatar
      fix: add index to courseware_studentmodule for report performance. · 4c3fd769
      David Ormsbee authored
      = IMPORTANT WARNING =
      
      This can be a VERY EXPENSIVE MIGRATION which may take hours or
      days to run depending on the size of the courseware_studentmodule
      table on your site. Depending on your database, it may also lock
      this table, causing courseware to be non-functional during that
      time.
      
      If you want to run this migration manually in a more controlled
      way (separate from your release pipeline), the SQL needed is:
      
        CREATE INDEX `courseware_stats` ON `courseware_studentmodule`
           (`module_id`, `grade`, `student_id`);
      
      You can then fake the migration:
        https://docs.djangoproject.com/en/2.2/ref/django-admin/#cmdoption-migrate-fake
      
      = Motivation and Background =
      
      TLDR: This adds an index that will speed up reports like the
      Problem Grade Report. This fixes a performance regression that
      was unintentionally introduced in 25da206c.
      
      I'm capturing the entire saga below, in case Open edX operators
      need to dig into it.
      
      The tale begins in November of 2012 (yes, seriously). We had an
      inline analytics feature that would display a histogram to course
      staff by each problem in the LMS, detailing how students did on
      that problem (e.g. 80% got 2 points, 10% got 1 point, 10% got 0
      points). The courseware_studentmodule table already had an index
      on the module_id (a.k.a. module_state_key), but because there
      were 100K+ students that had student state for some problems,
      the generation of those histograms was still extremely expensive.
      During U.S. Thanksgiving weekend in late November of 2012, that
      load started causing operational failures on edx.org.
      
      As an emergency measure, I manually added a composite index for
      (module_id, grade, student_id) on courseware_studentmodule in
      order to stabilize the courseware on edx.org. I did _not_ follow
      up properly and add it in a migration file. Later on, the inline
      analytics feature was removed entirely, so the index was considered
      redundant (but again, it was not properly cleaned up).
      
      Various reports were created over the years, some of which
      relied on having an index for module_id. These ran fine because
      there had long been an index for that field specifically.
      
      In 2018, the courseware_studentmodule table for edx.org ran into
      the 2 TB size limit that our old RDS instance had. We had a fair
      amount of monitoring for various limits that we thought we might
      run into, but the per-table limit took us by surprise. The Devops/
      SRE person fielding that issue needed to free up space in a hurry
      in order to make the courseware functional again. Examining the
      database itself, he noticed that we had a module_id index that was
      technically redundant because the composite index of (module_id,
      grade, student_id) would cover queries that would otherwise use it.
      Again, as an emergency measure, he dropped the index on module_id
      in order to free up a little space and buy enough time to do a
      proper move of the database to Aurora.
      
      Devops-of-2018 being more disciplined than me-of-2012, the index
      on module_id was removed in 25da206c. The intention was to make it
      so that the state of the code would match what was live on edx.org.
      But because the composite index was added in an ad hoc way, what
      that really meant was that now queries involving module_id were
      _only_ indexed by the (module_id, grade, student_id) composite
      index that existed only on edx.org and no other Open edX instances.
      
      We didn't realize this issue until months later. @blarghmatey
      created an index to re-add the index for module_id:
      
        https://github.com/edx/edx-platform/pull/20885
      
      The reason why we didn't accept this immediately is because
      migrations for this table are very operationally risky and take
      days to run. Faking this migration would have put edx.org even
      more out of sync with the Open edX repo. Complicating this
      somewhat was the fact that some folks still seem to be running a
      variant of the inline analytics on their fork.
      
      So in the end, we're going forward with this migration that brings
      the code fully into sync with indexes on edx.org and covers the
      obscure inline analytics histogram use case, while still covering
      the module_id index needed for the fast generation of certain
      reports that focus on a single problem.
      
      Sorry folks.
      4c3fd769
    • adeel khan's avatar
    • Dillon Dumesnil's avatar
      AA-513: Reset segment state if anon user and there is a segment user id · 16d81f6e
      Dillon Dumesnil authored
      If we are seeing an anonymous user, but the segment user id is still
      set, we believe the segment user id is coming from a different user on
      the same machine. This will make sure we clear out that storage and
      then the indentify call will make a new anonymous id
    • Adeel Khan's avatar
      Fix button/title text for; · 725cd3f0
      Adeel Khan authored
      1) Account activation email.
      2) Password reset email.
      3) Password reset success.
      
      VAN-272
      725cd3f0
    • Justin Hynes's avatar
      MICROBA-1025 | Update cert_whitelist.py management command · 32685a79
      Justin Hynes authored
      [MICROBA-1025]
      - Update management command to use the same logic that the Instructor Dashboard uses
      - Fix bug in management command where processing stopped when encountering a user that did not exist
      - Add more logging
      - Add and update tests where needed
      32685a79
    • Nadeem Shahzad's avatar
      Merge pull request #26914 from edx/nadeem/packer_ami_ubuntu_20.04 · afd3c60d
      Nadeem Shahzad authored
      Pin diff-cover to fix tests on Ubuntu 20.04
    • Christie Rice's avatar
    • nadeemshahzad's avatar
      15d32811
    • Christie Rice's avatar
    • Kyle McCormick's avatar
      fix: streak celebration feature should require progress milestones (#26922) · 05dbd832
      Kyle McCormick authored
      In commit 9b37e7d0, the logic of
      `streak_celebration_is_active` was accidentally
      changed such that it no longer checks the
      Progress Milestones waffle flag.
      This commit fixes that.
      
      Note: This also adds in a transitive check to
      `courseware_mfe_is_active`,
      which makes sense for Streak Celebration
      and should not have any functional impact.