[jira] [Commented] (WW-4485) New cacheKey is too expensive to create

2015-04-07 Thread Lukasz Lenart (JIRA)

[ 
https://issues.apache.org/jira/browse/WW-4485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14482923#comment-14482923
 ] 

Lukasz Lenart commented on WW-4485:
---

Sorry to hear that, I have pushed your changes into GitHub, can you test 
3.0.11-SNAPSHOT? So then I will be able to push a new release

 New cacheKey is too expensive to create
 ---

 Key: WW-4485
 URL: https://issues.apache.org/jira/browse/WW-4485
 Project: Struts 2
  Issue Type: Bug
  Components: Core Actions, Expression Language
Reporter: Jasper Rosenberg
Priority: Blocker
  Labels: ognl
 Fix For: 2.5


 So we pushed ognl 3.0.10 to production this afternoon, and promptly had to 
 rollback because load on the servers went through the roof.  Looking at the 
 stack traces, the issue was tons of threads doing this:
 {noformat}
   at java.lang.Class.getEnclosingMethod0(Native Method)
   at java.lang.Class.getEnclosingMethodInfo(Class.java:1059)
   at java.lang.Class.isLocalOrAnonymousClass(Class.java:1449)
   at java.lang.Class.getCanonicalName(Class.java:1377)
   at ognl.OgnlRuntime.buildCacheKey(OgnlRuntime.java:1944)
   at ognl.OgnlRuntime.getGetMethod(OgnlRuntime.java:1926)
   at ognl.OgnlRuntime.hasGetMethod(OgnlRuntime.java:1985)
   at ognl.OgnlRuntime.hasGetProperty(OgnlRuntime.java:2045)
   at 
 com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:141)
 {noformat}
 The problem is that the change to buildCacheKey() for 
 https://issues.apache.org/jira/browse/WW-4113 is way to expensive considering 
 how often it is called.
 I'd like to suggest replacing the current buildCacheKey() implementation with 
 this:
 {code:java}
 private static Object buildCacheKey(Class targetClass, String 
 propertyName) {
 return new CacheKey(targetClass, propertyName);
 }
 
 private static final class CacheKey {
 private final Class clazz;
 private final String propertyName;
 public CacheKey(Class clazz, String propertyName) {
 this.clazz = clazz;
 this.propertyName = propertyName;
 }
 
 public boolean equals(Object obj) {
 CacheKey cacheKey = (CacheKey) obj;
 return clazz.equals(cacheKey.clazz)
  propertyName.equals(cacheKey.propertyName);
 }
 
 public int hashCode() {
 return clazz.hashCode() * 31 + propertyName.hashCode();
 }
 }
 {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (WW-4485) New cacheKey is too expensive to create

2015-04-07 Thread Jasper Rosenberg (JIRA)

[ 
https://issues.apache.org/jira/browse/WW-4485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14482931#comment-14482931
 ] 

Jasper Rosenberg commented on WW-4485:
--

Thanks, I will get right on testing it.

Also, as an aside, I realized that there actually was a regression issue 
introduced by WW-4113 as well.  Before, if a class had been loaded by different 
class loaders, then it was cached twice in ognl, which I think is the safest 
behavior.  After WW-4113, because it was using the class's name, the same class 
name from different class loaders would be only cached once, with the first one 
in winning.

 New cacheKey is too expensive to create
 ---

 Key: WW-4485
 URL: https://issues.apache.org/jira/browse/WW-4485
 Project: Struts 2
  Issue Type: Bug
  Components: Core Actions, Expression Language
Reporter: Jasper Rosenberg
Priority: Blocker
  Labels: ognl
 Fix For: 2.5


 So we pushed ognl 3.0.10 to production this afternoon, and promptly had to 
 rollback because load on the servers went through the roof.  Looking at the 
 stack traces, the issue was tons of threads doing this:
 {noformat}
   at java.lang.Class.getEnclosingMethod0(Native Method)
   at java.lang.Class.getEnclosingMethodInfo(Class.java:1059)
   at java.lang.Class.isLocalOrAnonymousClass(Class.java:1449)
   at java.lang.Class.getCanonicalName(Class.java:1377)
   at ognl.OgnlRuntime.buildCacheKey(OgnlRuntime.java:1944)
   at ognl.OgnlRuntime.getGetMethod(OgnlRuntime.java:1926)
   at ognl.OgnlRuntime.hasGetMethod(OgnlRuntime.java:1985)
   at ognl.OgnlRuntime.hasGetProperty(OgnlRuntime.java:2045)
   at 
 com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:141)
 {noformat}
 The problem is that the change to buildCacheKey() for 
 https://issues.apache.org/jira/browse/WW-4113 is way to expensive considering 
 how often it is called.
 I'd like to suggest replacing the current buildCacheKey() implementation with 
 this:
 {code:java}
 private static Object buildCacheKey(Class targetClass, String 
 propertyName) {
 return new CacheKey(targetClass, propertyName);
 }
 
 private static final class CacheKey {
 private final Class clazz;
 private final String propertyName;
 public CacheKey(Class clazz, String propertyName) {
 this.clazz = clazz;
 this.propertyName = propertyName;
 }
 
 public boolean equals(Object obj) {
 CacheKey cacheKey = (CacheKey) obj;
 return clazz.equals(cacheKey.clazz)
  propertyName.equals(cacheKey.propertyName);
 }
 
 public int hashCode() {
 return clazz.hashCode() * 31 + propertyName.hashCode();
 }
 }
 {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (WW-4485) New cacheKey is too expensive to create

2015-04-07 Thread Jasper Rosenberg (JIRA)

[ 
https://issues.apache.org/jira/browse/WW-4485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14482989#comment-14482989
 ] 

Jasper Rosenberg commented on WW-4485:
--

Awesome, I really appreciate you making time for this so quickly.

 New cacheKey is too expensive to create
 ---

 Key: WW-4485
 URL: https://issues.apache.org/jira/browse/WW-4485
 Project: Struts 2
  Issue Type: Bug
  Components: Core Actions, Expression Language
Reporter: Jasper Rosenberg
Assignee: Lukasz Lenart
Priority: Blocker
  Labels: ognl
 Fix For: 2.5


 So we pushed ognl 3.0.10 to production this afternoon, and promptly had to 
 rollback because load on the servers went through the roof.  Looking at the 
 stack traces, the issue was tons of threads doing this:
 {noformat}
   at java.lang.Class.getEnclosingMethod0(Native Method)
   at java.lang.Class.getEnclosingMethodInfo(Class.java:1059)
   at java.lang.Class.isLocalOrAnonymousClass(Class.java:1449)
   at java.lang.Class.getCanonicalName(Class.java:1377)
   at ognl.OgnlRuntime.buildCacheKey(OgnlRuntime.java:1944)
   at ognl.OgnlRuntime.getGetMethod(OgnlRuntime.java:1926)
   at ognl.OgnlRuntime.hasGetMethod(OgnlRuntime.java:1985)
   at ognl.OgnlRuntime.hasGetProperty(OgnlRuntime.java:2045)
   at 
 com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:141)
 {noformat}
 The problem is that the change to buildCacheKey() for 
 https://issues.apache.org/jira/browse/WW-4113 is way to expensive considering 
 how often it is called.
 I'd like to suggest replacing the current buildCacheKey() implementation with 
 this:
 {code:java}
 private static Object buildCacheKey(Class targetClass, String 
 propertyName) {
 return new CacheKey(targetClass, propertyName);
 }
 
 private static final class CacheKey {
 private final Class clazz;
 private final String propertyName;
 public CacheKey(Class clazz, String propertyName) {
 this.clazz = clazz;
 this.propertyName = propertyName;
 }
 
 public boolean equals(Object obj) {
 CacheKey cacheKey = (CacheKey) obj;
 return clazz.equals(cacheKey.clazz)
  propertyName.equals(cacheKey.propertyName);
 }
 
 public int hashCode() {
 return clazz.hashCode() * 31 + propertyName.hashCode();
 }
 }
 {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)