Bug 1035973 - SmooksAction with XML-to-Java enum mapping may throw an exception under heavy load
Summary: SmooksAction with XML-to-Java enum mapping may throw an exception under heavy...
Keywords:
Status: NEW
Alias: None
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: JBossESB
Version: 5.3.1
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: ---
: ---
Assignee: Nobody
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-11-29 05:10 UTC by Tadayoshi Sato
Modified: 2021-10-15 11:52 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed:
Type: Bug
Embargoed:


Attachments (Terms of Use)
reproducer (12.42 KB, application/zip)
2013-11-29 05:10 UTC, Tadayoshi Sato
no flags Details


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker JBESB-3961 0 Major Open SmooksAction with XML-to-Java enum mapping may throw an exception under heavy load 2017-05-01 02:56:26 UTC

Description Tadayoshi Sato 2013-11-29 05:10:48 UTC
Created attachment 830475 [details]
reproducer

Platform BZ for https://issues.jboss.org/browse/JBESB-3961

Under heavy load (more that 10 requests per second), SmooksAction sometimes throws an exception like the following. Note that this error may occur only if SmooksAction has the Smooks config of XML-to-Java mapping which involves enum type mapping with default value specified (see attached reproducer project).

----------
org.milyn.SmooksException: Unable to filter InputStream for target profile [org.milyn.profile.Profile#default_profile].
	at org.milyn.delivery.dom.SmooksDOMFilter.filter(SmooksDOMFilter.java:294)
	at org.milyn.delivery.dom.SmooksDOMFilter.doFilter(SmooksDOMFilter.java:243)
	at org.milyn.delivery.dom.SmooksDOMFilter.doFilter(SmooksDOMFilter.java:216)
	at org.milyn.Smooks._filter(Smooks.java:516)
	at org.milyn.Smooks.filterSource(Smooks.java:475)
	at org.milyn.container.plugin.PayloadProcessor.process(PayloadProcessor.java:112)
	at org.jboss.soa.esb.smooks.SmooksAction.process(SmooksAction.java:217)
	at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:667)
	at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:614)
	at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.process(ActionProcessingPipeline.java:442)
	at org.jboss.soa.esb.listeners.message.MessageAwareListener$TransactionalRunner.run(MessageAwareListener.java:587)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)
Caused by: org.milyn.expression.ExpressionEvaluationException: Error evaluating MVEL expression 'this.type = (com.redhat.samples.esb.model.Type.X);' against object type 'com.redhat.samples.esb.model.Hello'. Common issues include:
		1. Referencing a variable that is not bound into the context. In this case use the 'isdef' operator to check if the variable is bound in the context.
		2. Invalid expression reference to a List/Array based variable token.  Example List/Array referencing expression token: 'order.orderItems[0].productId'.
	at org.milyn.expression.MVELExpressionEvaluator.exec(MVELExpressionEvaluator.java:110)
	at org.milyn.expression.MVELExpressionEvaluator.exec(MVELExpressionEvaluator.java:115)
	at org.milyn.javabean.BeanInstanceCreator.createAndSetBean(BeanInstanceCreator.java:269)
	at org.milyn.javabean.BeanInstanceCreator.visitBefore(BeanInstanceCreator.java:210)
	at org.milyn.delivery.dom.SmooksDOMFilter$ElementProcessor.processMapping(SmooksDOMFilter.java:759)
	at org.milyn.delivery.dom.SmooksDOMFilter$ElementProcessor.process(SmooksDOMFilter.java:710)
	at org.milyn.delivery.dom.SmooksDOMFilter$ElementProcessor.access$000(SmooksDOMFilter.java:666)
	at org.milyn.delivery.dom.SmooksDOMFilter.filter(SmooksDOMFilter.java:385)
	at org.milyn.delivery.dom.SmooksDOMFilter.filter(SmooksDOMFilter.java:317)
	at org.milyn.delivery.dom.SmooksDOMFilter.filter(SmooksDOMFilter.java:292)
	... 13 more
Caused by: [Error: value X]
[Near : {... this.type = (com.redhat.sample ....}]
             ^
[Line: 1, Column: 1]
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:883)
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.optimizeAccessor(ASMAccessorOptimizer.java:243)
	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.optimize(DynamicGetAccessor.java:90)
	at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:64)
	at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108)
	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38)
	at org.mvel2.ast.Substatement.getReducedValueAccelerated(Substatement.java:44)
	at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38)
	at org.mvel2.ast.DeepAssignmentNode.getReducedValueAccelerated(DeepAssignmentNode.java:92)
	at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
	at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:126)
	at org.mvel2.MVEL.executeExpression(MVEL.java:930)
	at org.milyn.expression.MVELExpressionEvaluator.exec(MVELExpressionEvaluator.java:99)
	... 22 more
Caused by: java.lang.IllegalArgumentException: value X
	at org.mvel2.asm.ClassWriter.newConstItem(ClassWriter.java:906)
	at org.mvel2.asm.MethodWriter.visitLdcInsn(MethodWriter.java:1014)
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.getBeanProperty(ASMAccessorOptimizer.java:1229)
	at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:758)
	... 34 more
----------

Comment 1 Tadayoshi Sato 2013-11-29 05:16:41 UTC
Comment on attachment 830475 [details]
reproducer

See README.md in the reproducer first for how to run it.

This reproduer uses Gatling (http://gatling-tool.org/) stress tool and runs 300 requests per second for 1 minute. In my environment, it always reproduces the issue in the first run.

Note that it requires huge thread resources so you may need to tune JBoss ESB server before running the reproducer. In my environment (Fedora 19), I've done the following performance tuning to run it:

- JAVA_OPTS="-Xms2048m -Xmx2048m -Xss256k ..." in bin/run.conf
- Configured HTTP/1.1 Connector's 'maxThreads' to 4096 in $PROFILE/deploy/jbossweb.sar/server.xml
- ulimit -s 1024

Comment 2 JBoss JIRA Server 2013-11-29 08:50:39 UTC
Tadayoshi Sato <tadayosi> made a comment on jira JBESB-3961

Just for information, I've tried upgrading Smooks from 1.4.2 to 1.5.1 ({{deployers/esb.deployer/lib/milyn-smooks-all-1.4.2.jar}} -> {{deployers/esb.deployer/lib/milyn-smooks-all-1.5.1.jar}}), but the same issue still happens.


Note You need to log in before you can comment on or make changes to this bug.