Gatling and Netty version conflicts

1,116 views
Skip to first unread message

Michael Kohout

unread,
Mar 26, 2018, 3:26:54 PM3/26/18
to Gatling User Group
Hi All-

I'm a new gatling(v2.3.1) user who is trying to use gatling to test a spring webflux application.

I'm getting the following error, and I believe it's because async-http-client version 2.0.39 has it's own set of netty classes.

I'm using the com.github.lkishalmi.gatling gradle plugin(v0.7.1).  Is there any way to force gatling to use a later version of async-http-client, which seems to not have the same problem?

thanks
Michael Kohout


12:25:07.529 [GatlingSystem-akka.actor.default-dispatcher-2] ERROR io.gatling.core.action.SingletonFeed - Actor io.gatling.core.action.SingletonFeed@4eee70c6 crashed on message Some(FeedMessage(Session(basic lookup works,1,Map(gatling.http.cache.dns -> io.gatling.http.resolver.ShuffleJdkNameResolver@1da9af62),1522085107500,0,OK,List(),io.gatling.core.protocol.ProtocolComponentsRegistry$$Lambda$529/79283217@2652f539),io.gatling.core.session.package$ExpressionSuccessWrapper$$$Lambda$332/1612031141@71ca83dd,Actor[akka://GatlingSystem/user/gatling-controller#-538863318],io.gatling.http.action.sync.HttpRequestAction@4c1fb562))
io.netty.channel.ChannelException: Unable to create Channel from class class io.netty.channel.socket.nio.NioSocketChannel
at io.netty.channel.ReflectiveChannelFactory.newChannel(ReflectiveChannelFactory.java:41) ~[netty-resolver-dns-2.0.39.jar:4.1.17.Final]
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:320) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:163) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:119) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.channel.pool.SimpleChannelPool.connectChannel(SimpleChannelPool.java:266) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.channel.pool.SimpleChannelPool.acquireHealthyFromPoolOrNew(SimpleChannelPool.java:179) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.channel.pool.SimpleChannelPool.acquire(SimpleChannelPool.java:164) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at io.netty.channel.pool.SimpleChannelPool.acquire(SimpleChannelPool.java:158) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]
at reactor.ipc.netty.resources.DefaultPoolResources$Pool.acquire(DefaultPoolResources.java:124) ~[reactor-netty-0.7.2.RELEASE.jar:0.7.2.RELEASE]
at reactor.ipc.netty.tcp.TcpClient.lambda$newHandler$1(TcpClient.java:197) ~[reactor-netty-0.7.2.RELEASE.jar:0.7.2.RELEASE]
at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:53) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3077) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.FluxRetryPredicate$RetryPredicateSubscriber.resubscribe(FluxRetryPredicate.java:123) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoRetryPredicate.subscribe(MonoRetryPredicate.java:51) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.ipc.netty.http.client.MonoHttpClientResponse.subscribe(MonoHttpClientResponse.java:79) ~[reactor-netty-0.7.2.RELEASE.jar:0.7.2.RELEASE]
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.MonoFlatMapMany.subscribe(MonoFlatMapMany.java:49) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.FluxTake.subscribe(FluxTake.java:56) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.Flux.subscribe(Flux.java:6869) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at reactor.core.publisher.BlockingIterable.iterator(BlockingIterable.java:80) ~[reactor-core-3.1.4.RELEASE.jar:3.1.4.RELEASE]
at scala.collection.convert.Wrappers$JIterableWrapper.iterator(Wrappers.scala:51) ~[scala-library-2.12.4.jar:?]
at offerComparator.Comparator.$anonfun$skuFeeder$1(Comparator.scala:38) ~[gatling/:?]
at io.gatling.core.action.builder.FeedBuilder.newSingletonFeed(FeedBuilder.scala:38) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.action.builder.FeedBuilder.$anonfun$build$1(FeedBuilder.scala:43) ~[gatling-core-2.3.1.jar:2.3.1]
at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:82) ~[scala-library-2.12.4.jar:?]
at io.gatling.core.action.builder.FeedBuilder.build(FeedBuilder.scala:43) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.structure.StructureBuilder.$anonfun$build$1(StructureBuilder.scala:34) ~[gatling-core-2.3.1.jar:2.3.1]
at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:122) ~[scala-library-2.12.4.jar:?]
at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:118) ~[scala-library-2.12.4.jar:?]
at scala.collection.immutable.List.foldLeft(List.scala:86) ~[scala-library-2.12.4.jar:?]
at io.gatling.core.structure.StructureBuilder.build(StructureBuilder.scala:33) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.structure.StructureBuilder.build$(StructureBuilder.scala:32) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.structure.ScenarioBuilder.build(ScenarioBuilder.scala:38) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.structure.PopulationBuilder.build(ScenarioBuilder.scala:98) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.core.scenario.SimulationParams.$anonfun$scenarios$1(Simulation.scala:188) ~[gatling-core-2.3.1.jar:2.3.1]
at scala.collection.immutable.List.map(List.scala:283) ~[scala-library-2.12.4.jar:?]
at io.gatling.core.scenario.SimulationParams.scenarios(Simulation.scala:188) ~[gatling-core-2.3.1.jar:2.3.1]
at io.gatling.app.Runner.run0(Runner.scala:95) ~[gatling-app-2.3.1.jar:2.3.1]
at io.gatling.app.Runner.run(Runner.scala:64) ~[gatling-app-2.3.1.jar:2.3.1]
at io.gatling.app.Gatling$.start(Gatling.scala:63) ~[gatling-app-2.3.1.jar:2.3.1]
at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45) ~[gatling-app-2.3.1.jar:2.3.1]
at io.gatling.app.Gatling$.main(Gatling.scala:37) ~[gatling-app-2.3.1.jar:2.3.1]
at io.gatling.app.Gatling.main(Gatling.scala) ~[gatling-app-2.3.1.jar:2.3.1]
Caused by: java.lang.NoSuchMethodError: io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;
at io.netty.channel.AbstractChannel.newId(AbstractChannel.java:111) ~[netty-transport-4.1.17.Final.jar:4.1.17.Final]

Stéphane LANDELLE

unread,
Mar 26, 2018, 3:34:46 PM3/26/18
to gat...@googlegroups.com
You're the one messing up with dependency versions. Both Gatling 2.3.1 and AHC 2.0.39 depends on Netty 4.0.56.
You can't force Netty 4.1.17.

Stéphane Landelle
GatlingCorp CEO


--
You received this message because you are subscribed to the Google Groups "Gatling User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gatling+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Message has been deleted

Stéphane LANDELLE

unread,
Mar 27, 2018, 3:27:48 PM3/27/18
to gat...@googlegroups.com
That won't probably work. Feeder is Iterator[Map[String, Any]] and it's not intended to block/be suspended.

Stéphane Landelle
GatlingCorp CEO


On Mon, Mar 26, 2018 at 10:23 PM, Michael Kohout <mwko...@gmail.com> wrote:
Thanks for the reply.

I'm trying to reuse some application code in order to build a Feeder-this code uses project reactor, which relies on Netty 4.1.  I'm doing this because the source of Feeder data is a reactive/streaming API("application/stream+json") that exposes a great deal of data.  

Do you have any suggestions on a way to consume this data for use by a Feeder using the libraries available?

Mike
To unsubscribe from this group and stop receiving emails from it, send an email to gatling+u...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages