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

Ramin Gharib reassigned FLINK-41062:
------------------------------------

    Assignee: Moritz Manner

> PARSE_XML and TRY_PARSE_XML can run out of memory for large documents
> ---------------------------------------------------------------------
>
>                 Key: FLINK-41062
>                 URL: https://issues.apache.org/jira/browse/FLINK-41062
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Runtime
>            Reporter: Moritz Manner
>            Assignee: Moritz Manner
>            Priority: Major
>
> {{PARSE_XML}} reads the whole document into an intermediate tree before it 
> writes the {{{}VARIANT{}}}. The tree is a lot larger than the input: a 40 MB 
> document with 10 million empty elements needs between 2 and 3 GB of heap.
> The parser limits the nesting depth, entity expansion, name length and number 
> of attributes, but not the size of the input or the number of elements. The 
> 16 MB limit of a {{VARIANT}} is only checked when the variant is built, after 
> the tree is complete.
> An {{OutOfMemoryError}} isn’t caught, so {{TRY_PARSE_XML}} doesn’t return 
> {{NULL}} for such a document, and the job fails. With enough heap, the same 
> document returns {{{}NULL{}}}, because the variant would be larger than 16 
> MB. The generated code also keeps the last read document until the next 
> record.
> Query to reproduce:
> {noformat}
> SELECT TRY_PARSE_XML(CONCAT('<a>', REPEAT('<b/>', 10000000), 
> '</a>'));{noformat}
>  
> With 2 GB of heap, this fails with {{{}java.lang.OutOfMemoryError: Java heap 
> space{}}}. With 3 GB, it returns {{{}NULL{}}}.
>  



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

Reply via email to