Comments (12)
I think that there is also merit to ensuring that the architecture can effectively SCALE! Because you will always have users who queue large amounts, not only in total, but per user. And what you might consider a "large amount" might not be what I consider to be a large amount!
Considering how much of my free time I've spent in the past few months, with no compensation whatsoever, to make the transfer backend scale according to your needs specifically, it's not really motivating to keep reading comments like this.
The remaining freezes I know of are on the GUI side, which will be addressed when we port the treeviews from GtkTreeView to GtkColumnView.
Nothing personal, the last week just hasn't been great in general. I think I'll get the first release candidate out, and hopefully take a break for a while.
from nicotine-plus.
~110k files in DL queue
I also noticed a drastic drop in download speed when trying to download thousands of files (tens of GB) from the same user, plus a high rate of connection timeouts while downloading.
Maybe we flood the other user with slskmessages.QueueUpload
messages because we don't have a limit to our download queue and, when some of those messages don't get a response, we mark the connection as timed out and stop all downloads.
Ideally, we would be able to configure a limit to the download queue just like we do for the upload one, but a sensible hard-coded value would also work.
from nicotine-plus.
Unknown if this has anything to do with share size, scanning, or DL queue (or any combination thereof).
It will not be possible to work on this bug issue until you are able to establish by further testing what exactly is the cause.
Perhaps you can make backups of downloads.json
and uploads.json
then clear a list to observe what difference it makes.
from nicotine-plus.
~110k files in DL queue
I also noticed a drastic drop in download speed when trying to download thousands of files (tens of GB) from the same user, plus a high rate of connection timeouts while downloading.
Maybe we flood the other user with
slskmessages.QueueUpload
messages because we don't have a limit to our download queue and, when some of those messages don't get a response, we mark the connection as timed out and stop all downloads.Ideally, we would be able to configure a limit to the download queue just like we do for the upload one, but a sensible hard-coded value would also work.
Downloads currently work as follows:
- Send QueueUpload message for every file we want to download once
- If a download fails with "Connection timeout", retry it after 3 minutes. Otherwise download stays queued without further messages being sent.
- If we receive a "Too many files" or "Too many megabytes" status for a download, remember how many (n) downloads are currently queued. When all successfully queued downloads have finished transferring, retry n more rejected downloads.
Are queued downloads timing out, or ones that are about to start transferring?
from nicotine-plus.
Just the errors:
2023-12-05 16:55:20 [Conn] Direct connection of type P to user some_user failed. Error: Timed out
2023-12-05 16:56:13 [Conn] Cannot respond to indirect connection request from user some_user. Error: Timed out
2023-12-05 16:57:43 [Conn] Cannot respond to indirect connection request from user some_user. Error: Timed out
2023-12-05 16:58:19 [Conn] Direct connection of type P to user some_user failed. Error: Timed out
2023-12-05 16:59:13 [Conn] Cannot respond to indirect connection request from user some_user. Error: Timed out
2023-12-05 16:59:23 [Conn] Direct connection of type P to user some_user failed. Error: Timed out
2023-12-05 16:59:41 [Transfer] Download attempt for file @@foo/bar/baz.flac from user some_user failed with status Connection timeout
I'll email you a longer log.
from nicotine-plus.
I'll email you a longer log.
If I understand the logs correctly, the user sends a request to start uploading a file to you, it starts "Transferring", but eventually times out because no file data is sent for a long time. Can you confirm if this is what you're seeing in the GUI?
The "Timed out" errors in the logs usually indicate that the user's port is closed, but they should still be able to connect to your open port (i.e. a connection should be established regardless of these errors).
Does the transfer timeout issue happen with other users, or just this specific one?
from nicotine-plus.
the user sends a request to start uploading a file to you
No. I'm downloading from that user. I think the protocol's message name is confusing.
eventually times out because no file data is sent for a long time
Or because some of this flurry of queueing messages timeout, so the whole socket is considered timed out, even if file transfers keep working. Also, it looks like all those messages are sent at the same time, in parallel, with no limits.
Does the transfer timeout issue happen with other users, or just this specific one?
I don't try to download 200+ GB (17K+ files) from other users. Anyway, I don't think it's user-specific because, if I keep my download queue under certain limits, the freeze does not appear.
On a positive note, those limits have increased on recent Nicotine+ commits. I can now queue 150GB and not worry about freezes.
from nicotine-plus.
So, the performance is satisfactory enough in most normal type of usage scenarios?
from nicotine-plus.
So, the performance is satisfactory enough in most normal type of usage scenarios?
Yes, but corner cases are useful for showing architectural flaws.
Queueing messages need to be serialised and throttled, timed out messages need to be retried a few times and the socket should not be marked as timed out if it's still carrying packets. A timed out socket also needs to be recreated, every minute or so.
from nicotine-plus.
I think that there is also merit to ensuring that the architecture can effectively SCALE! Because you will always have users who queue large amounts, not only in total, but per user. And what you might consider a "large amount" might not be what I consider to be a large amount!
I can tell you that if I'm browsing a user's files, I'm going to queue EVERYTHING that I want from that user at that time. I am NOT going to go to the "hassle" of doing it "piecemeal" or going back & forth. Just how large that user's queue turns out to be, is entirely dependent on what I am looking to get from them. NO ONE should CARE how much someone DLs (or queues) from them, as long as the DL'r has satisfied any minimum requirements a user might have asked (ex, Please share X number of files)
That would be the equivalent of you buying a car, but the manufacturer (in this case you all as the devs) have "decided" that they don't think you should be driving more than 100 miles per day, simply because it is not what they do.
from nicotine-plus.
Thank you both, these are good observations.
Further testing and development is warranted to improve stability during bulk operations and faster startup under heavy load conditions.
Perhaps we might work more on this throughout the revisions of the 3.3.x branch, but for now as there doesn't seem to be any egregious bugs, I shall remove the Bug label of this issue in favour of Enhancement.
from nicotine-plus.
Closing in favor of #2910. It's the same issue (slow treeview additions/updates), but less severe due to fewer files.
from nicotine-plus.
Related Issues (20)
- Nicotine won't connect HOT 4
- Autoclear finished/filtered downloads from transfer list option doesn't work HOT 2
- Nicotine+ refuses to start after installing latest version; "bad magic number" HOT 2
- Add timestamp columns to Uploads and Downloads views HOT 1
- Context menu clicks don't work on macOS Ventura HOT 11
- Cant connect to server? HOT 2
- Crash on Mac OS Monterey 12.7.5 (Intel) - Nicotine+ Version: 3.3.5.dev1 HOT 6
- Crash on load, Nicotine+ 3.3.4 mingw x86_64 (Fixed) HOT 6
- Remove/clear HOT 5
- "Ok" on Network Closes Port HOT 2
- Python Memory Error HOT 8
- Manually "lock" specific queued downloads from being accidentally cleared HOT 2
- set final destination folder upon completion of download, instead of when download is requested - or - allow user to change to download folder for existing/pending downloads HOT 7
- Crash on start on Kubuntu 24.04 HOT 4
- bottleneck to uploading from users with closed ports & autoexpanding downloading lists HOT 2
- Libadwaita theme not applying HOT 5
- nowplaying - other should decode bytes
- Newly started downloads will open a collapsed thread? HOT 1
- Crash on MBP Ventura 13.6.7 HOT 2
- Show private/locked files to people you've banned
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nicotine-plus.