Description
Scenario: Two Swim Planes where agents in one Plane send data to another Swim Plane over an unstable network connection. Effectively one SwimPlane (sender) acts as a Client that sends data to another SwimPlane (receiver) i.e. the data is sent in only one direction (not sure if that is relevant here though). Usually the RemoteHostClient reconnects and the data flow continues. Intermittently the RemoteHostClient reconnects but the WarpSocketContext associated with the RemoteHost is null. See stacktrace from the application running in Trafficware:
java.lang.NullPointerException at swim.remote/swim.remote.RemoteHost.pushUp(RemoteHost.java:542) at swim.actor/swim.actor.ActorCell.pushUp(ActorCell.java:122) at swim.runtime/swim.runtime.router.PartTable.pushUp(PartTable.java:622) at swim.actor/swim.actor.ActorCell.pushUp(ActorCell.java:122) at swim.runtime/swim.runtime.router.MeshTable.pushUp(MeshTable.java:670) at swim.actor/swim.actor.ActorCell.pushUp(ActorCell.java:122) at swim.runtime/swim.runtime.router.EdgeTable.pushUp(EdgeTable.java:579) at swim.runtime/swim.runtime.router.EdgeTable.pushDown(EdgeTable.java:568) at swim.runtime/swim.runtime.router.EdgeTableMesh.pushDown(EdgeTableMesh.java:245) at swim.actor/swim.actor.ActorCell.pushDown(ActorCell.java:107) at swim.runtime/swim.runtime.router.MeshTable.pushDown(MeshTable.java:659) at swim.runtime/swim.runtime.router.MeshTablePart.pushDown(MeshTablePart.java:244) at swim.actor/swim.actor.ActorCell.pushDown(ActorCell.java:107) at swim.runtime/swim.runtime.router.PartTable.pushDown(PartTable.java:605) at swim.runtime/swim.runtime.router.PartTableHost.pushDown(PartTableHost.java:222) at swim.actor/swim.actor.ActorCell.pushDown(ActorCell.java:107) at swim.runtime/swim.runtime.router.HostTable.pushDown(HostTable.java:644) at swim.runtime/swim.runtime.router.HostTableNode.pushDown(HostTableNode.java:212) at swim.actor/swim.actor.ActorCell.pushDown(ActorCell.java:107) at swim.runtime/swim.runtime.agent.AgentNode.pushDown(AgentNode.java:526) at swim.runtime/swim.runtime.agent.AgentView.pushDown(AgentView.java:413) at swim.runtime/swim.runtime.AbstractSwimRef.command(AbstractSwimRef.java:163) at swim.runtime/swim.runtime.AbstractSwimRef.command(AbstractSwimRef.java:226) at swim.api/swim.api.agent.AbstractAgent.command(AbstractAgent.java:701) at it.swim.traffic/it.swim.traffic.agent.IntersectionAgent.lambda$new$2(IntersectionAgent.java:169) at swim.runtime/swim.runtime.lane.CommandLaneView.dispatchOnCommand(CommandLaneView.java:173) at swim.runtime/swim.runtime.lane.CommandLaneRelayCommand.runPhase(CommandLaneModel.java:87) at swim.runtime/swim.runtime.lane.CommandLaneRelayCommand.runPhase(CommandLaneModel.java:52) at swim.runtime/swim.runtime.LaneRelay.pass(LaneRelay.java:100) at swim.runtime/swim.runtime.LaneRelay.run(LaneRelay.java:187) at swim.runtime/swim.runtime.agent.AgentNode.runTask(AgentNode.java:699) at swim.concurrent/swim.concurrent.TheaterTask.run(Theater.java:453) at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)