[ https://issues.apache.org/jira/browse/HIVE-22901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17050361#comment-17050361 ]
Hive QA commented on HIVE-22901: -------------------------------- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || || || || || {color:brown} Prechecks {color} || | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 1s{color} | {color:green} The patch does not contain any @author tags. {color} | || || || || {color:brown} master Compile Tests {color} || | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 10m 44s{color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 17s{color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 16s{color} | {color:green} master passed {color} | | {color:blue}0{color} | {color:blue} findbugs {color} | {color:blue} 0m 36s{color} | {color:blue} common in master has 63 extant Findbugs warnings. {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 14s{color} | {color:green} master passed {color} | || || || || {color:brown} Patch Compile Tests {color} || | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 0m 17s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 18s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 18s{color} | {color:green} the patch passed {color} | | {color:red}-1{color} | {color:red} checkstyle {color} | {color:red} 0m 17s{color} | {color:red} common: The patch generated 37 new + 376 unchanged - 0 fixed = 413 total (was 376) {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s{color} | {color:green} The patch has no whitespace issues. {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 0m 42s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 15s{color} | {color:green} the patch passed {color} | || || || || {color:brown} Other Tests {color} || | {color:red}-1{color} | {color:red} asflicense {color} | {color:red} 0m 15s{color} | {color:red} The patch generated 3 ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 14m 36s{color} | {color:black} {color} | \\ \\ || Subsystem || Report/Notes || | Optional Tests | asflicense javac javadoc findbugs checkstyle compile | | uname | Linux hiveptest-server-upstream 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u5 (2017-09-19) x86_64 GNU/Linux | | Build tool | maven | | Personality | /data/hiveptest/working/yetus_PreCommit-HIVE-Build-20932/dev-support/hive-personality.sh | | git revision | master / 9cdf97f | | Default Java | 1.8.0_111 | | findbugs | v3.0.1 | | checkstyle | http://104.198.109.242/logs//PreCommit-HIVE-Build-20932/yetus/diff-checkstyle-common.txt | | asflicense | http://104.198.109.242/logs//PreCommit-HIVE-Build-20932/yetus/patch-asflicense-problems.txt | | modules | C: common U: common | | Console output | http://104.198.109.242/logs//PreCommit-HIVE-Build-20932/yetus.txt | | Powered by | Apache Yetus http://yetus.apache.org | This message was automatically generated. > Variable substitution can lead to OOM on circular references > ------------------------------------------------------------ > > Key: HIVE-22901 > URL: https://issues.apache.org/jira/browse/HIVE-22901 > Project: Hive > Issue Type: Bug > Components: HiveServer2 > Affects Versions: 3.1.2 > Reporter: Daniel Voros > Assignee: Daniel Voros > Priority: Major > Attachments: HIVE-22901.1.patch > > > {{SystemVariables#substitute()}} is dealing with circular references between > variables by only doing the substitution 40 times by default. If the > substituted part is sufficiently large though, it's possible that the > substitution will produce a string bigger than the heap size within the 40 > executions. > Take the following test case that fails with OOM in current master (third > round of execution would need 10G heap, while running with only 2G): > {code} > @Test > public void testSubstitute() { > String randomPart = RandomStringUtils.random(100_000); > String reference = "${hiveconf:myTestVariable}"; > StringBuilder longStringWithReferences = new StringBuilder(); > for(int i = 0; i < 10; i ++) { > longStringWithReferences.append(randomPart).append(reference); > } > SystemVariables uut = new SystemVariables(); > HiveConf conf = new HiveConf(); > conf.set("myTestVariable", longStringWithReferences.toString()); > uut.substitute(conf, longStringWithReferences.toString(), 40); > } > {code} > Produces: > {code} > java.lang.OutOfMemoryError: Java heap space > at java.util.Arrays.copyOf(Arrays.java:3332) > at > java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) > at > java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448) > at java.lang.StringBuilder.append(StringBuilder.java:136) > at > org.apache.hadoop.hive.conf.SystemVariables.substitute(SystemVariables.java:110) > at > org.apache.hadoop.hive.conf.SystemVariablesTest.testSubstitute(SystemVariablesTest.java:27) > {code} > We should check the size of the substituted query and bail out earlier. -- This message was sent by Atlassian Jira (v8.3.4#803005)