Andreas Hager created VELOCITY-934:
--------------------------------------

             Summary: NullPointerException under high concurrency
                 Key: VELOCITY-934
                 URL: https://issues.apache.org/jira/browse/VELOCITY-934
             Project: Velocity
          Issue Type: Bug
          Components: Engine
    Affects Versions: 2.2, 1.7.x
         Environment: Windows 10 Professional

            Reporter: Andreas Hager


I adjusted the mboseke/template-benchmark to profile throughput on AMD Ryzen 
5950x:

[https://github.com/casid/template-benchmark/tree/ryzen-5950x]

With 32 concurrent threads, I can reliably reproduce a runtime exception in the 
Apache Velocity benchmark:
{code:java}
java.lang.NullPointerException
        at 
org.apache.velocity.runtime.directive.Directive.postRender(Directive.java:240)
        at org.apache.velocity.runtime.directive.Foreach.clean(Foreach.java:325)
        at 
org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:292)
        at 
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:301)
        at 
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:423)
        at org.apache.velocity.Template.merge(Template.java:358)
        at org.apache.velocity.Template.merge(Template.java:262)
        at com.mitchellbosecke.benchmark.Velocity.benchmark(Velocity.java:34)
        at 
com.mitchellbosecke.benchmark.generated.Velocity_benchmark_jmhTest.benchmark_thrpt_jmhStub(Velocity_benchmark_jmhTest.java:122)
        at 
com.mitchellbosecke.benchmark.generated.Velocity_benchmark_jmhTest.benchmark_Throughput(Velocity_benchmark_jmhTest.java:69)
        at jdk.internal.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at 
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:430)
        at 
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:412)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

{code}
This initially happened with version 1.7, but after updating to 2.2 the problem 
is still there. It looks like there is some threading issue under high 
concurrency.

This is the velocity benchmark class:

[https://github.com/casid/template-benchmark/blob/ryzen-5950x/src/main/java/com/mitchellbosecke/benchmark/Velocity.java]

And this is the velocity template:

[https://github.com/casid/template-benchmark/blob/ryzen-5950x/src/main/resources/templates/stocks.velocity.html]

 

 

 

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to