guardian / guardian/dotcom-rendering

Missing Soundcloud track causes 500 response in DCAR

Open
#15,517 0 comments 0 reactions 0 assignees View on GitHub
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.

Image

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.