guardian / guardian/dotcom-rendering
Missing Soundcloud track causes 500 response in DCAR
- Dominant language
- TypeScript
- Stars
- 274
- Forks
- 34
- Avg merge
- 2d 22h
- Merged PRs (30d)
- 121
Description
The following article fails to render in DCAR, although it still works in frontend:
https://www.theguardian.com/culture/2014/apr/28/justice-league-good-morning-britain-and-dj-rashad-todays-pop-culture-news-live?dcr=false
The error message in the logs looks something like this:
```
java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern\n\tat
java.base/java.net.URLDecoder.decode(URLDecoder.java:236)\n\tat
java.base/java.net.URLDecoder.decode(URLDecoder.java:151)\n\tat
views.support.cleaner.SoundcloudHelper$.getTrackIdFromUrl(SoundcloudHelper.scala:26)\n\tat
model.dotcomrendering.pageElements.PageElement$.$anonfun$extractSoundcloudBlockElement$1(PageElement.scala:2021)\n\tat scala.Option.flatMap(Option.scala:283)\n\tat
model.dotcomrendering.pageElements.PageElement$.extractSoundcloudBlockElement(PageElement.scala:2020)\n\tat
model.dotcomrendering.pageElements.PageElement$.$anonfun$embedToPageElement$4(PageElement.scala:2172)\n\tat scala.Option.map(Option.scala:242)\n\tat
model.dotcomrendering.pageElements.PageElement$.$anonfun$embedToPageElement$1(PageElement.scala:2163)\n\tat scala.Option.flatMap(Option.scala:283)\n\tat
model.dotcomrendering.pageElements.PageElement$.embedToPageElement(PageElement.scala:2162)\n\tat model.dotcomrendering.pageElements.PageElement$.make(PageElement.scala:1238)\n\tat
model.dotcomrendering.DotcomRenderingUtils$.$anonfun$blockElementsToPageElements$3(DotcomRenderingUtils.scala:248)\n\tat scala.collection.immutable.List.flatMap(List.scala:283)\n\tat
model.dotcomrendering.DotcomRenderingUtils$.blockElementsToPageElements(DotcomRenderingUtils.scala:234)\n\tat model.dotcomrendering.Block$.apply(DotcomRenderingSupportTypes.scala:128)\n\tat
model.dotcomrendering.DotcomRenderingDataModel$.$anonfun$apply$18(DotcomRenderingDataModel.scala:581)\n\tat scala.collection.immutable.List.map(List.scala:240)\n\tat
scala.collection.immutable.List.map(List.scala:79)\n\tat
model.dotcomrendering.DotcomRenderingDataModel$.apply(DotcomRenderingDataModel.scala:606)\n\tat
model.dotcomrendering.DotcomRenderingDataModel$.forArticle(DotcomRenderingDataModel.scala:252)\n\tat
renderers.DotcomRenderingService.baseArticleRequest(DotcomRenderingService.scala:242)\n\tat
renderers.DotcomRenderingService.getArticle(DotcomRenderingService.scala:213)\n\tat
controllers.ArticleController.render(ArticleController.scala:110)\n\tat
controllers.ArticleController.$anonfun$mapAndRender$1(ArticleController.scala:44)\n\tat
controllers.ArticleController.$anonfun$mapModel$2(ArticleController.scala:136)\n\tat
scala.concurrent.impl.Promise$Transformation.run(Promise.scala:503)\n\tat
org.apache.pekko.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:72)\n\tat
org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:109)\n\tat scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)\n\tat
scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)\n\tat
org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:109)\n\tat
org.apache.pekko.dispatch.TaskInvocation.run(AbstractDispatcher.scala:59)\n\tat
org.apache.pekko.dispatch.ForkJoinExecutorConfigurator$PekkoForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:62)\n\tat java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)\n\tat
java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)\n\tat
java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)\n\tat
java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)\n\tat
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)\n
```
My read on this is that the missing Soundcloud track is causing the whole page to fall over. If this is the case, we should gracefully degrade to some error message in the embed, similar to how frontend handles it.
This article has seen a [recent surge in requests](https://logs.gutools.co.uk/s/dotcom/app/discover#/view/8c22b4b1-dbcc-48cf-ad68-bdcf28b901f9?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d,to:now))&_a=(breakdownField:app.keyword,columns:!(app,logger_name,level,message,request.pageId),dataSource:(dataViewId:'30b53647-82f1-5f16-b66b-630273e9fda3',type:dataView),filters:!(),grid:(),interval:auto,query:(language:kuery,query:%22%2Fculture%2F2014%2Fapr%2F28%2Fjustice-league-good-morning-britain-and-dj-rashad-todays-pop-culture-news-live%22),sort:!(!('@timestamp',desc)))), but is not normally highly visited.
Contributor guide
Assessment
This issue has not been assessed yet.