You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@jmeter.apache.org by bu...@apache.org on 2014/10/18 14:28:20 UTC

[Bug 57114] New: Performance : Functions that only have values as instance variable should not synchronize execute

https://issues.apache.org/bugzilla/show_bug.cgi?id=57114

            Bug ID: 57114
           Summary: Performance : Functions that only have values as
                    instance variable should not synchronize execute
           Product: JMeter
           Version: Nightly (Please specify date)
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Main
          Assignee: issues@jmeter.apache.org
          Reporter: p.mouawad@ubik-ingenierie.com

As per Ubik Load Pack report:
-----------------------------------------------------------------------------
Reviewing code of Functions in JMeter we don't understand why Functions that
only have values as instance variable (so Beanshell or StringFromFile or
IterationCounter (which could be improved to avoid it) are not concerned)
synchronize on execute.

It appears "values" instance variable is initialized within
StandardJMeterEngine thread and then only accessed in read mode by JMeterThread

But it is true that if synchronized is removed then CompoundVariable is
accessed by multi threads but it seems it uses thread related data so it should
be OK.


-----------------------------------------------------------------------------

And as per dev mailing list :
http://mail-archives.apache.org/mod_mbox/jmeter-dev/201410.mbox/%3CCAB%3DJe-Gy4tp%3DMPih292oG1XpH7D1X0%2BUR%2BUa_rnLyXaUH-fePA%40mail.gmail.com%3E

-- 
You are receiving this mail because:
You are the assignee for the bug.

[Bug 57114] Performance : Functions that only have values as instance variable should not synchronize execute

Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=57114

Vladimir Sitnikov <si...@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |sitnikov.vladimir@gmail.com

--- Comment #1 from Vladimir Sitnikov <si...@gmail.com> ---
Created attachment 32124
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=32124&action=edit
Avoid synchronization where it is not required

I went through sub-classes of AbstractFunction and removed synchronization
where it is not required.
Basically, if a function does not modify state and if it accesses thread-safe
objects only, then synchronization is not required.

Please find the attached patch on top of e9228ccf / trunk@1632410.

Notes:
0) The patch contains just synchronization removal + some corrections to CV.
All the tests pass except
testPropfile(org.apache.jmeter.save.TestSaveService)junit.framework.AssertionFailedError:
Property File Version mismatch, ensure you update SaveService#FILEVERSION field
with revision id of saveservice.properties.

testPropfile fails without patch as well, so I did not investigate that.

1) I have no idea what to do with BeanShell function. bsh.Interpreter is thread
safe, however bshInterpreter.set("vars",...) should not be accessed
concurrently as that will just overwrite the value.
I think it makes sense to wrap bsh interpreter in a ThreadLocal, so
synchronization can be removed from BeanShell.execute

-- 
You are receiving this mail because:
You are the assignee for the bug.

[Bug 57114] Performance : Functions that only have values as instance variable should not synchronize execute

Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=57114

--- Comment #3 from Philippe Mouawad <p....@ubik-ingenierie.com> ---
Date: Mon Oct 27 13:41:47 2014
New Revision: 1634535

URL: http://svn.apache.org/r1634535
Log:
Bug 57114 - Performance : Functions that only have values as instance variable
should not synchronize execute
Remove synchronized on setParameters
Bugzilla Id: 57114

Modified:
   
jmeter/trunk/src/functions/org/apache/jmeter/functions/EscapeOroRegexpChars.java


Date: Mon Oct 27 13:43:01 2014
New Revision: 1634537

URL: http://svn.apache.org/r1634537
Log:
Bug 57114 - Performance : Functions that only have values as instance variable
should not synchronize execute
Remove old TODO
Bugzilla Id: 57114

Modified:
    jmeter/trunk/src/functions/org/apache/jmeter/functions/SamplerName.java


Date: Mon Oct 27 13:42:36 2014
New Revision: 1634536

URL: http://svn.apache.org/r1634536
Log:
Bug 57114 - Performance : Functions that only have values as instance variable
should not synchronize execute
Keep synchronized where it is needed
Bugzilla Id: 57114

Modified:
    jmeter/trunk/src/functions/org/apache/jmeter/functions/LogFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/LogFunction2.java

-- 
You are receiving this mail because:
You are the assignee for the bug.

[Bug 57114] Performance : Functions that only have values as instance variable should not synchronize execute

Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=57114

Philippe Mouawad <p....@ubik-ingenierie.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |p.mouawad@ubik-ingenierie.c
                   |                            |om
         Resolution|---                         |FIXED

--- Comment #2 from Philippe Mouawad <p....@ubik-ingenierie.com> ---
Date: Sun Oct 19 19:53:07 2014
New Revision: 1632983

URL: http://svn.apache.org/r1632983
Log:
Bug 57114 - Performance : Functions that only have values as instance variable
should not synchronize execute
Bugzilla Id: 57114

Modified:
    jmeter/trunk/src/core/org/apache/jmeter/engine/util/CompoundVariable.java
    jmeter/trunk/src/core/org/apache/jmeter/functions/AbstractFunction.java
   
jmeter/trunk/src/functions/org/apache/jmeter/functions/AbstractHostIPName.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/CSVRead.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/CharFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/EscapeHtml.java
   
jmeter/trunk/src/functions/org/apache/jmeter/functions/EscapeOroRegexpChars.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/EvalFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/EvalVarFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/FileToString.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/IntSum.java
   
jmeter/trunk/src/functions/org/apache/jmeter/functions/IterationCounter.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/JavaScript.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/Jexl2Function.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/JexlFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/LogFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/LogFunction2.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/LongSum.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/Property.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/Property2.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/Random.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomString.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/SamplerName.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/SetProperty.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/SplitFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/TestPlanName.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/TimeFunction.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/UnEscape.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/UnEscapeHtml.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/UrlDecode.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/UrlEncode.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/Variable.java
    jmeter/trunk/xdocs/changes.xml

-- 
You are receiving this mail because:
You are the assignee for the bug.