The software we develop consists of 2 major parts, first there is the server side which contains all the data but does not allow modifying it beyond deleting, uploading and downloading files. Modifying the files has to happen with our workbench, which can automatically synchronize the files with the server for convenience, much like Dropbox.
Recently we found a bug that if someone would upload a file with some invalid characters regarding one filesystem, but acceptable for the server our workbench would get stuck synchronizing that one file as it fails to store it on disk due to the invalid character. We clearly did not anticipate that people would be using multiple filesystems.
What is the solution to this challenge? We could just come up with a set of invalid characters and names such that all files can be shared across all existing file systems. This however has a couple of drawbacks:
- If a new filesystem with other limitations starts being used, we have to update the list.
- Users who only have one type of filesystem will be too restricted.
Instead we have chosen to ignore files that can not be synced, just like Dropbox does. This is not ideal either as users can now create files that can not be synced to the server, or users will end up with not all files that exist on the server. The first scenario can be made visible to the user when using a special icon to indicate the file is not being synced. The second one however will cause more problems as the user does not have any files in his workbench to show an icon on. A warning in his console could be shown, but then again how often do you want the warning to be shown? And to make things worse, the user won’t be able to do anything about it as he can not rename the files directly on the server. He would have to ask someone who has the file synced to rename it.
It is the responsibility of the users to make sure that they do not use invalid characters for files they want to be able to sync to different systems. What these invalid characters are depends on the systems they use. This is the most open solution possible as we do not force any limitation on the user ourselves. Instead all limitations come from the underlying system the software runs on. At the same time I am wondering how long it will take for users to contact support about files that are not being synced.