Hey folks! Old Syncthing user returning to an awesome project for a better quality sync protocol. I’m happy to see that there have been less sync conflicts for me than there were in the past. I do only have one issue though and I think I am part to blame for this one.
I use Emacs for my work, which will create files starting with #. I didn’t do a proper save on those files so it kept the unsaved versions with the # in the name, then I went and reinstalled my OS.
I have 3 computers: a desktop, laptop, and server in the middle that’s on 24/7. 2 of those files prepended with a # are being shown as out of sync files on my desktop, but aren’t known by my other Syncthing clients. In addition, the files don’t exist on any copy of my data. They just show as being unsynced with the old Device ID that no longer exists.
What’s the best way to resolve this out of sync issue?
There is no real way to solve it. If someone announced the files to the cluster and disappeared before anyone managed to download them, these files will be forever out of sync. Yet I’d expect them to be out of sync everywhere.
You can recreate the files manually somewhere and delete them, or try ignoring them.
I know it removes things for that particular device, I did not think it goes and unmerges the global version list if that file on this to be removed device is the latest version, and puts the version of some other device as latest (which I guess it has to check who from other devices has the second latest version?).
I though versions did not identify who added them, so I though it’s not even possible? What if B advertises a version from C, and A doesn’t even know C, how would A know to remove C’s version when removing B?
I guess you know better here, as I try to stay away from that region, but I thought devices that advertise content and then disappear will always be problematic.
I just checked and the global version list definitely gets updated on device removal. It doesn’t need to touch version vectors for that.
In your scenario, B just sends a fileinfo originally from C, but A doesn’t care about C, it just sets B’s fileinfo as the must current fileinfo. If B gets removed, that fileinfo gets removed, and if it happens to be the global one, the second fileinfo in the list now becomes global.