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: [email protected]
For additional commands, e-mail: [email protected]