Closed abyrd closed 5 years ago
The same problem can be seen when fetching a completed regional analysis. In that case the URL fetched is https://analysis-staging.conveyal.com/api/regional/[ID]/grid/grid?redirect=false
and the resulting stack trace is very similar, except that our code causing the database problem is in RegionalAnalysisController.java:99
instead of BrokerController.java:243
.
In both cases this is a call finding an element in Persistence.regionalAnalyses
by ID. It's probably failing because the backend doesn't know how to deserialize these custom modification types, which are known only to the worker.
Note this reference chain in the stack trace: Unrecognized Type: [null] (through reference chain: com.conveyal.taui.models.RegionalAnalysis["request"]->com.conveyal.r5.analyst.cluster.RegionalTask["scenario"]->com.conveyal.r5.analyst.scenario.Scenario["modifications"]->java.util.ArrayList[0])
.
The backend is saving the list of modifications in each regional analysis, after they are converted to R5 modifications. It attempts to deserialize these into R5 objects whenever it fetches the regional analysis.
@trevorgerhardt has pointed out that we're already excluding the scenarios from being fetched at https://github.com/conveyal/analysis-backend/blob/dev/src/main/java/com/conveyal/taui/controllers/RegionalAnalysisController.java#L61
but this is in only one endpoint. There are at least two other places we can make this exclusion.
In the future we may want to store the UI/backend version of the modifications, or not store them at all and clean them out of the database entirely, since the R5 modifications are always saved on S3 as a JSON file for each regional analysis.
I'm running a regional analysis on staging of the Basel region, using a car-wait modification. All frontend requests for job status are failing with a 400 response code, with a stacktrace from the backend implicating a MongoDB fetch. This seems to fail consistently on staging but on production it's returning a valid jobs list.