You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently we are using a custom dropzone js implementation to upload large files.
When we are posting 3 chunks concurrently, we are getting weird errors. (files incomplete, unable to move, unable to delete, etc)
The problem disappears when we limit the uploader to 1 thread or when we add a sleep($chunkId); on our server. So this would point to a race condition.
I'm not sure exactly where/how the problem could be fixed best, but there are a few points that can cause problems:
I think the root cause of the problem might be that move_uploaded_file does not give any guarantees.
I've read somewhere that the function can either rename or copy+delete.
In our setup we are using a custom ChunkStorage on a NFS mount (because we have a multi-server load balancer setup), so i assume the file move_uploaded_file call is using the copy+delete method.
A possible solution might be to move() the file to the correct destination, but append a .tmp to the filename.
And then rename() the file directly after that.
This would prevent the FileMerger from merging files that are not finished copying.
The text was updated successfully, but these errors were encountered:
Currently we are using a custom dropzone js implementation to upload large files.
When we are posting 3 chunks concurrently, we are getting weird errors. (files incomplete, unable to move, unable to delete, etc)
The problem disappears when we limit the uploader to 1 thread or when we add a sleep($chunkId); on our server. So this would point to a race condition.
I'm not sure exactly where/how the problem could be fixed best, but there are a few points that can cause problems:
https://github.com/pionl/laravel-chunk-upload/blob/master/src/Save/ParallelSave.php#L98
the "getSavedChunksFiles" function does not know if all chunks have completely finished copying.
https://github.com/pionl/laravel-chunk-upload/blob/master/src/FileMerger.php#L47
FileMerger has the same problem, it cannot know if all the chunks that it is merging, are full and complete
I think the root cause of the problem might be that move_uploaded_file does not give any guarantees.
I've read somewhere that the function can either rename or copy+delete.
In our setup we are using a custom ChunkStorage on a NFS mount (because we have a multi-server load balancer setup), so i assume the file move_uploaded_file call is using the copy+delete method.
A possible solution might be to move() the file to the correct destination, but append a .tmp to the filename.
And then rename() the file directly after that.
This would prevent the FileMerger from merging files that are not finished copying.
The text was updated successfully, but these errors were encountered: