* Fix for issue #25616 I haven't had a chance to test this, but it looks to me that this is the solution to issue #25616. My stacktrace in this issue is this: ``` java.lang.NullPointerException at eu.phy_awaas.irods.typed.lockingsystem.IRODSLockManagerSpec.$anonfun$new$20(IRODSLockManagerSpec.scala:91) at akka.actor.testkit.typed.internal.TestProbeImpl.loop$1(TestProbeImpl.scala:189) at akka.actor.testkit.typed.internal.TestProbeImpl.loop$1(TestProbeImpl.scala:201) at akka.actor.testkit.typed.internal.TestProbeImpl.fishForMessage_internal(TestProbeImpl.scala:215) at akka.actor.testkit.typed.internal.TestProbeImpl.fishForMessage_internal(TestProbeImpl.scala:45) at akka.actor.testkit.typed.scaladsl.TestProbe.fishForMessage(TestProbe.scala:175) at akka.actor.testkit.typed.scaladsl.TestProbe.fishForMessage$(TestProbe.scala:174) at akka.actor.testkit.typed.internal.TestProbeImpl.fishForMessage(TestProbeImpl.scala:45) at akka.actor.testkit.typed.scaladsl.TestProbe.fishForMessage(TestProbe.scala:181) at akka.actor.testkit.typed.scaladsl.TestProbe.fishForMessage$(TestProbe.scala:180) at akka.actor.testkit.typed.internal.TestProbeImpl.fishForMessage(TestProbeImpl.scala:45) at eu.phy_awaas.irods.typed.lockingsystem.IRODSLockManagerSpec.$anonfun$new$18(IRODSLockManagerSpec.scala:88) at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85) at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83) at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104) at org.scalatest.Transformer.apply(Transformer.scala:22) at org.scalatest.Transformer.apply(Transformer.scala:20) at org.scalatest.WordSpecLike$$anon$1.apply(WordSpecLike.scala:1078) at org.scalatest.TestSuite.withFixture(TestSuite.scala:196) at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195) at org.scalatest.WordSpec.withFixture(WordSpec.scala:1881) at org.scalatest.WordSpecLike.invokeWithFixture$1(WordSpecLike.scala:1076) at org.scalatest.WordSpecLike.$anonfun$runTest$1(WordSpecLike.scala:1088) at org.scalatest.SuperEngine.runTestImpl(Engine.scala:289) at org.scalatest.WordSpecLike.runTest(WordSpecLike.scala:1088) at org.scalatest.WordSpecLike.runTest$(WordSpecLike.scala:1070) at org.scalatest.WordSpec.runTest(WordSpec.scala:1881) at org.scalatest.WordSpecLike.$anonfun$runTests$1(WordSpecLike.scala:1147) at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:396) at scala.collection.immutable.List.foreach(List.scala:389) at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:384) at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:373) at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:410) at scala.collection.immutable.List.foreach(List.scala:389) at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:384) at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:373) at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:410) at scala.collection.immutable.List.foreach(List.scala:389) at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:384) at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:379) at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:461) at org.scalatest.WordSpecLike.runTests(WordSpecLike.scala:1147) at org.scalatest.WordSpecLike.runTests$(WordSpecLike.scala:1146) at org.scalatest.WordSpec.runTests(WordSpec.scala:1881) at org.scalatest.Suite.run(Suite.scala:1147) at org.scalatest.Suite.run$(Suite.scala:1129) at org.scalatest.WordSpec.org$scalatest$WordSpecLike$$super$run(WordSpec.scala:1881) at org.scalatest.WordSpecLike.$anonfun$run$1(WordSpecLike.scala:1192) at org.scalatest.SuperEngine.runImpl(Engine.scala:521) at org.scalatest.WordSpecLike.run(WordSpecLike.scala:1192) at org.scalatest.WordSpecLike.run$(WordSpecLike.scala:1190) at eu.phy_awaas.irods.typed.lockingsystem.IRODSLockManagerSpec.org$scalatest$BeforeAndAfterAll$$super$run(IRODSLockManagerSpec.scala:22) at org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:213) at org.scalatest.BeforeAndAfterAll.run(BeforeAndAfterAll.scala:210) at org.scalatest.BeforeAndAfterAll.run$(BeforeAndAfterAll.scala:208) at eu.phy_awaas.irods.typed.lockingsystem.IRODSLockManagerSpec.run(IRODSLockManagerSpec.scala:22) at org.scalatest.tools.SuiteRunner.run(SuiteRunner.scala:45) at org.scalatest.tools.Runner$.$anonfun$doRunRunRunDaDoRunRun$13(Runner.scala:1340) at org.scalatest.tools.Runner$.$anonfun$doRunRunRunDaDoRunRun$13$adapted(Runner.scala:1334) at scala.collection.immutable.List.foreach(List.scala:389) at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:1334) at org.scalatest.tools.Runner$.$anonfun$runOptionallyWithPassFailReporter$24(Runner.scala:1031) at org.scalatest.tools.Runner$.$anonfun$runOptionallyWithPassFailReporter$24$adapted(Runner.scala:1010) at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:1500) at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1010) at org.scalatest.tools.Runner$.run(Runner.scala:850) at org.scalatest.tools.Runner.run(Runner.scala) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:131) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:28) ``` With the calling code looking like this: ```scala val lockResults = probe.fishForMessage(Duration.create(10000, "ms"))(l => { r += 1 if (r < 5) { l.lock.use(())//crash happens here FishingOutcomes.continue } else { l.lock.use(()) FishingOutcomes.complete } }) ``` It's pretty obvious receiveOne(timeout) returns a null when it receives nothing before the timeout, passes that along to my fisher function, which tries to perform work on the supposed message only to get a null instead. * Added missing brace * Manually formatted my code the way akka likes I don't have the set up to compile this right now, so I just manually inserted the formatting that jenkins mentioned. * More changes to fit the akka formatting standard * Test for the new assertion error when fishing times out. * Cleaned up a flaw I added from when I initially put this in async spec |
||
|---|---|---|
| .github | ||
| akka-actor/src/main | ||
| akka-actor-testkit-typed/src | ||
| akka-actor-tests/src/test | ||
| akka-actor-typed/src/main | ||
| akka-actor-typed-tests/src/test | ||
| akka-agent/src | ||
| akka-bench-jmh | ||
| akka-camel/src | ||
| akka-cluster | ||
| akka-cluster-metrics/src | ||
| akka-cluster-sharding/src | ||
| akka-cluster-sharding-typed/src | ||
| akka-cluster-tools/src | ||
| akka-cluster-typed/src | ||
| akka-contrib | ||
| akka-distributed-data/src | ||
| akka-docs/src | ||
| akka-multi-node-testkit/src/main | ||
| akka-osgi/src | ||
| akka-persistence/src | ||
| akka-persistence-query/src | ||
| akka-persistence-shared/src/test/scala/akka/persistence | ||
| akka-persistence-tck/src | ||
| akka-persistence-typed/src | ||
| akka-protobuf/src/main/java/akka/protobuf | ||
| akka-remote/src | ||
| akka-remote-tests/src | ||
| akka-slf4j/src | ||
| akka-ssl-config/src/main/scala/com/lightbend/sslconfig/akka | ||
| akka-stream/src/main | ||
| akka-stream-testkit/src | ||
| akka-stream-tests/src/test | ||
| akka-stream-tests-tck/src/test | ||
| akka-stream-typed/src | ||
| akka-testkit/src | ||
| project | ||
| scripts | ||
| src/main/ls | ||
| .gitignore | ||
| .java-version | ||
| .travis.yml | ||
| build.sbt | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| COPYING.protobuf | ||
| LICENSE | ||
| README.md | ||
| RELEASING.md | ||
Akka 
We believe that writing correct concurrent & distributed, resilient and elastic applications is too hard. Most of the time it's because we are using the wrong tools and the wrong level of abstraction.
Akka is here to change that.
Using the Actor Model we raise the abstraction level and provide a better platform to build correct concurrent and scalable applications. This model is a perfect match for the principles laid out in the Reactive Manifesto.
For resilience, we adopt the "Let it crash" model which the telecom industry has used with great success to build applications that self-heal and systems that never stop.
Actors also provide the abstraction for transparent distribution and the basis for truly scalable and fault-tolerant applications.
Learn more at akka.io.
Reference Documentation
The reference documentation is available at doc.akka.io, for Scala and Java.
Community
You can join these groups and chats to discuss and ask Akka related questions:
- Forums: discuss.akka.io
- Chat room about using Akka:
- Issue tracker:
In addition to that, you may enjoy following:
- The news section of the page, which is updated whenever a new version is released
- The Akka Team Blog
- @akkateam on Twitter
- Questions tagged #akka on StackOverflow
- Projects built with Akka:
Contributing
Contributions are very welcome!
If you see an issue that you'd like to see fixed, the best way to make it happen is to help out by submitting a pull request implementing it.
Refer to the CONTRIBUTING.md file for more details about the workflow, and general hints on how to prepare your pull request. You can also ask for clarifications or guidance in GitHub issues directly, or in the akka/dev chat if a more real time communication would be of benefit.
A chat room is available for all questions related to developing and contributing to Akka:
License
Akka is Open Source and available under the Apache 2 License.