Skip to content
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

Client should check Upload-Expires header during upload #97

Closed
ankitpokhrel opened this issue Oct 23, 2018 · 2 comments
Closed

Client should check Upload-Expires header during upload #97

ankitpokhrel opened this issue Oct 23, 2018 · 2 comments

Comments

@ankitpokhrel
Copy link
Owner

ankitpokhrel commented Oct 23, 2018

The Client SHOULD use Upload-Expires header to determine if an upload is still valid before attempting to resume the upload.

https://tus.io/protocols/resumable-upload.html#upload-expires

@AurelienMendes
Copy link

AurelienMendes commented Nov 12, 2018

Hello Ankit,
I'm so glad because you helped me to integrate TUS protocol in my Laravel application !!!
However, there is some strange behaviors with Upload-Expires, since I got randomly 410 Gone error on multiple file upload with Uppy Client and your Server.
For example, the same test done twice, which consists in trying to upload at same time 4 images (around 100Ko each) gives me
First time
image
Second time
image

Not seen on these sreenshots, each time I got a 410 error, the associated tus request has a Upload-Expires empty/null
I'm trying to understand, but I don't find the reason why even if everything seems to incriminate Upload-Expires ... and that's really problematic.

Do you have an idea ?

PS : I use Filestore for cache, Laravel 5.7 with everything uptodate and work locally.

EDIT (Nov 13, 18) : the problem comes from parallel upload clearly ... when I set the option "limit: 1" in the Uppy.TUS object

`
var uppy = Uppy.Core()

        .use(Uppy.Dashboard, {

            inline: true,

            target: '#drag-drop-area',

            width: 400,

            height: 250,

            thumbnailWidth: 280,

            showProgressDetails: true

        })

        .use(Uppy.Tus, {

            endpoint: '{{ route('tus.upload') }}', // use your tus endpoint here

            resume: true,

            limit: 1,

            autoRetry: true,

            retryDelays: [0, 1000, 3000, 5000]

        })`

then as expected, upload are made one after the other, and there is no more 401 Gone error.

Do you understand this ?
As comparison, with XHRUpload (multiple & parallel) it was working fine. This was without your package, just using a Route and a Controller to operate the upload.

@ankitpokhrel
Copy link
Owner Author

ankitpokhrel commented Nov 17, 2018

I use Filestore for cache, Laravel 5.7 with everything uptodate and work locally.

the problem comes from parallel upload clearly ... when I set the option "limit: 1" in the Uppy.TUS object

@AurelienMendes From these statements I assume that this might be happening:

  • You are using FileStore for cache.
  • You initiate multiple parallel uploads using uppy.
  • Uppy tries to write metadata in file parallelly.
  • As FileStore is simple cache implementation and doesn't account for Readers-writers problem, one key can be overridden by another if multiple requests come at the same time. Thus, causing 410 gone error in another upload.

You can switch to redis store and it should work fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants