-
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
Taildrop: fails when sending many files from macOS #5873
Comments
Even without HTTP/2, HTTP/1 can re-use a TCP connection between multiple requests. @soniaappasamy, @nickoneill, @mihaip: do you know if the iOS/macOS client has a queue of files to send (like Windows and Linux) or does it start all of them concurrently? |
I haven't looked at that code in a while, but I think it queues them up and sends individually. And looking at it now, it creates a new https://github.com/tailscale/corp/blob/main/xcode/Shared/LocalAPIClient.swift#L141 |
@dsnet how many files were you trying to send (and from which app)? @soniaappasamy that's for the LocalAPI call, which should be ~instant. Once we end up in that handler, we use the Go HTTP stack to make the PeerAPI call with the actual files, so it should be the same on all platforms. Though based on the fact that we make a separate |
I initiated a transfer of 200 photos from the photos application on iOS.
Perhaps we should have a global semaphore on the maximum number of parallel POSTs? |
I'm just saying that trying to upload too many/big files concurrently is worse than doing a smaller number at a time. They'll be competing for bandwidth and we don't have any resume-from-position mechanism on any failure. |
But we'd still then have 200 from iOS to LocalAPI, even if we had a semaphore from Go (LocalBackend) to PeerAPI elsewhere. We could do that, but I'd rather put the semaphore on the Swift side. |
It seems unfortunate putting a semaphore on the Swift side, as we would presumably want a semaphore for other platforms (e.g., Android), right? Having a semaphore on the Go side solves the issue for multiple platforms. Could the Go side put backpressure and block Swift calls instead? |
Using a shared |
What is the issue?
I'm sending from iOS (1.30.2) to a Windows (1.30.1) machine.
On the Windows machine, I see:
On the iOS device, I see:
It appears that we are creating a new TCP connection for every file upload? Perhaps we should switch to a multipart HTTP POST?
Steps to reproduce
No response
Are there any recent changes that introduced the issue?
No response
OS
No response
OS version
No response
Tailscale version
No response
Bug report
No response
The text was updated successfully, but these errors were encountered: