-
Improvement
-
Resolution: Fixed
-
Minor
-
3.7.6, 3.8.3, 4.2
-
MOODLE_37_STABLE, MOODLE_38_STABLE, MOODLE_402_STABLE
-
MOODLE_500_STABLE
-
MDL-68806_main -
-
-
Currently, the state diagram for quiz attempts looks like this:
This imposes two limitations which cause performance bottlenecks:
- Because a newly created quiz attempt goes straight into the 'in progress' state, we are required to go straight from the quiz attempt not existing, to the state where the quiz attempt is fully initialised. Therefore, all the work to create the attempt, randomly select question from the bank, and initialise them all, must be done synchronously when the students clicks 'Start attempt'.
- Similarly, becuase we have to do the transition In progress -> Finished, in a single step, we must do all the work of finishing all question when handling 'Submit all and finish'.
The plan is two introduce two new states:
- Created: This splits 1) above. It will be possible to do all the work of populating the quiz attempt and save that as a 'Created' attempt. Then, when the student clicks Start attempt, we only need to change quiz_attempt.state = 'inprogress' and quiz_attempt.timestart.
- Submitted: This splits 2) above. While this state will also be created as part of this issue, the full implementation will be handled separately in MDL-82654.
To support those low-level changes, we will need to:
- All the quiz UI will need to be reviewed to ensure attempts in these states are handled and displayed appropriately. (I don't think this is a big deal.)
- Related to the Created state, we will want to add some UI (probably in quiz_overview report) to pre-create attempts for all or selected students.
- There is a subtle detail. The start time is also stored in each question attempt, and it is stored when the quiz attempt is created. This is not really ideal anyway. E.g. for analytics, in a multipage quiz, that does not say when the student first saw that particual question. Therefore, I think the best thing to do here is to change the question system so that new question_attempst are created with first step timestamp null, and then that timestamp is set the first time the question is rendered.
Doing this should help greatly smooth out the two biggest peaks in server load when students are making simultaneous quiz attempts.
Note to self: these to docs pages need to be merged, and the obsolete information removed.
https://docs.moodle.org/dev/States_of_a_quiz_attempt
https://docs.moodle.org/dev/Better_handling_of_overdue_quiz_attempts
- blocks
-
MDL-80956 Quiz attempt methods final deprecation for Moodle 6.0
-
- Open
-
-
MOBILE-4532 Update behat test for "submitted" attempts state
-
- Integration review in progress
-
- Discovered while testing
-
MOBILE-4520 Support "Submitted" quiz attempt state
-
- Open
-
- has a QA test
-
MDLQA-19366 CLONE - Exploratory testing for quiz attempt improvements
-
- Open
-
-
MDLQA-20246 CLONE - Exploratory testing for quiz attempt improvements
-
- Passed
-
-
MDLQA-18442 Exploratory testing for quiz attempt improvements
-
- On Hold
-
-
MDLQA-18921 CLONE - Exploratory testing for quiz attempt improvements
-
- On Hold
-
- has been marked as being related by
-
MDL-85224 quiz_report_grade_method_sql() should also consider state = 'submitted'
-
- Waiting for component lead review
-
-
MDL-68501 Generate quizzes with random questions before start date.
-
- Open
-
- has to be done before
-
MDL-82654 Implement asynchronous grading of quiz attempts
-
- Open
-
- Testing discovered
-
MDL-85268 Lang string precreateattempts_desc unused
-
- Open
-
-
MDL-85269 Pre-create attempts default settings should be reconsidered
-
- Open
-