[ 
https://issues.apache.org/jira/browse/SPARK-56200?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated SPARK-56200:
-----------------------------------
    Labels: pull-request-available  (was: )

> History Server UI fails with StreamConstraintsException due to excessive JSON 
> nesting depth
> -------------------------------------------------------------------------------------------
>
>                 Key: SPARK-56200
>                 URL: https://issues.apache.org/jira/browse/SPARK-56200
>             Project: Spark
>          Issue Type: Bug
>          Components: Web UI
>    Affects Versions: 4.1.1
>            Reporter: Senmiao Liu
>            Priority: Major
>              Labels: pull-request-available
>
> There is an issue in Spark History Server UI when replaying event logs that 
> contain deeply nested JSON structures.
> With newer Jackson versions, a maximum nesting depth limit (default: 1000) is 
> enforced via {{StreamReadConstraints}} and {{{}StreamWriteConstraints{}}}. 
> During event log replay, parsing fails when this limit is exceeded.
> This results in exceptions such as:
> com.fasterxml.jackson.core.exc.StreamConstraintsException:
> Document nesting depth (1001) exceeds the maximum allowed (1000)
> The failure can occur in:
> {*}Read path{*}: during parsing via {{ObjectMapper.readTree}}
> {*}Write path{*}: when calling {{JsonNode.toString()}} during event processing
> As a result, the History Server fails to load the application UI (HTTP 500) 
> for affected applications.
> h5.  
> Stack trace 
>  
> {code:java}
> HTTP ERROR 500 com.fasterxml.jackson.core.exc.StreamConstraintsException: 
> Document nesting depth (1001) exceeds the maximum allowed (1000, from 
> `StreamReadConstraints.getMaxNestingDepth()`)URI:     
> /history/application_1763026259077_37680319STATUS:      500MESSAGE:     
> com.fasterxml.jackson.core.exc.StreamConstraintsException: Document nesting 
> depth (1001) exceeds the maximum allowed (1000, from 
> `StreamReadConstraints.getMaxNestingDepth()`)SERVLET:  
> org.apache.spark.deploy.history.HistoryServer$$anon$1-2abc8034CAUSED BY:      
>   com.fasterxml.jackson.core.exc.StreamConstraintsException: Document nesting 
> depth (1001) exceeds the maximum allowed (1000, from 
> `StreamReadConstraints.getMaxNestingDepth()`)Caused 
> by:com.fasterxml.jackson.core.exc.StreamConstraintsException: Document 
> nesting depth (1001) exceeds the maximum allowed (1000, from 
> `StreamReadConstraints.getMaxNestingDepth()`)  at 
> com.fasterxml.jackson.core.StreamReadConstraints._constructException(StreamReadConstraints.java:658)
>  at 
> com.fasterxml.jackson.core.StreamReadConstraints.validateNestingDepth(StreamReadConstraints.java:474)
>         at 
> com.fasterxml.jackson.core.base.ParserBase.createChildArrayContext(ParserBase.java:1363)
>      at 
> com.fasterxml.jackson.core.json.ReaderBasedJsonParser._nextAfterName(ReaderBasedJsonParser.java:801)
>  at 
> com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:665)
>       at 
> com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer._deserializeContainerNoRecursion(JsonNodeDeserializer.java:540)
>         at 
> com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:99)
>       at 
> com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:24)
>       at 
> com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
>      at 
> com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:5080)
>         at 
> com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3349) 
> at 
> org.apache.spark.util.JsonProtocol$.sparkEventFromJson(JsonProtocol.scala:938)
>        at 
> org.apache.spark.scheduler.ReplayListenerBus.replay(ReplayListenerBus.scala:89)
>       at 
> org.apache.spark.scheduler.ReplayListenerBus.replay(ReplayListenerBus.scala:60)
>       at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$parseAppEventLogs$3(FsHistoryProvider.scala:1239)
>  at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$parseAppEventLogs$3$adapted(FsHistoryProvider.scala:1237)
>  at 
> org.apache.spark.util.SparkErrorUtils.tryWithResource(SparkErrorUtils.scala:51)
>       at 
> org.apache.spark.util.SparkErrorUtils.tryWithResource$(SparkErrorUtils.scala:48)
>      at org.apache.spark.util.Utils$.tryWithResource(Utils.scala:97) at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$parseAppEventLogs$1(FsHistoryProvider.scala:1237)
>  at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$parseAppEventLogs$1$adapted(FsHistoryProvider.scala:1235)
>  at scala.collection.immutable.List.foreach(List.scala:323)      at 
> org.apache.spark.deploy.history.FsHistoryProvider.parseAppEventLogs(FsHistoryProvider.scala:1235)
>     at 
> org.apache.spark.deploy.history.FsHistoryProvider.rebuildAppStore(FsHistoryProvider.scala:1216)
>       at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$createDiskStore$3(FsHistoryProvider.scala:1446)
>    at 
> org.apache.spark.deploy.history.FsHistoryProvider.$anonfun$createDiskStore$3$adapted(FsHistoryProvider.scala:1445)
>    at 
> org.apache.spark.util.SparkErrorUtils.tryWithResource(SparkErrorUtils.scala:51)
>       at 
> org.apache.spark.util.SparkErrorUtils.tryWithResource$(SparkErrorUtils.scala:48)
>      at org.apache.spark.util.Utils$.tryWithResource(Utils.scala:97) at 
> org.apache.spark.deploy.history.FsHistoryProvider.createDiskStore(FsHistoryProvider.scala:1445)
>       at 
> org.apache.spark.deploy.history.FsHistoryProvider.loadDiskStore(FsHistoryProvider.scala:1353)
>         at 
> org.apache.spark.deploy.history.FsHistoryProvider.getAppUI(FsHistoryProvider.scala:372)
>       at 
> org.apache.spark.deploy.history.HistoryServer.getAppUI(HistoryServer.scala:211)
>       at 
> org.apache.spark.deploy.history.ApplicationCache.$anonfun$loadApplicationEntry$2(ApplicationCache.scala:179)
>  at 
> org.apache.spark.deploy.history.ApplicationCache.time(ApplicationCache.scala:150)
>     at 
> org.apache.spark.deploy.history.ApplicationCache.org$apache$spark$deploy$history$ApplicationCache$$loadApplicationEntry(ApplicationCache.scala:177)
>   at 
> org.apache.spark.deploy.history.ApplicationCache$$anon$1.load(ApplicationCache.scala:67)
>      at 
> org.apache.spark.deploy.history.ApplicationCache$$anon$1.load(ApplicationCache.scala:58)
>      at 
> org.sparkproject.guava.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3551)
>        at 
> org.sparkproject.guava.cache.LocalCache$Segment.loadSync(LocalCache.java:2302)
>        at 
> org.sparkproject.guava.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2177)
>         at 
> org.sparkproject.guava.cache.LocalCache$Segment.get(LocalCache.java:2068)    
> at org.sparkproject.guava.cache.LocalCache.get(LocalCache.java:3986)    at 
> org.sparkproject.guava.cache.LocalCache.getOrLoad(LocalCache.java:4007)      
> at 
> org.sparkproject.guava.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4946)
>   at 
> org.apache.spark.deploy.history.ApplicationCache.get(ApplicationCache.scala:104)
>      at 
> org.apache.spark.deploy.history.ApplicationCache.withSparkUI(ApplicationCache.scala:116)
>      at 
> org.apache.spark.deploy.history.HistoryServer.org$apache$spark$deploy$history$HistoryServer$$loadAppUi(HistoryServer.scala:273)
>       at 
> org.apache.spark.deploy.history.HistoryServer$$anon$1.doGet(HistoryServer.scala:106)
>  at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:500)       at 
> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)       at 
> org.sparkproject.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)  
> at 
> org.sparkproject.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
>     at 
> org.apache.spark.ui.HttpSecurityFilter.doFilter(HttpSecurityFilter.scala:91) 
> at 
> org.sparkproject.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)  
> at 
> org.sparkproject.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
>        at 
> org.sparkproject.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
>       at 
> org.sparkproject.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
>        at 
> org.sparkproject.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
>       at 
> org.sparkproject.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
>         at 
> org.sparkproject.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
>        at 
> org.sparkproject.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
>         at 
> org.sparkproject.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
>        at 
> org.sparkproject.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
>    at 
> org.sparkproject.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
>  at 
> org.sparkproject.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822)
>   at 
> org.sparkproject.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192)
>      at 
> org.sparkproject.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
>  at org.sparkproject.jetty.server.Server.handle(Server.java:563) at 
> org.sparkproject.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
>         at 
> org.sparkproject.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)     
> at org.sparkproject.jetty.server.HttpChannel.handle(HttpChannel.java:501)     
>   at 
> org.sparkproject.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
>      at 
> org.sparkproject.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
>      at 
> org.sparkproject.jetty.io.FillInterest.fillable(FillInterest.java:100)       
> at 
> org.sparkproject.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
>  at 
> org.sparkproject.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
>     at 
> org.sparkproject.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
>         at 
> org.sparkproject.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
>  at 
> org.sparkproject.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:193)
>     at 
> org.sparkproject.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
>         at 
> org.sparkproject.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
>       at 
> org.sparkproject.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
>    at java.base/java.lang.Thread.run(Thread.java:1474) {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to