[ https://issues.apache.org/jira/browse/CASSANDRA-9626?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15696786#comment-15696786 ]
vincent royer edited comment on CASSANDRA-9626 at 11/25/16 10:38 PM: --------------------------------------------------------------------- Using the javassist maven plugin and the following class transformer can fix the cassandra byte-code to be "Locale-Independent". {code} public class StringLocaleTransformer extends ClassTransformer { public void applyTransformations(ClassPool pool, CtClass classToTransform) throws TransformationException { try { final CtMethod[] targetMethods = classToTransform.getDeclaredMethods(); for (int i = 0; i < targetMethods.length; i++) { targetMethods[i].instrument(new ExprEditor() { public void edit(final MethodCall m) throws CannotCompileException { ILogger logger = getLogger(); if ("java.lang.String".equals(m.getClassName())) { if ("format".equals(m.getMethodName()) && m.getSignature().startsWith("(Ljava/lang/String;")) { logger.info("Modifing format() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = java.lang.String.format(java.util.Locale.ROOT, $$);}"); } else if ("toUpperCase".equals(m.getMethodName()) && m.getSignature().startsWith("()")) { logger.info("Modifing toUpperCase() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = $proceed(java.util.Locale.ROOT);}"); } else if ("toLowerCase".equals(m.getMethodName()) && m.getSignature().startsWith("()")) { logger.info("Modifing toLowerCase() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = $proceed(java.util.Locale.ROOT);}"); } } } }); } } catch (CannotCompileException e) { e.printStackTrace(); } } } {code} was (Author: vroyer59): Using the javassist maven plugin and the following class transformer can fix the cassandra byte-code to be "Locale-independant". {code} public class StringLocaleTransformer extends ClassTransformer { public void applyTransformations(ClassPool pool, CtClass classToTransform) throws TransformationException { try { final CtMethod[] targetMethods = classToTransform.getDeclaredMethods(); for (int i = 0; i < targetMethods.length; i++) { targetMethods[i].instrument(new ExprEditor() { public void edit(final MethodCall m) throws CannotCompileException { ILogger logger = getLogger(); if ("java.lang.String".equals(m.getClassName())) { if ("format".equals(m.getMethodName()) && m.getSignature().startsWith("(Ljava/lang/String;")) { logger.info("Modifing format() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = java.lang.String.format(java.util.Locale.ROOT, $$);}"); } else if ("toUpperCase".equals(m.getMethodName()) && m.getSignature().startsWith("()")) { logger.info("Modifing toUpperCase() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = $proceed(java.util.Locale.ROOT);}"); } else if ("toLowerCase".equals(m.getMethodName()) && m.getSignature().startsWith("()")) { logger.info("Modifing toLowerCase() @ "+m.getFileName()+":"+m.getLineNumber()); m.replace("{$_ = $proceed(java.util.Locale.ROOT);}"); } } } }); } } catch (CannotCompileException e) { e.printStackTrace(); } } } {code} > Make C* work in all locales > --------------------------- > > Key: CASSANDRA-9626 > URL: https://issues.apache.org/jira/browse/CASSANDRA-9626 > Project: Cassandra > Issue Type: Improvement > Reporter: Robert Stupp > Priority: Minor > Attachments: 9626.txt > > > Default locale and default charset has immediate effect on how strings are > encoded and handles - e.g. via {{String.toLowerCase()}} or {{new > String(byte[])}}. > Problems with different default locales + charsets don't become obvious for > US and most European regional settings. But some regional OS settings will > cause severe errors. Example: {{"BILLY".toLowerCase()}} returns {{bılly}} > with Locale tr_TR (take a look at the second letter - it's an i without the > dot). > (ref: > http://blog.thetaphi.de/2012/07/default-locales-default-charsets-and.html) > It's not a problem I'm currently facing, but it could become a problem for > some users. A quick fix could be to set default locale and charset in the > start scripts - maybe that's all we need. -- This message was sent by Atlassian JIRA (v6.3.4#6332)