Commit Graph

609 Commits

Author SHA1 Message Date
Eric Fischer
715076a48b Cleaner grades exception handling 2017-02-27 13:53:31 -05:00
David Ormsbee
ca1f76cedb Move more tests to use bulk_operations. 2017-02-24 15:21:45 -05:00
David Ormsbee
2051c90924 Test Speedup: Isolate Modulestore Signals
There are a number of Django Signals that are on the modulestore's
SignalHandler class, such as SignalHandler.course_published. These
signals can trigger very expensive processes to occur, such as course
overview or block structures generation. Most of the time, the test
author doesn't care about these side-effects.

This commit does a few things:

* Converts the signals on SignalHandler to be instances of a new
  SwitchedSignal class, that allows signal sending to be disabled.

* Creates a SignalIsolationMixin helper similar in spirit to the
  CacheIsolationMixin, and adds it to the ModuleStoreIsolationMixin
  (and thus to ModuleStoreTestCase and SharedModuleStoreTestCase).

* Converts our various tests to use this new mechanism. In some cases,
  this means adjusting query counts downwards because they no longer
  have to account for publishing listener actions.

Modulestore generated signals are now muted by default during test runs.
Calls to send() them will result in no-ops. You can choose to enable
specific signals for a given subclass of ModuleStoreTestCase or
SharedModuleStoreTestCase by specifying an ENABLED_SIGNALS class
attribute, like the following example:

    from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase

    class MyPublishTestCase(ModuleStoreTestCase):
        ENABLED_SIGNALS = ['course_published', 'pre_publish']

You should take great care when disabling signals outside of a
ModuleStoreTestCase or SharedModuleStoreTestCase, since they can leak
out into other tests. Be sure to always clean up, and never disable
signals outside of testing. Because signals are essentially process
globals, it can have a lot of unpleasant side-effects if we start
mucking around with them during live requests.

Overall, this change has cut the total test execution time for
edx-platform by a bit over a third, though we still spend a lot in
pre-test setup during our test builds.

[PERF-413]
2017-02-23 10:31:16 -05:00
Eric Fischer
06c3445609 Short-term fix for TNL-6559 task failures 2017-02-22 14:34:36 -05:00
Sanford Student
c4461191bc reset grades management command choose database 2017-02-21 16:00:33 -05:00
Eric Fischer
7d82f32f5b Fix issue with test ordering
The second test here is not idempotent, so we must needs reset the
course before each test.
2017-02-17 09:48:56 -05:00
Eric Fischer
fd1ed2ce6d Remove unneeded validation on grades model
These checks are causing SQL query numbers to scale linearly with the
number of subsections being created/updated, and the errors they
check for have not been seen in prod.

TNL-6225
2017-02-17 09:48:56 -05:00
Nimisha Asthagiri
6626725781 Merge pull request #14504 from edx/beryl/cbs_transformer_versions
Block Transformers: distinguish between READ and WRITE versions
2017-02-13 13:32:05 -05:00
Nimisha Asthagiri
71cce9bb73 Block Transformers: distinguish between READ and WRITE versions
TNL-6522
2017-02-13 12:20:22 -05:00
J. Cliff Dyer
be8a898e68 Add logging to recalculate grades base task.
TNL-6294

* Use external celery_utils in edx-platform (TNL-6454)
* Remove old openedx.core celery_utils implementation.
2017-02-10 16:07:51 -05:00
Nimisha Asthagiri
31ec562168 Merge pull request #14490 from edx/beryl/request-cache-feature-flag
request-cache grades feature flag to avoid 400+ memcached hits
2017-02-08 11:41:55 -05:00
Nimisha Asthagiri
f2abce53cb request-cache grades feature flag to avoid 400+ memcached hits 2017-02-08 10:01:52 -05:00
Nimisha Asthagiri
697b3d7d98 Add new relic parameters to grades task 2017-02-07 19:29:17 -05:00
Nimisha Asthagiri
7cc08399c6 Fix mongo query count for Grades API 2017-02-01 17:58:36 -05:00
Jesse Zoldak
b0647e7d83 Revert "Fix mongo query count for Grades API" 2017-02-01 11:09:43 -05:00
Nimisha Asthagiri
704a16ad3f Fix mongo query count for Grades API 2017-02-01 09:32:27 -05:00
Eric Fischer
6f8383199f Allow null edited_timestamp
Some old mongo courses do not have this field, and the team has opted
to allow null values rather than inserting a default. This change
affects both course and subsection grades.

TNL-6408
2017-01-30 13:19:36 -05:00
Eric Fischer
a78db97d26 Delay grades recalculation task
As discovered in load testing, if this task is run too quickly it
can ask for a newly-recorded score prior to the active transaction
finishing and writing to the database.

TNL-6424
2017-01-30 13:19:36 -05:00
sanfordstudent
09c021e7ee Merge pull request #14370 from edx/sstudent/grades-tasks-logging
add task id to logging and log database exceptions for TNL-6332
2017-01-26 10:44:09 -05:00
Sanford Student
dd93496f7a add task id to logging and log database exceptions
for TNL-6332, TNL-6373
2017-01-26 10:06:34 -05:00
J. Cliff Dyer
df7c2715d3 Create infrastructure for reapplying tasks
and cleaning up tasks that have been resolved.

TNL-6252
2017-01-25 16:22:40 -05:00
Nimisha Asthagiri
784ef04221 Merge pull request #14359 from edx/beryl/command_generate_cb_tasks
Update generate_course_blocks management command to enqueue tasks.
2017-01-24 17:24:30 -05:00
Nimisha Asthagiri
c04f4401dc Update generate_course_blocks management command to enqueue tasks 2017-01-24 09:11:57 -05:00
Nimisha Asthagiri
5a9179bf00 Update has_database_updated_with_new_score to handle all block types
TNL-6331
2017-01-23 15:50:16 -05:00
J. Cliff Dyer
0d2ae5d4af Store failed subsection grade calculations
TNL-6250
2017-01-18 09:43:07 -05:00
Sanford Student
00471d4a78 add index for modified to course and subsection grades
and first attempted for subsection
for TNL-6281
2017-01-12 12:50:35 -05:00
Nimisha Asthagiri
05087bfac2 Management command to Reset Grades
TNL-6251
2017-01-10 15:26:52 -05:00
Nimisha Asthagiri
adad6b2e83 Merge pull request #14293 from edx/beryl/pre-collect-grade-report
Grade Report: Reuse collected block structure
2017-01-10 13:44:24 -05:00
Nimisha Asthagiri
04d4ab0e4d Grade Report: Reuse collected block structure 2017-01-09 22:04:16 -05:00
Eric Fischer
3fd86614b0 sub_api get_score return value is a dict
This access pattern was wrong, and was causing errors in production. I've
included an additional happy-path test.
2017-01-09 11:50:18 -05:00
Eric Fischer
a7c2a3d926 Retry on all exceptions on failed subsection grade update 2017-01-09 11:50:18 -05:00
Eric Fischer
69eae7b8fb Test for missing submission score
Follow-up to this morning's change for TNL-6236
2017-01-03 14:47:23 -05:00
Eric Fischer
033567752b Submissions scores can be too quick
It's possible this score has not been logged yet, we should handle that.

TNL-6236
2017-01-03 12:01:08 -05:00
Nimisha Asthagiri
99e6d53939 Preload definitions when collecting block structures 2016-12-29 08:51:26 -05:00
sanfordstudent
e860205e67 Merge pull request #14191 from edx/beryl/content_library_access
Test retrieving subsection grade after losing access to block in subsection
2016-12-21 13:19:05 -05:00
Nimisha Asthagiri
d1d8d31bba Test retrieving subsection grade after losing access to block in subsection 2016-12-21 11:49:33 -05:00
Sanford Student
ac9b8fba5e context manager for course id in context 2016-12-20 15:26:05 -05:00
Eric Fischer
5a98a90eba Use timestamps in _has_database_updated_with_new_score check
Also fixes issue where ORA grades were never updated, by including
them in this check.

TNL-5994
TNL-5995
2016-12-09 13:46:34 -05:00
Sanford Student
5f2ffbe75b implementation of grading events
for TNL-5045
2016-12-07 14:47:08 -05:00
Sanford Student
44074f30a2 move course version repopulation to runtime layer
for TNL-6065
2016-12-06 10:22:13 -05:00
Nimisha Asthagiri
b2cd0359e5 Merge pull request #14032 from edx/beryl/unattempted-grade-report
Update grade report to distinguish between Not Attempted and 0
2016-11-30 18:03:07 -05:00
Eric Fischer
264d1940bf Merge pull request #13989 from proversity-org/proversity/fix-removed-in-django-19-warning-studio
Remove warning RemovedInDjango19Warnings in Studio
2016-11-30 15:06:30 -05:00
Eric Fischer
bf64d17f0a Merge pull request #14071 from edx/efischer/reversify_migration
Allow grades app to be zero-migrated
2016-11-30 15:01:51 -05:00
Nimisha Asthagiri
aca69f78f2 Update Subsection Grade Report to differentiate Not Attempted and 0
TNL-5990
2016-11-30 12:36:26 -05:00
Nimisha Asthagiri
e87388e24c Grades cleanup before updating grade report
Remove deprecated SingleSectionGrader.  TNL-5987
Remove display_name and module_id from Scores objects
Update CourseGradeFactory.__init__ to not be user-specific
Update some callers to use CourseGrade class instead of "summary" dict
Remove no longer needed course_grades.py module.
Renamed django signal from GRADES_UPDATED to COURSE_GRADE_CHANGED
2016-11-30 12:36:25 -05:00
Eric Fischer
47afbcf832 Allow grades app to be zero-migrated 2016-11-30 10:30:32 -05:00
Sanford Student
4eb5311ece Separating problem raw score changed and problem weighted score changed signals
For TNL-5993
2016-11-30 10:15:07 -05:00
jagonzalr
e9b121b8cd prevent RemovedInDjango19Warnings 2016-11-30 10:06:13 -05:00
J. Cliff Dyer
5350e31667 fixup: extract some common code. 2016-11-22 15:53:30 -05:00
J. Cliff Dyer
0e2534f3ec Wrap update_or_create in transaction to allow validation after save 2016-11-22 12:12:15 -05:00