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

Reply via email to