I have two LANs with a 1mbit link between them. The source LAN has one syncthing instance, the destination LAN has two.
If I add a new, 10GB file for transfer on the source side (this quantity of data takes just about 24 hours) the source network instance pushes a full copy of the data to each of the instances on the destination network. As far as I can tell, the two instances on the destination network never share any significant amount of data. This observation is backed up by direct transfer via rsync or similar taking approximately 24 hours over the slow link while syncthing requires 48.
If I limit the connections so that the source instance is only allowed to talk to one of the two destination nodes, I observe that the redundant transfer stops, but the second destination node reports that “no connected device has the required version of this file” until the first destination node has completed its copy and transfers nothing in the interim…
Unfortunately I’m not terribly familiar with Go, so I’m not confident in my ability to correctly analyze this myself from the source. But it seems like maybe chunks aren’t being advertised as available for transfer until the whole file is completed?
For a big collection of small files set to random pull order this is fine, but for anything of significant size, or if all nodes pull files in the same order it seems to waste a lot of potential redundant transfer links since the even split of transfer bandwidth results in all nodes getting finished with their transfer from the first node at about the same time.
Everyone seems to think that this isn’t how it’s supposed to work, so maybe there’s something messed up in my config? Or maybe the status readout is lying when it says it can’t find a copy to transfer from? But then why the roughly twofold increase in transfer time?
It seems like maybe this needs some testing. Is there some way I can extract more information about what’s going on with a particular file? Or should I just write this up as a potential bug?