[ https://issues.apache.org/jira/browse/TRAFODION-1705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jian Jin updated TRAFODION-1705: -------------------------------- Assignee: mashengchen > 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 > Assignee: mashengchen > > 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)