[jboss-jira] [JBoss JIRA] (WFLY-13447) Undertow request failure happens due to "IllegalArgumentException: Comparison method violates its general contract!" when many filter-ref are defined
Masafumi Miura (Jira)
issues at jboss.org
Mon May 11 03:58:00 EDT 2020
[ https://issues.redhat.com/browse/WFLY-13447?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Masafumi Miura updated WFLY-13447:
----------------------------------
Steps to Reproduce:
1. Execute the attached "generate-cli.sh" to generate JBoss CLI script (test.cli) which configures many filter-ref definistion.
2. Execute the generated "test.cli"
{code}
./bin/jboss-cli.sh --file=/path/to/test.cli
{code}
3. Start JBoss EAP 7 with the configuration
{code}
./bin/standalone.sh -c standalone-test.xml
{code}
4. Send a request
{code}
curl -v http://localhost:8080/
{code}
The request fails with "500 Internal Server Error" because of "IllegalArgumentException: Comparison method violates its general contract!"
Workaround Description:
If you really need to define many filter-ref definition, you can work around this issue by adding the following to JAVA_OPTS in standalone.conf:
{code}
JAVA_OPTS="$JAVA_OPTS -Djava.util.Arrays.useLegacyMergeSort=true"
{code}
> Undertow request failure happens due to "IllegalArgumentException: Comparison method violates its general contract!" when many filter-ref are defined
> -----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: WFLY-13447
> URL: https://issues.redhat.com/browse/WFLY-13447
> Project: WildFly
> Issue Type: Bug
> Components: Web (Undertow)
> Affects Versions: 19.1.0.Final
> Reporter: Masafumi Miura
> Assignee: Flavia Rainone
> Priority: Major
> Attachments: generate-cli.sh, test.cli
>
>
> When many filter-ref are defined (theoretically more than 32 filter-ref are defined), Undertow has a possibility fail to process a request with the following ERROR:
> {code}
> ERROR [io.undertow.request] (default I/O-12) UT005071: Undertow request failed HttpServerExchange{ GET /}: java.lang.IllegalArgumentException: Comparison method violates its general contract!
> at java.util.TimSort.mergeLo(TimSort.java:777)
> at java.util.TimSort.mergeAt(TimSort.java:514)
> at java.util.TimSort.mergeCollapse(TimSort.java:441)
> at java.util.TimSort.sort(TimSort.java:245)
> at java.util.Arrays.sort(Arrays.java:1512)
> at java.util.ArrayList.sort(ArrayList.java:1462)
> at org.wildfly.extension.undertow.LocationService.configureHandlerChain(LocationService.java:93)
> at org.wildfly.extension.undertow.Host.configureRootHandler(Host.java:174)
> at org.wildfly.extension.undertow.Host.getOrCreateRootHandler(Host.java:263)
> at org.wildfly.extension.undertow.Host$HostRootHandler.handleRequest(Host.java:430)
> at io.undertow.server.handlers.NameVirtualHostHandler.handleRequest(NameVirtualHostHandler.java:54)
> at io.undertow.server.handlers.error.SimpleErrorPageHandler.handleRequest(SimpleErrorPageHandler.java:78)
> at io.undertow.server.handlers.CanonicalPathHandler.handleRequest(CanonicalPathHandler.java:49)
> at org.wildfly.extension.undertow.Server$DefaultHostHandler.handleRequest(Server.java:190)
> at io.undertow.server.handlers.ChannelUpgradeHandler.handleRequest(ChannelUpgradeHandler.java:211)
> at io.undertow.server.protocol.http2.Http2UpgradeHandler.handleRequest(Http2UpgradeHandler.java:102)
> at io.undertow.server.handlers.DisallowedMethodsHandler.handleRequest(DisallowedMethodsHandler.java:61)
> at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370)
> at io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:255)
> at io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136)
> at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:162)
> at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:100)
> at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:57)
> at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
> at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:291)
> at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:286)
> at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
> at org.xnio.nio.QueuedNioTcpServer2.acceptTask(QueuedNioTcpServer2.java:178)
> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612)
> at org.xnio.nio.WorkerThread.run(WorkerThread.java:479)
> {code}
> The IllegalArgumentException happens when Java's TimSort algorithm happens to detect inconsistency in the comparison. This happens because [the comparator implementation for sorting filter-ref|https://github.com/wildfly/wildfly/blob/19.1.0.Final/undertow/src/main/java/org/wildfly/extension/undertow/LocationService.java#L93] does not follow the contract for comparison.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list