Hi all , I’ve implemented an approach of encoding unsafe characters in the cache names for persistent storage directories. You can find it at https://github.com/gridgain/apache-ignite/tree/ignite-7264. How it works now is: 1) all characters outside of the [a-zA-Z0-9_-] class are replaced with their hex value (seems to be the easiest way); 2) a hash of the cache name is added at the end of the name to avoid case-insensitive collisions. There is still a tiny chance of hitting two cache names that are equal ignoring case which also have the same hash, but that’s really unlikely.
It seems that there are no complications with this approach. The cache name to directory mapping is like mycache -> cache-mycache-f19fd83d my/cool/cache -> cache-my2fcool2fcache my!@#$%^&()cache -> cache-my21402324255e262829cache-84ba3e99 Turns out the persistence is not the only place that doesn’t like special symbols in cache names – I also got an exception from MBean registration when creating a cache with ‘*’ or ‘?’. Filed https://issues.apache.org/jira/browse/IGNITE-7334 for that. Please let me know if you have any comments. Thanks, Stan From: Stanislav Lukyanov Sent: 25 декабря 2017 г. 18:09 To: dev@ignite.apache.org Subject: Handling slashes in cache names Hi all, I’m looking into https://issues.apache.org/jira/browse/IGNITE-7264, and I need some guidance on what’s the best way to approach it. The problem is that cache names are not restricted, but if persistence is enabled the cache needs to have a corresponding directory on the file system (“cache-…”) which can’t be created if the cache name contains certain characters (or a reserved system name). A straightforward approach would be to check if a cache name is allowed on the local system (e.g. via `Paths.get(name)`) and fail to create cache if it isn’t, but I’m a bit concerned with the consistency of the behavior (the same cache name be allowed on one system and not on another). I think a better way would be to replace special characters (say, all non-alphanumeric characters) with underscores in file names (not changing the cache configuration). Would this be OK? Are there any risks I’m not considering? WDYT? Thanks, Stan