This version component reflects the "version" of the StaticContent
objects which we cache server-side. If the layout of those objects
changes between releases, errors occur when loading them from cache.
By using a separate version value, which can be incremented on its own
after a change has been made to the StaticContent class, we can avoid
loading older cached content and in turn take advantage of these changes
faster, without needing to intervene operationally.
When releasing the versioned assets work, we stumbled on a problem with old pickled
versions of the StaticContent objects residing in cache, which triggered a bug in the
code. Not wanting to blow away all cached items, we ended up having to revert and add
in some backwards-compatible helper code to ease the transition.
With this, we'll now utilize the version argument that Django's caching interface
allows, in conjunction with a constant value that can be modified when breaking changes
are being made, to let us gracefully ignore older cached course assets.
We're seeing errors in NR from objects read out of the cache lacking the
'StaticContent' object has no attribute 'content_digest'
File "/edx/app/edxapp/edx-platform/common/djangoapps/contentserver/middleware.py",
line 70, in process_request
This reverts commit 849ebc5f22.
This includes the course key/path for a given contentserver request,
whether or not the asset is locked, cacheable, has been modified, etc.
This should give us some better insight as to what sort of requests
are coming into the contentserver to figure out whether or use of
a CDN in front of these assets is as efficient as effective as it
could be.
This includes the course key/path for a given contentserver request,
whether or not the asset is locked, cacheable, has been modified, etc.
This should give us some better insight as to what sort of requests are
coming into the contentserver to figure out whether or use of a CDN in
front of these assets is as efficient as effective as it could be.
This introduces a mechanism to control the time-to-live for an unlocked
course asset, which will allow browsers and intermediate proxies/caches
to cache these course assets, determinstically.
Locked assets, with their nature of requiring authorization, are not
eligible for caching.
This commit makes the following changes:
1. If there are syntactic errors in the Range header, it is ignored and
the full content is returned. This conforms to the spec.
2. In case of multiple ranges in the header, the full content is returned.
This behavior differs from the spec which says that a multipart response
should be returned.
PLAT-104
Currently, users can only download ContentStore files from first byte to
last byte.
With this change, when a request to the ContentStore includes the HTTP
"Range" parameter, it is parsed and StaticContentStream will stream the
requested bytes.
This change makes possible to stream video files (.mp4 especially) from
the ContentStore. Users can now seek a specific time in the video
without loading all the file.
This is useful for courses with a limited number of students that
doesn't require a dedicated video server.
This commit updates common/djangoapps.
These keys are now objects with a limited interface, and the particular
internal representation is managed by the data storage layer (the
modulestore).
For the LMS, there should be no outward-facing changes to the system.
The keys are, for now, a change to internal representation only. For
Studio, the new serialized form of the keys is used in urls, to allow
for further migration in the future.
Co-Author: Andy Armstrong <andya@edx.org>
Co-Author: Christina Roberts <christina@edx.org>
Co-Author: David Baumgold <db@edx.org>
Co-Author: Diana Huang <dkh@edx.org>
Co-Author: Don Mitchell <dmitchell@edx.org>
Co-Author: Julia Hansbrough <julia@edx.org>
Co-Author: Nimisha Asthagiri <nasthagiri@edx.org>
Co-Author: Sarina Canelake <sarina@edx.org>
[LMS-2370]