-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Labels
Milestone
Description
When a GTFS Flex trip contains a mixture of fixed stops and windows and also finishes on a window OTP, like this
route_id,service_id,trip_id,trip_headsign,trip_short_name,direction_id,block_id,shape_id,wheelchair_accessible,bikes_allowed
t_6035171_b_84558_tn_0,11:15:00,11:15:00,4253075,,,1,,0,0,,0,1,1,booking_route_77386,booking_route_77386,,,1.0,0.0,1.0,0.0,
t_6035171_b_84558_tn_0,11:25:00,11:25:00,4253076,,,2,,0,0,,0,1,1,booking_route_77386,booking_route_77386,,,1.0,0.0,1.0,0.0,
t_6035171_b_84558_tn_0,,,,area_1360,,3,,2,1,,0,1,1,booking_route_77386,booking_route_77386,11:38:00,12:40:00,1.0,0.0,1.0,0.0,
t_6035171_b_84558_tn_0,,,,area_1360,,4,,1,2,,0,1,1,booking_route_77386,booking_route_77386,11:38:00,12:40:00,1.0,0.0,1.0,0.0,
then OTP crashes hard during startup.
14:25:50.068 [ERROR] (OTPMain.java:61) An uncaught error occurred inside OTP: java.lang.IllegalArgumentException: Start of the running period is after end of the running period
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Start of the running period is after end of the running period
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:540)
at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:567)
at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:670)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:765)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.RaptorTransitDataMapper.mapTripPatterns(RaptorTransitDataMapper.java:121)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.RaptorTransitDataMapper.map(RaptorTransitDataMapper.java:72)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.RaptorTransitDataMapper.map(RaptorTransitDataMapper.java:60)
at org.opentripplanner.standalone.configure.ConstructApplication.createRaptorTransitData(ConstructApplication.java:230)
at org.opentripplanner.standalone.configure.ConstructApplication.setupTransitRoutingServer(ConstructApplication.java:172)
at org.opentripplanner.standalone.configure.ConstructApplication.createApplication(ConstructApplication.java:164)
at org.opentripplanner.standalone.configure.ConstructApplication.createGrizzlyServer(ConstructApplication.java:125)
at org.opentripplanner.standalone.OTPMain.startOtpWebServer(OTPMain.java:208)
at org.opentripplanner.standalone.OTPMain.startOTPServer(OTPMain.java:174)
at org.opentripplanner.standalone.OTPMain.main(OTPMain.java:56)
Caused by: java.lang.IllegalArgumentException: Start of the running period is after end of the running period
at org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate.assertValidRunningPeriod(TripPatternForDate.java:245)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate.<init>(TripPatternForDate.java:97)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.TripPatternForDateMapper.map(TripPatternForDateMapper.java:98)
at org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.RaptorTransitDataMapper.lambda$mapTripPatterns$0(RaptorTransitDataMapper.java:129)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291)
at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
This is a pretty bad bug as the validation of the trip fails to take flex into account. It's a little unusual to have flex trips start fixed and the finish on window but I'm pretty surprised that we have never seen this before.