NPE on Validation

I am seeing sometime in my tests: It seems to be comming from gatling scala files. Seems like none are my test scala file. When I individually run those tests. they are fine. Can you help to find out where this NPE comes from? I am using M3a version.

[ERROR] [07/30/2013 11:19:20.494] [GatlingSystem-akka.actor.default-dispatcher-18] [akka://GatlingSystem/user/$MA] null
java.lang.NullPointerException
at io.gatling.core.util.TypeHelper$TypeCaster$.asValidation$extension(TypeHelper.scala:29)
at io.gatling.core.session.SessionAttribute$$anonfun$validate$1.apply(Session.scala:39)
at io.gatling.core.session.SessionAttribute$$anonfun$validate$1.apply(Session.scala:39)
at scala.Option.map(Option.scala:145)
at io.gatling.core.session.SessionAttribute.validate(Session.scala:39)
at io.gatling.core.session.AttributePart.apply(EL.scala:33)
at io.gatling.core.session.EL$$anonfun$compile$3$$anonfun$7.apply(EL.scala:109)
at io.gatling.core.session.EL$$anonfun$compile$3$$anonfun$7.apply(EL.scala:109)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at io.gatling.core.session.EL$$anonfun$compile$3.apply(EL.scala:109)
at io.gatling.core.session.EL$$anonfun$compile$3.apply(EL.scala:108)
at io.gatling.http.request.builder.AbstractHttpRequestBuilder.getAHCRequestBuilder(AbstractHttpRequestBuilder.scala:196)
at io.gatling.http.request.builder.AbstractHttpRequestBuilder$$anonfun$build$1.apply(AbstractHttpRequestBuilder.scala:208)
at io.gatling.http.request.builder.AbstractHttpRequestBuilder$$anonfun$build$1.apply(AbstractHttpRequestBuilder.scala:208)
at io.gatling.http.action.HttpRequestAction$$anonfun$executeOrFail$1.apply(HttpRequestAction.scala:81)
at io.gatling.http.action.HttpRequestAction$$anonfun$executeOrFail$1.apply(HttpRequestAction.scala:80)
at io.gatling.core.validation.Success.flatMap(Validation.scala:28)
at io.gatling.http.action.HttpRequestAction.executeOrFail(HttpRequestAction.scala:80)
at io.gatling.core.action.Failable$class.execute(Actions.scala:82)
at io.gatling.http.action.HttpRequestAction.execute(HttpRequestAction.scala:54)
at io.gatling.core.action.Action$$anonfun$receive$1.applyOrElse(Actions.scala:42)
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:166)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

11:19:20.495 [ERROR] i.g.h.a.HttpRequestAction - Action HttpRequestAction crashed, forwarding user to next one
java.lang.NullPointerException: null
at io.gatling.core.util.TypeHelper$TypeCaster$.asValidation$extension(TypeHelper.scala:29) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.SessionAttribute$$anonfun$validate$1.apply(Session.scala:39) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.SessionAttribute$$anonfun$validate$1.apply(Session.scala:39) ~[gatling-core-2.0.0-M3a.jar:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.10.2.jar:na]
at io.gatling.core.session.SessionAttribute.validate(Session.scala:39) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.AttributePart.apply(EL.scala:33) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.EL$$anonfun$compile$3$$anonfun$7.apply(EL.scala:109) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.EL$$anonfun$compile$3$$anonfun$7.apply(EL.scala:109) ~[gatling-core-2.0.0-M3a.jar:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library-2.10.2.jar:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library-2.10.2.jar:na]
at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-library-2.10.2.jar:na]
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) ~[scala-library-2.10.2.jar:na]
at scala.collection.AbstractTraversable.map(Traversable.scala:105) ~[scala-library-2.10.2.jar:na]
at io.gatling.core.session.EL$$anonfun$compile$3.apply(EL.scala:109) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.core.session.EL$$anonfun$compile$3.apply(EL.scala:108) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.http.request.builder.AbstractHttpRequestBuilder.getAHCRequestBuilder(AbstractHttpRequestBuilder.scala:196) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.http.request.builder.AbstractHttpRequestBuilder$$anonfun$build$1.apply(AbstractHttpRequestBuilder.scala:208) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.http.request.builder.AbstractHttpRequestBuilder$$anonfun$build$1.apply(AbstractHttpRequestBuilder.scala:208) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.http.action.HttpRequestAction$$anonfun$executeOrFail$1.apply(HttpRequestAction.scala:81) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.http.action.HttpRequestAction$$anonfun$executeOrFail$1.apply(HttpRequestAction.scala:80) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.core.validation.Success.flatMap(Validation.scala:28) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.http.action.HttpRequestAction.executeOrFail(HttpRequestAction.scala:80) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.core.action.Failable$class.execute(Actions.scala:82) ~[gatling-core-2.0.0-M3a.jar:na]
at io.gatling.http.action.HttpRequestAction.execute(HttpRequestAction.scala:54) ~[gatling-http-2.0.0-M3a.jar:na]
at io.gatling.core.action.Action$$anonfun$receive$1.applyOrElse(Actions.scala:42) ~[gatling-core-2.0.0-M3a.jar:na]
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:166) ~[scala-library-2.10.2.jar:na]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425) ~[akka-actor_2.10-2.1.4.jar:na]
at akka.actor.ActorCell.invoke(ActorCell.scala:386) ~[akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230) ~[akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.Mailbox.run(Mailbox.scala:212) ~[akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506) [akka-actor_2.10-2.1.4.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.10.2.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.10.2.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.10.2.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.2.jar:na]

You somehow managed to store a null value in the Session.
I’ve fixed the NPE though: https://github.com/excilys/gatling/issues/1321

Thanks for reporting,

Stéphane

In some situations, i was trying to clean up the session variables to avoid OOM like this:

session.set(“bodyString”, null).

I thought that is the way to clean up the session and release the memory to hold the varible. Since some of my cases can hold the session for hours and when a lot of sessions start up, it causes OOM. So I have to clean them up right after finished. Is that causing the problem?

Also what is the best way to clean the sessions varables?

The clean idea is good, but the implementation is very wrong! null is evil!

That’s session.remove(“bodyString”)

ahh, exactly that is what I want. I didn’t find any documentation mentioning this.

That can go back to some of my request before: good documentation with examples on gatling each version can be really helpful.

Thx!
Shawna