On Thu, Dec 28, 2017 at 9:22 AM, Stanislav Lukyanov <stanlukya...@gmail.com> wrote:
> 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); I would surround such replacements with "_", e.g. "myCacheName_somesymbol_". > 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. > Here I am confused. I think the cache names should be case insensitive at all times. I seriously doubt enforcing this rule would cause problems. If we enforce this rule at cache creation time, then we would not have to add a hashcode at the end. > > 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 > As mentioned above, I would prefer "cache-my_2f_cool_2f_cache" > 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 > >