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
67d66184
Commit
67d66184
authored
Apr 21, 2015
by
Calen Pennington
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Push `set_many` save() calls into per-type caches
parent
97c2513e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
9 additions
and
28 deletions
+9
-28
lms/djangoapps/courseware/model_data.py
+8
-27
lms/djangoapps/courseware/tests/test_model_data.py
+1
-1
No files found.
lms/djangoapps/courseware/model_data.py
View file @
67d66184
...
@@ -223,7 +223,8 @@ class DjangoOrmFieldCache(object):
...
@@ -223,7 +223,8 @@ class DjangoOrmFieldCache(object):
if
field_object
is
None
:
if
field_object
is
None
:
self
.
_cache
[
cache_key
]
=
field_object
=
self
.
_create_object
(
kvs_key
)
self
.
_cache
[
cache_key
]
=
field_object
=
self
.
_create_object
(
kvs_key
)
self
.
_set_field_value
(
kvs_key
,
value
)
self
.
_set_field_value
(
field_object
,
kvs_key
,
value
)
field_object
.
save
()
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
def
delete
(
self
,
kvs_key
):
def
delete
(
self
,
kvs_key
):
...
@@ -257,9 +258,7 @@ class DjangoOrmFieldCache(object):
...
@@ -257,9 +258,7 @@ class DjangoOrmFieldCache(object):
return
self
.
_cache_key_for_kvs_key
(
kvs_key
)
in
self
.
_cache
return
self
.
_cache_key_for_kvs_key
(
kvs_key
)
in
self
.
_cache
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
def
_set_field_value
(
self
,
kvs_key
,
value
):
def
_set_field_value
(
self
,
field_object
,
kvs_key
,
value
):
cache_key
=
self
.
_cache_key_for_kvs_key
(
kvs_key
)
field_object
=
self
.
_cache
.
get
(
cache_key
)
field_object
.
value
=
json
.
dumps
(
value
)
field_object
.
value
=
json
.
dumps
(
value
)
def
__len__
(
self
):
def
__len__
(
self
):
...
@@ -413,9 +412,7 @@ class UserStateCache(DjangoOrmFieldCache):
...
@@ -413,9 +412,7 @@ class UserStateCache(DjangoOrmFieldCache):
return
kvs_key
.
field_name
in
json
.
loads
(
field_object
.
state
)
return
kvs_key
.
field_name
in
json
.
loads
(
field_object
.
state
)
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
@contract
(
kvs_key
=
DjangoKeyValueStore
.
Key
)
def
_set_field_value
(
self
,
kvs_key
,
value
):
def
_set_field_value
(
self
,
field_object
,
kvs_key
,
value
):
cache_key
=
self
.
_cache_key_for_kvs_key
(
kvs_key
)
field_object
=
self
.
_cache
.
get
(
cache_key
)
state
=
json
.
loads
(
field_object
.
state
)
state
=
json
.
loads
(
field_object
.
state
)
state
[
kvs_key
.
field_name
]
=
value
state
[
kvs_key
.
field_name
]
=
value
field_object
.
state
=
json
.
dumps
(
state
)
field_object
.
state
=
json
.
dumps
(
state
)
...
@@ -782,8 +779,6 @@ class FieldDataCache(object):
...
@@ -782,8 +779,6 @@ class FieldDataCache(object):
"""
"""
saved_fields
=
[]
saved_fields
=
[]
# field_objects maps a field_object to a list of associated fields
field_objects
=
dict
()
for
key
in
kv_dict
:
for
key
in
kv_dict
:
# If the field is valid and isn't already in the dictionary, add it.
# If the field is valid and isn't already in the dictionary, add it.
...
@@ -795,27 +790,13 @@ class FieldDataCache(object):
...
@@ -795,27 +790,13 @@ class FieldDataCache(object):
if
key
.
scope
not
in
self
.
cache
:
if
key
.
scope
not
in
self
.
cache
:
continue
continue
self
.
cache
[
key
.
scope
]
.
set
(
key
,
kv_dict
[
key
])
field_object
=
self
.
cache
[
key
.
scope
]
.
get
(
key
)
if
field_object
not
in
field_objects
.
keys
():
field_objects
[
field_object
]
=
[]
# Update the list of associated fields
field_objects
[
field_object
]
.
append
(
key
)
for
field_object
in
field_objects
:
try
:
try
:
# Save the field object that we made above
self
.
cache
[
key
.
scope
]
.
set
(
key
,
kv_dict
[
key
])
field_object
.
save
()
# If save is successful on this field, add it to
# If save is successful on this scope, add the saved fields to
# the list of successful saves
# the list of successful saves
saved_fields
.
extend
([
key
.
field_name
for
key
in
field_objects
[
field_object
]]
)
saved_fields
.
append
(
key
.
field_name
)
except
DatabaseError
:
except
DatabaseError
:
log
.
exception
(
'Error saving field
s
%
r'
,
field_objects
[
field_object
]
)
log
.
exception
(
'Error saving field
%
r'
,
key
)
raise
KeyValueMultiSaveError
(
saved_fields
)
raise
KeyValueMultiSaveError
(
saved_fields
)
@contract
(
key
=
DjangoKeyValueStore
.
Key
)
@contract
(
key
=
DjangoKeyValueStore
.
Key
)
...
...
lms/djangoapps/courseware/tests/test_model_data.py
View file @
67d66184
...
@@ -373,7 +373,7 @@ class StorageTestBase(object):
...
@@ -373,7 +373,7 @@ class StorageTestBase(object):
exception
=
exception_context
.
exception
exception
=
exception_context
.
exception
self
.
assertEquals
(
len
(
exception
.
saved_field_names
),
1
)
self
.
assertEquals
(
len
(
exception
.
saved_field_names
),
1
)
self
.
assertEquals
(
exception
.
saved_field_names
[
0
],
'existing_field'
)
self
.
assertEquals
(
exception
.
saved_field_names
[
0
],
'
other_
existing_field'
)
class
TestUserStateSummaryStorage
(
StorageTestBase
,
TestCase
):
class
TestUserStateSummaryStorage
(
StorageTestBase
,
TestCase
):
...
...
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