Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
477d6dd2
Commit
477d6dd2
authored
Aug 25, 2016
by
John Eskew
Committed by
GitHub
Aug 25, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13309 from edx/release
Hotfix for TNL-5365
parents
2e8e51c3
9af50a75
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
22 additions
and
7 deletions
+22
-7
lms/djangoapps/courseware/tests/test_model_data.py
+3
-3
lms/djangoapps/courseware/user_state_client.py
+18
-3
requirements/edx/base.txt
+1
-1
No files found.
lms/djangoapps/courseware/tests/test_model_data.py
View file @
477d6dd2
...
...
@@ -139,7 +139,7 @@ class TestStudentModuleStorage(OtherUserFailureTestMixin, TestCase):
# to discover if something other than the DjangoXBlockUserStateClient
# has written to the StudentModule (such as UserStateCache setting the score
# on the StudentModule).
with
self
.
assertNumQueries
(
2
,
using
=
'default'
):
with
self
.
assertNumQueries
(
4
,
using
=
'default'
):
with
self
.
assertNumQueries
(
1
,
using
=
'student_module_history'
):
self
.
kvs
.
set
(
user_state_key
(
'a_field'
),
'new_value'
)
self
.
assertEquals
(
1
,
StudentModule
.
objects
.
all
()
.
count
())
...
...
@@ -152,7 +152,7 @@ class TestStudentModuleStorage(OtherUserFailureTestMixin, TestCase):
# to discover if something other than the DjangoXBlockUserStateClient
# has written to the StudentModule (such as UserStateCache setting the score
# on the StudentModule).
with
self
.
assertNumQueries
(
2
,
using
=
'default'
):
with
self
.
assertNumQueries
(
4
,
using
=
'default'
):
with
self
.
assertNumQueries
(
1
,
using
=
'student_module_history'
):
self
.
kvs
.
set
(
user_state_key
(
'not_a_field'
),
'new_value'
)
self
.
assertEquals
(
1
,
StudentModule
.
objects
.
all
()
.
count
())
...
...
@@ -206,7 +206,7 @@ class TestStudentModuleStorage(OtherUserFailureTestMixin, TestCase):
# We also need to read the database to discover if something other than the
# DjangoXBlockUserStateClient has written to the StudentModule (such as
# UserStateCache setting the score on the StudentModule).
with
self
.
assertNumQueries
(
2
,
using
=
"default"
):
with
self
.
assertNumQueries
(
4
,
using
=
"default"
):
with
self
.
assertNumQueries
(
1
,
using
=
"student_module_history"
):
self
.
kvs
.
set_many
(
kv_dict
)
...
...
lms/djangoapps/courseware/user_state_client.py
View file @
477d6dd2
...
...
@@ -6,7 +6,7 @@ data in a Django ORM model.
import
itertools
from
operator
import
attrgetter
from
time
import
time
import
logging
try
:
import
simplejson
as
json
except
ImportError
:
...
...
@@ -14,10 +14,14 @@ except ImportError:
import
dogstats_wrapper
as
dog_stats_api
from
django.contrib.auth.models
import
User
from
django.db
import
transaction
from
django.db.utils
import
IntegrityError
from
xblock.fields
import
Scope
from
courseware.models
import
StudentModule
,
BaseStudentModuleHistory
from
edx_user_state_client.interface
import
XBlockUserStateClient
,
XBlockUserState
log
=
logging
.
getLogger
(
__name__
)
class
DjangoXBlockUserStateClient
(
XBlockUserStateClient
):
"""
...
...
@@ -222,8 +226,19 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
current_state
.
update
(
state
)
num_fields_after
=
len
(
current_state
)
student_module
.
state
=
json
.
dumps
(
current_state
)
# We just read this object, so we know that we can do an update
student_module
.
save
(
force_update
=
True
)
try
:
with
transaction
.
atomic
():
# Updating the object - force_update guarantees no INSERT will occur.
student_module
.
save
(
force_update
=
True
)
except
IntegrityError
:
# The UPDATE above failed. Log information - but ignore the error.
# See https://openedx.atlassian.net/browse/TNL-5365
log
.
warning
(
"set_many: IntegrityError for student {} - course_id {} - usage key {}"
.
format
(
user
,
repr
(
unicode
(
usage_key
.
course_key
)),
usage_key
))
log
.
warning
(
"set_many: All {} block keys: {}"
.
format
(
len
(
block_keys_to_state
),
block_keys_to_state
.
keys
()
))
# The rest of this method exists only to submit DataDog events.
# Remove it once we're no longer interested in the data.
...
...
requirements/edx/base.txt
View file @
477d6dd2
...
...
@@ -44,7 +44,7 @@ edx-lint==0.4.3
edx-django-oauth2-provider==1.1.1
edx-django-sites-extensions==2.0.1
edx-oauth2-provider==1.1.3
edx-opaque-keys==0.
3.2
edx-opaque-keys==0.
2.1
edx-organizations==0.4.1
edx-rest-api-client==1.2.1
edx-search==0.1.2
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment