You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafodion.apache.org by "David Wayne Birdsall (JIRA)" <ji...@apache.org> on 2015/12/11 22:13:46 UTC

[jira] [Commented] (TRAFODION-1705) JVM crashes when trying to populate Trafodion table with a long key

    [ https://issues.apache.org/jira/browse/TRAFODION-1705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15053568#comment-15053568 ] 

David Wayne Birdsall commented on TRAFODION-1705:
-------------------------------------------------

By the way, the DDL in this example was derived from DDL in JIRA TRAFODION-1618. So it may be that long keys cause multiple issues.

> JVM crashes when trying to populate Trafodion table with a long key
> -------------------------------------------------------------------
>
>                 Key: TRAFODION-1705
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-1705
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: dtm
>    Affects Versions: 2.0-incubating, 1.3-incubating
>         Environment: I encountered this problem on a workstation, but I expect it will happen anywhere.
>            Reporter: David Wayne Birdsall
>
> The following script run in sqlci produces a JVM crash:
> ?section createit
> CREATE TABLE  t807e
> (
> C1 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C2 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C3 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C4 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C5 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C6 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C7 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C8 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C9 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C10 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C11 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C12 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C13 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C14 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C15 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C16 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C17 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C18 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C19 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C215 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' NOT NULL NOT DROPPABLE SERIALIZED
> , C300 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C301 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C302 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C303 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C304 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C305 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C306 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C307 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C308 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C309 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C310 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C311 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C312 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C313 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C314 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C315 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C316 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C317 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C318 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C319 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C320 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C321 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C322 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C323 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C324 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C325 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C326 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C327 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C328 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C329 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C330 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C331 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C332 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C333 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C334 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C335 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C336 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C337 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C338 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C339 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C340 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C341 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , C342 VARCHAR(50 CHARS) CHARACTER SET UTF8
> COLLATE DEFAULT DEFAULT _UTF8'' SERIALIZED
> , PRIMARY KEY (C4 ASC, C5 ASC, C3 ASC, C2 ASC, C215 ASC, C1
> ASC)
> )
> SALT USING 4 PARTITIONS
> ON (C3)
> ;
> ?section populateit
> -- put some data into the table
> upsert into t807e (c4,c5,c3,c2,c215,c1)
> select 
>   cast(x1 as varchar(50)),
>   cast(x2+10*x3 as varchar(50)),
>   cast(x4+10*x5+100*x6+1000*x7 as varchar(50)),
>   cast(x1+x2+10*x3+x4+10*x5+100*x6+1000*x7 as varchar(50)),
>   cast(10*x1+x2 as varchar(50)),
>   cast(10*x2+x7 as varchar(50))
> -- the from clause below creates 2,000,000 rows, the cross product of
> -- 6 copies of { 0, ... 9 } and one copy of { 0, 1 }
>   from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) T(x1)
> transpose 0,1,2,3,4,5,6,7,8,9 as x2
> transpose 0,1,2,3,4,5,6,7,8,9 as x3
> transpose 0,1,2,3,4,5,6,7,8,9 as x4  -- was 0,1,2 when it worked
> transpose 0,1 as x5
> transpose 0,1 as x6
> transpose 0,1 as x7;
> The CREATE statement runs fine. When the UPSERT statement is executed, sqlci fails as follows:
> >>upsert into t807e (c4,c5,c3,c2,c215,c1)
> +>select 
> +>  cast(x1 as varchar(50)),
> +>  cast(x2+10*x3 as varchar(50)),
> +>  cast(x4+10*x5+100*x6+1000*x7 as varchar(50)),
> +>  cast(x1+x2+10*x3+x4+10*x5+100*x6+1000*x7 as varchar(50)),
> +>  cast(10*x1+x2 as varchar(50)),
> +>  cast(10*x2+x7 as varchar(50))
> +>-- the from clause below creates 2,000,000 rows, the cross product of
> +>-- 6 copies of { 0, ... 9 } and one copy of { 0, 1 }
> +>  from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) T(x1)
> +>transpose 0,1,2,3,4,5,6,7,8,9 as x2
> +>transpose 0,1,2,3,4,5,6,7,8,9 as x3
> +>transpose 0,1,2,3,4,5,6,7,8,9 as x4  -- was 0,1,2 when it worked
> +>transpose 0,1 as x5
> +>transpose 0,1 as x6
> +>transpose 0,1 as x7;
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  SIGSEGV (0xb) at pc=0x0000000000000000, pid=25205, tid=140737353948128
> #
> # JRE version: OpenJDK Runtime Environment (7.0_91) (build 1.7.0_91-mockbuild_2015_10_21_19_56-b00)
> # Java VM: OpenJDK 64-Bit Server VM (24.91-b01 mixed mode linux-amd64 compressed oops)
> # Derivative: IcedTea 2.6.2
> # Distribution: CentOS release 6.7 (Final), package rhel-2.6.2.2.el6_7-x86_64 u91-b00
> # Problematic frame:
> # C  0x0000000000000000
> #
> # Core dump written. Default location: /mnt/birdsall/Trafodion807/core or core.25205 (max size 1000000 kB). To ensure a full core dump, try "ulimit -c unlimited" before starting Java again
> #
> # An error report file with more information is saved as:
> # /tmp/jvm-25205/hs_error.log
> #
> # If you would like to submit a bug report, please include
> # instructions on how to reproduce the bug and visit:
> #   http://icedtea.classpath.org/bugzilla
> # The crash happened outside the Java Virtual Machine in native code.
> # See problematic frame for where to report the bug.
> #
> Aborted (core dumped)
> Debugging this, the root cause is that in module TransactionState.java, we copy a TransactionRegionLocation object into a byte array, for passing to the native method, registerRegion. That method is expecting an object of at most 2048 bytes. However in this example, the length of the byte array is 2465 bytes. The C++ native method registerRegion does a memcpy into a stack variable of length 2048, and passes this along with the length value of 2465 to C++ method TM_Transaction::register_region. That method does another memcpy of this data into another local stack variable, but uses the length 2465 passed in. We get unlucky this time and the buffer overrun overwrites part of the stack frame with the return address. When this method tries to return, we get the crash observed above.
> So, in a nutshell, the problem is the DTM code implicitly imposes a limit on the key size of Trafodion objects and fails catastrophically when this limit is exceeded.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)