-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cant download Manifest after you abort() it once #2781
Comments
I can reproduce this in an even simpler way in the console with two ops and no cycles or tight timing requirements: player = video.ui.getControls().getLocalPlayer();
storage = new shaka.offline.Storage(player);
op = storage.store('https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd');
setTimeout(() => op.abort(), 2000);
// Wait two seconds, check op.promise, see that it's rejected with OPERATION_ABORTED
op2 = storage.store('https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd');
// Check op2.promise, see that it's also rejected with OPERATION_ABORTED It doesn't seem to matter how long you wait between ops. |
I suspect that These caches form a deduplicating mechanism to prevent fetching and storing the same segment multiple times (for example, if multi-period content has been flattened such that the same segment appears in multiple streams). Since there is already a ton of state carried on the stack, I think long-term, we should break out private methods, parameters, and stack-based state that make an operation in progress. That could be carried in a separate object with its state in members, which may make both the Storage object and the store operation state more readable and maintainable. Short-term, to cherry-pick for a bug fix release, we may just move those caches into local variables and pass them from createStreams_ => createStream_ => getInitSegmentDbKey_ & getSegmentDbKey_. |
This bug was introduced in v3.0.0 and does not affect v2.5.x. |
When we started deduplicating storage by caching download results for identical init segments, we mistakenly also cached download failures or aborted operations. This moves the cache to the stack so that Storage does not cache content across store() calls. Closes #2781 Change-Id: Ia02ca72c3da3132ae6c55a3832bafc67613df810
Have you read the FAQ and checked for duplicate open issues?
Yes
What version of Shaka Player are you using?
3.0.2
Can you reproduce the issue with our latest release version?
Yes (if its 3.0.2)
Can you reproduce the issue with the latest code from
master
?Yes
Are you using the demo app or your own custom app?
my own custom app
If custom app, can you reproduce the issue using our demo app?
I dont think that the abort() function is used in the demo app.
What browser and OS are you using?
Chrome 85, Windows 10
For embedded devices (smart TVs, etc.), what model and firmware version are you using?
What are the manifest and license server URIs?
https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd
What did you do?
if you start a download and abort it afterwards you can start a download with another manifest but never with the same.
What did you expect to happen?
I expected that the second download just works.
What actually happened?
You immediatly get the 7001 error (abort operation) after every startDownload() call (that is not the first).
The text was updated successfully, but these errors were encountered: