Skip to content

Commit c1962b4

Browse files
committed
Merge remote-tracking branch 'jnction/parallel-raptor-cache' into dev-2.x
2 parents 684025c + 4f24820 commit c1962b4

File tree

137 files changed

+3274
-1542
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+3274
-1542
lines changed

application/src/client/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<link rel="icon" type="image/svg+xml" href="/img/otp-logo.svg" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
<title>OTP Debug</title>
8-
<script type="module" crossorigin src="https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/2024/12/2024-12-12T20:08/assets/index-CBVeE45O.js"></script>
9-
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/2024/12/2024-12-12T20:08/assets/index-DygGy0HD.css">
8+
<script type="module" crossorigin src="https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/2025/01/2025-01-02T15:56/assets/index-DODY0n0n.js"></script>
9+
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/2025/01/2025-01-02T15:56/assets/index-BDL0-veX.css">
1010
</head>
1111
<body>
1212
<div id="root"></div>

application/src/ext/java/org/opentripplanner/ext/flex/FlexIndex.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Map;
99
import org.opentripplanner.ext.flex.trip.FlexTrip;
1010
import org.opentripplanner.model.PathTransfer;
11+
import org.opentripplanner.routing.api.request.StreetMode;
1112
import org.opentripplanner.transit.model.framework.FeedScopedId;
1213
import org.opentripplanner.transit.model.network.Route;
1314
import org.opentripplanner.transit.model.site.GroupStop;
@@ -18,15 +19,19 @@ public class FlexIndex {
1819

1920
private final Multimap<StopLocation, PathTransfer> transfersToStop = ArrayListMultimap.create();
2021

22+
private final Multimap<StopLocation, PathTransfer> transfersFromStop = ArrayListMultimap.create();
23+
2124
private final Multimap<StopLocation, FlexTrip<?, ?>> flexTripsByStop = HashMultimap.create();
2225

2326
private final Map<FeedScopedId, Route> routeById = new HashMap<>();
2427

2528
private final Map<FeedScopedId, FlexTrip<?, ?>> tripById = new HashMap<>();
2629

2730
public FlexIndex(TimetableRepository timetableRepository) {
28-
for (PathTransfer transfer : timetableRepository.getAllPathTransfers()) {
31+
// Flex transfers should only use WALK mode transfers.
32+
for (PathTransfer transfer : timetableRepository.findTransfers(StreetMode.WALK)) {
2933
transfersToStop.put(transfer.to, transfer);
34+
transfersFromStop.put(transfer.from, transfer);
3035
}
3136
for (FlexTrip<?, ?> flexTrip : timetableRepository.getAllFlexTrips()) {
3237
routeById.put(flexTrip.getTrip().getRoute().getId(), flexTrip.getTrip().getRoute());
@@ -47,6 +52,10 @@ public Collection<PathTransfer> getTransfersToStop(StopLocation stopLocation) {
4752
return transfersToStop.get(stopLocation);
4853
}
4954

55+
public Collection<PathTransfer> getTransfersFromStop(StopLocation stopLocation) {
56+
return transfersFromStop.get(stopLocation);
57+
}
58+
5059
public Collection<FlexTrip<?, ?>> getFlexTripsByStop(StopLocation stopLocation) {
5160
return flexTripsByStop.get(stopLocation);
5261
}

application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public TransitStopVertex getStopVertexForStopId(FeedScopedId stopId) {
192192

193193
@Override
194194
public Collection<PathTransfer> getTransfersFromStop(StopLocation stop) {
195-
return transitService.findPathTransfers(stop);
195+
return transitService.getFlexIndex().getTransfersFromStop(stop);
196196
}
197197

198198
@Override

application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.apache.lucene.analysis.standard.StandardAnalyzer;
1919
import org.apache.lucene.codecs.Codec;
2020
import org.apache.lucene.codecs.PostingsFormat;
21-
import org.apache.lucene.codecs.lucene912.Lucene912Codec;
21+
import org.apache.lucene.codecs.lucene101.Lucene101Codec;
2222
import org.apache.lucene.document.Document;
2323
import org.apache.lucene.document.Field.Store;
2424
import org.apache.lucene.document.StoredField;
@@ -34,7 +34,7 @@
3434
import org.apache.lucene.search.FuzzyQuery;
3535
import org.apache.lucene.search.PrefixQuery;
3636
import org.apache.lucene.search.TermQuery;
37-
import org.apache.lucene.search.suggest.document.Completion912PostingsFormat;
37+
import org.apache.lucene.search.suggest.document.Completion101PostingsFormat;
3838
import org.apache.lucene.search.suggest.document.CompletionAnalyzer;
3939
import org.apache.lucene.search.suggest.document.ContextQuery;
4040
import org.apache.lucene.search.suggest.document.ContextSuggestField;
@@ -203,8 +203,8 @@ private StopCluster toStopCluster(Document document) {
203203

204204
static IndexWriterConfig iwcWithSuggestField(Analyzer analyzer, final Set<String> suggestFields) {
205205
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
206-
Codec filterCodec = new Lucene912Codec() {
207-
final PostingsFormat postingsFormat = new Completion912PostingsFormat();
206+
Codec filterCodec = new Lucene101Codec() {
207+
final PostingsFormat postingsFormat = new Completion101PostingsFormat();
208208

209209
@Override
210210
public PostingsFormat getPostingsFormatForField(String field) {
@@ -285,7 +285,7 @@ private Stream<Document> matchingDocuments(
285285
.stream(topDocs.scoreDocs)
286286
.map(scoreDoc -> {
287287
try {
288-
return searcher.doc(scoreDoc.doc);
288+
return searcher.storedFields().document(scoreDoc.doc);
289289
} catch (IOException e) {
290290
throw new RuntimeException(e);
291291
}
@@ -330,7 +330,7 @@ private Stream<Document> matchingDocuments(
330330
.stream(topDocs.scoreDocs)
331331
.map(scoreDoc -> {
332332
try {
333-
return searcher.doc(scoreDoc.doc);
333+
return searcher.storedFields().document(scoreDoc.doc);
334334
} catch (IOException e) {
335335
throw new RuntimeException(e);
336336
}

application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ParkAndRideResource(
4242
// - serverContext.graphFinder(). This needs at least a comment!
4343
// - This can be replaced with a search done with the SiteRepository
4444
// - if we have a radius search there.
45-
this.graphFinder = new DirectGraphFinder(serverContext.transitService()::findRegularStops);
45+
this.graphFinder = new DirectGraphFinder(serverContext.transitService()::findRegularStopsByBoundingBox);
4646
}
4747

4848
/** Envelopes are in latitude, longitude format */

application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ApiWalkStep mapWalkStep(WalkStep domain) {
4242
api.exit = domain.getExit();
4343
api.stayOn = domain.isStayOn();
4444
api.area = domain.getArea();
45-
api.bogusName = domain.getBogusName();
45+
api.bogusName = domain.nameIsDerived();
4646
if (domain.getStartLocation() != null) {
4747
api.lon = domain.getStartLocation().longitude();
4848
api.lat = domain.getStartLocation().latitude();

application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public List<ApiStopShort> getStopsInRadius(
200200

201201
radius = Math.min(radius, MAX_STOP_SEARCH_RADIUS);
202202

203-
return new DirectGraphFinder(serverContext.transitService()::findRegularStops)
203+
return new DirectGraphFinder(serverContext.transitService()::findRegularStopsByBoundingBox)
204204
.findClosestStops(new Coordinate(lon, lat), radius)
205205
.stream()
206206
.map(it -> StopMapper.mapToApiShort(it.stop, it.distance))
@@ -221,10 +221,9 @@ public List<ApiStopShort> getStopsInRadius(
221221
new Coordinate(maxLon, maxLat)
222222
);
223223

224-
var stops = transitService().findRegularStops(envelope);
224+
var stops = transitService().findRegularStopsByBoundingBox(envelope);
225225
return stops
226226
.stream()
227-
.filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate()))
228227
.map(StopMapper::mapToApiShort)
229228
.toList();
230229
}

application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public StopsLayerBuilder(
4444

4545
protected List<Geometry> getGeometries(Envelope query) {
4646
return transitService
47-
.findRegularStops(query)
47+
.findRegularStopsByBoundingBox(query)
4848
.stream()
4949
.filter(filter)
5050
.map(stop -> {

application/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,10 @@ public RequestModes getRequestModes() {
126126
mBuilder.withEgressMode(StreetMode.CAR_HAILING);
127127
mBuilder.withDirectMode(StreetMode.WALK);
128128
} else {
129-
mBuilder.withAccessMode(StreetMode.WALK);
130-
mBuilder.withTransferMode(StreetMode.WALK);
131-
mBuilder.withEgressMode(StreetMode.WALK);
129+
// This is necessary for transfer calculations.
130+
mBuilder.withAccessMode(StreetMode.CAR);
131+
mBuilder.withTransferMode(StreetMode.CAR);
132+
mBuilder.withEgressMode(StreetMode.CAR);
132133
mBuilder.withDirectMode(StreetMode.CAR);
133134
}
134135
}

application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -752,9 +752,8 @@ public DataFetcher<Iterable<Object>> stopsByBbox() {
752752
);
753753

754754
Stream<RegularStop> stopStream = getTransitService(environment)
755-
.findRegularStops(envelope)
756-
.stream()
757-
.filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate()));
755+
.findRegularStopsByBoundingBox(envelope)
756+
.stream();
758757

759758
if (args.getGraphQLFeeds() != null) {
760759
List<String> feedIds = args.getGraphQLFeeds();

application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/stepImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public DataFetcher<Boolean> area() {
3535

3636
@Override
3737
public DataFetcher<Boolean> bogusName() {
38-
return environment -> getSource(environment).getBogusName();
38+
return environment -> getSource(environment).nameIsDerived();
3939
}
4040

4141
@Override

application/src/main/java/org/opentripplanner/apis/gtfs/generated/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
"@graphql-codegen/cli": "5.0.3",
1515
"@graphql-codegen/java": "4.0.1",
1616
"@graphql-codegen/java-resolvers": "3.0.0",
17-
"graphql": "16.9.0"
17+
"graphql": "16.10.0"
1818
}
1919
}

application/src/main/java/org/opentripplanner/apis/gtfs/generated/yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2152,10 +2152,10 @@ graphql-ws@^5.14.0:
21522152
resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.0.tgz#766f249f3974fc2c48fae0d1fb20c2c4c79cd591"
21532153
integrity sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==
21542154

2155-
graphql@16.9.0:
2156-
version "16.9.0"
2157-
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.9.0.tgz#1c310e63f16a49ce1fbb230bd0a000e99f6f115f"
2158-
integrity sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==
2155+
graphql@16.10.0:
2156+
version "16.10.0"
2157+
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.10.0.tgz#24c01ae0af6b11ea87bf55694429198aaa8e220c"
2158+
integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==
21592159

21602160
has-flag@^3.0.0:
21612161
version "3.0.0"

application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static java.lang.Boolean.TRUE;
44
import static java.util.Collections.emptyList;
55
import static org.opentripplanner.apis.transmodel.mapping.SeverityMapper.getTransmodelSeverity;
6+
import static org.opentripplanner.apis.transmodel.mapping.TransitIdMapper.mapIDToDomain;
67
import static org.opentripplanner.apis.transmodel.mapping.TransitIdMapper.mapIDsToDomainNullSafe;
78
import static org.opentripplanner.apis.transmodel.model.EnumTypes.FILTER_PLACE_TYPE_ENUM;
89
import static org.opentripplanner.apis.transmodel.model.EnumTypes.MULTI_MODAL_MODE;
@@ -115,6 +116,7 @@
115116
import org.opentripplanner.routing.graphfinder.PlaceType;
116117
import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace;
117118
import org.opentripplanner.transit.api.model.FilterValues;
119+
import org.opentripplanner.transit.api.request.FindRegularStopsByBoundingBoxRequest;
118120
import org.opentripplanner.transit.api.request.TripRequest;
119121
import org.opentripplanner.transit.model.basic.TransitMode;
120122
import org.opentripplanner.transit.model.framework.FeedScopedId;
@@ -439,10 +441,7 @@ private GraphQLSchema create() {
439441
.build()
440442
)
441443
.dataFetcher(env ->
442-
StopPlaceType.fetchStopPlaceById(
443-
TransitIdMapper.mapIDToDomain(env.getArgument("id")),
444-
env
445-
)
444+
StopPlaceType.fetchStopPlaceById(mapIDToDomain(env.getArgument("id")), env)
446445
)
447446
.build()
448447
)
@@ -576,7 +575,7 @@ private GraphQLSchema create() {
576575
.dataFetcher(environment ->
577576
GqlUtil
578577
.getTransitService(environment)
579-
.getStopLocation(TransitIdMapper.mapIDToDomain(environment.getArgument("id")))
578+
.getStopLocation(mapIDToDomain(environment.getArgument("id")))
580579
)
581580
.build()
582581
)
@@ -610,7 +609,7 @@ private GraphQLSchema create() {
610609
}
611610
TransitService transitService = GqlUtil.getTransitService(environment);
612611
return ((List<String>) environment.getArgument("ids")).stream()
613-
.map(id -> transitService.getStopLocation(TransitIdMapper.mapIDToDomain(id)))
612+
.map(id -> transitService.getStopLocation(mapIDToDomain(id)))
614613
.collect(Collectors.toList());
615614
}
616615
if (environment.getArgument("name") == null) {
@@ -661,15 +660,22 @@ private GraphQLSchema create() {
661660
.build()
662661
)
663662
.argument(
664-
GraphQLArgument.newArgument().name("authority").type(Scalars.GraphQLString).build()
663+
GraphQLArgument
664+
.newArgument()
665+
.name("authority")
666+
.deprecate(
667+
"This is the Transmodel namespace or the GTFS feedID - avoid using this. Request a new field if necessary."
668+
)
669+
.type(Scalars.GraphQLString)
670+
.build()
665671
)
666672
.argument(
667673
GraphQLArgument
668674
.newArgument()
669675
.name("filterByInUse")
670676
.description("If true only quays with at least one visiting line are included.")
671677
.type(Scalars.GraphQLBoolean)
672-
.defaultValue(Boolean.FALSE)
678+
.defaultValueProgrammatic(Boolean.FALSE)
673679
.build()
674680
)
675681
.dataFetcher(environment -> {
@@ -683,24 +689,19 @@ private GraphQLSchema create() {
683689
environment.getArgument("maximumLatitude")
684690
)
685691
);
692+
693+
var authority = environment.<String>getArgument("authority");
694+
var filterInUse = environment.<Boolean>getArgument("filterByInUse");
695+
696+
FindRegularStopsByBoundingBoxRequest findRegularStopsByBoundingBoxRequest = FindRegularStopsByBoundingBoxRequest
697+
.of(envelope)
698+
.withFeedId(authority)
699+
.filterByInUse(filterInUse)
700+
.build();
701+
686702
return GqlUtil
687703
.getTransitService(environment)
688-
.findRegularStops(envelope)
689-
.stream()
690-
.filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate()))
691-
.filter(stop ->
692-
environment.getArgument("authority") == null ||
693-
stop.getId().getFeedId().equalsIgnoreCase(environment.getArgument("authority"))
694-
)
695-
.filter(stop -> {
696-
boolean filterByInUse = TRUE.equals(environment.getArgument("filterByInUse"));
697-
boolean inUse = !GqlUtil
698-
.getTransitService(environment)
699-
.findPatterns(stop, true)
700-
.isEmpty();
701-
return !filterByInUse || inUse;
702-
})
703-
.collect(Collectors.toList());
704+
.findRegularStopsByBoundingBox(findRegularStopsByBoundingBoxRequest);
704705
})
705706
.build()
706707
)
@@ -1438,7 +1439,7 @@ private GraphQLSchema create() {
14381439
.build()
14391440
)
14401441
.dataFetcher(environment -> {
1441-
var bikeParkId = TransitIdMapper.mapIDToDomain(environment.getArgument("id"));
1442+
var bikeParkId = mapIDToDomain(environment.getArgument("id"));
14421443
return GqlUtil
14431444
.getVehicleParkingService(environment)
14441445
.listBikeParks()
@@ -1573,7 +1574,7 @@ private GraphQLSchema create() {
15731574
return GqlUtil
15741575
.getTransitService(environment)
15751576
.getTransitAlertService()
1576-
.getAlertById(TransitIdMapper.mapIDToDomain(situationNumber));
1577+
.getAlertById(mapIDToDomain(situationNumber));
15771578
})
15781579
.build()
15791580
)

application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/PathGuidanceType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public static GraphQLObjectType create(GraphQLObjectType elevationStepType) {
9696
"The name of this street was generated by the system, so we should only display it once, and generally just display right/left directions"
9797
)
9898
.type(Scalars.GraphQLBoolean)
99-
.dataFetcher(environment -> ((WalkStep) environment.getSource()).getBogusName())
99+
.dataFetcher(environment -> ((WalkStep) environment.getSource()).nameIsDerived())
100100
.build()
101101
)
102102
.field(

application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,9 +546,8 @@ public static Collection<MonoOrMultiModalStation> fetchStopPlaces(
546546
);
547547

548548
Stream<Station> stations = transitService
549-
.findRegularStops(envelope)
549+
.findRegularStopsByBoundingBox(envelope)
550550
.stream()
551-
.filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate()))
552551
.map(StopLocation::getParentStation)
553552
.filter(Objects::nonNull)
554553
.distinct();

application/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private static LayerBuilder<?> createLayerBuilder(
183183
case RegularStop -> new StopLayerBuilder<>(
184184
layerParameters,
185185
locale,
186-
e -> context.transitService().findRegularStops(e)
186+
e -> context.transitService().findRegularStopsByBoundingBox(e)
187187
);
188188
case AreaStop -> new StopLayerBuilder<>(
189189
layerParameters,

0 commit comments

Comments
 (0)