/
Extracting Modulestore: Hackathon XV

Extracting Modulestore: Hackathon XV

Why Modulestore?

  • Technically, a low-level library with little to no dependencies on the rest of the platform.
  • Does not change very often - and especially not that often by the new TNL team.
  • It's one of the common dependencies between LMS and CMS.  So extracting the MS would pave the path toward splitting them as well.
  • MS tests take about 8mns on Jenkins - that amount of test time would be shaved off of edx-platform builds.

Hackathon Experiments

As part of edX Hackathon XV, I experimented extracting out the modulestore code and its dependencies out into separate repos.  I ended up creating the following 2 repos:

In so doing, there were a few dependencies that needed to be judged on whether they should (1) be refactored so they can be extracted out with the modulestore code or (2) remain within the edx-platform.  For example, I made the following decisions:

  • The definition of DEFAULT_START_DATE was moved into inheritance.py and moved with the modulestore code.
  • The course_metadata_utils.py module and its helper functions remained in edx-platform.

Since the work was done as part of a hackathon and within 2 hours, mostly for experimentation, accurate documentation wasn't kept.

Guidelines for Future Attempt

When this work is re-attempted, we should make sure to keep a clean git history, by doing the following:

  1. Initial commit should be just the base django cookie-cutter created files.
  2. Second commit should be just the unmodified copy of the modulestore code from the edx-platform (so all subsequent changes can be reviewed).
  3. Then, the following commits should be separated:
    1. All Python-3 compatible edits.
    2. All missing dependencies added to the requirements.
    3. All quality fixes.
  4. All other functional modifications should be kept as subsequent separated commits so they are easier to review and track.

Related content

How Not To Move Modulestore
How Not To Move Modulestore
More like this
What is (and is not) modulestore?
What is (and is not) modulestore?
More like this
2023-02-21 DevExp Meetup Notes
2023-02-21 DevExp Meetup Notes
More like this
Findings on Monolith Decomposition in the Modulestore Extraction
Findings on Monolith Decomposition in the Modulestore Extraction
More like this
Extracting Course Scheduling and Discovery-related Data from ModuleStore
Extracting Course Scheduling and Discovery-related Data from ModuleStore
More like this
Libraries we KNOW we want to move out of the monolith
Libraries we KNOW we want to move out of the monolith
More like this