[
https://issues.apache.org/jira/browse/TRAFODION-1141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Suresh Subbiah updated TRAFODION-1141:
--------------------------------------
Attachment: udf_bug.tar
> LP Bug: 1441378 - UDF: Multi-valued scalar UDF with clob/blob cores sqlci
> with SIGSEGV
> --------------------------------------------------------------------------------------
>
> Key: TRAFODION-1141
> URL: https://issues.apache.org/jira/browse/TRAFODION-1141
> Project: Apache Trafodion
> Issue Type: Bug
> Components: sql-exe
> Reporter: Weishiun Tsai
> Assignee: Suresh Subbiah
> Priority: Critical
> Fix For: 2.0-incubating
>
> Attachments: udf_bug.tar
>
>
> While a single-valued scalar UDF works fine with the clob or blob data type.
> A multi-valued scalar UDF cores sqlci with SIGSEGV even with just 2 clob or
> blob output values.
> Since clob and blob data types require large buffers, I am assuming this type
> of scalar UDF is stressing the heap used internally somewhere. But a core is
> always bad. If there is a limit on how clob and blob can be handled in a
> scalar UDF, a check should be put in place and an error should be returned
> more gracefully.
> This is seen on the v0407 build installed on a workstation. To reproduce it:
> (1) Download the attached tar file and untar it to get the 3 files in there.
> Put the files in any directory <mydir>.
> (2) Make sure that you have run ./sqenv.sh of your Trafodion instance first
> as building UDF needs $MY_SQROOT for the header files.
> (3) run build.sh
> (4) Change the line “create library qa_udf_lib file '<mydir>/myudf.so';”; in
> mytest.sql and fill in <mydir>
> (5) From sqlci, obey mytest.sql
> -----------------------------------------------------------
> Here is the execution output:
> >>create schema mytest;
> --- SQL operation complete.
> >>set schema mytest;
> --- SQL operation complete.
> >>
> >>create library qa_udf_lib file '<mydir>/myudf.so';
> --- SQL operation complete.
> >>
> >>create function qa_udf_clob
> +>(INVAL clob)
> +>returns (c_clob clob)
> +>language c
> +>parameter style sql
> +>external name 'qa_func_vcstruct'
> +>library qa_udf_lib
> +>deterministic
> +>state area size 1024
> +>allow any parallelism
> +>no sql;
> --- SQL operation complete.
> >>
> >>create function qa_udf_blob
> +>(INVAL blob)
> +>returns (c_blob blob)
> +>language c
> +>parameter style sql
> +>external name 'qa_func_vcstruct'
> +>library qa_udf_lib
> +>deterministic
> +>state area size 1024
> +>allow any parallelism
> +>no sql;
> --- SQL operation complete.
> >>
> >>create function qa_udf_clob_mvf
> +>(INVAL clob)
> +>returns (c_clob1 clob, c_clob2 clob)
> +>language c
> +>parameter style sql
> +>external name 'qa_func_vcstruct_mvf'
> +>library qa_udf_lib
> +>deterministic
> +>state area size 1024
> +>allow any parallelism
> +>no sql;
> --- SQL operation complete.
> >>
> >>create function qa_udf_blob_mvf
> +>(INVAL blob)
> +>returns (c_blob1 blob, c_blob2 blob)
> +>language c
> +>parameter style sql
> +>external name 'qa_func_vcstruct_mvf'
> +>library qa_udf_lib
> +>deterministic
> +>state area size 1024
> +>allow any parallelism
> +>no sql;
> --- SQL operation complete.
> >>
> >>create table mytable (c_clob clob, c_blob blob);
> --- SQL operation complete.
> >>insert into mytable values ('CLOB_1', 'BLOB_1');
> --- 1 row(s) inserted.
> >>
> >>select
> +>cast(qa_udf_clob(c_clob) as char(10)),
> +>cast(qa_udf_blob(c_blob) as char(10))
> +>from mytable;
> (EXPR) (EXPR)
> ---------- ----------
> CLOB_1 BLOB_1
> --- 1 row(s) selected.
> >>
> >>select qa_udf_clob_mvf(c_clob) from mytable;
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x00007ffff4c5b9a2, pid=18680, tid=140737187650592
> #
> # JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build
> 1.7.0_67-b01)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode
> linux-amd64 compressed oops)
> # Problematic frame:
> # C [libexecutor.so+0x2489a2] ExSimpleSQLBuffer::init(NAMemory*)+0x92
> #
> # Core dump written. Default location: <mydir>/core or core.18680
> #
> # An error report file with more information is saved as:
> # <mydir>/hs_err_pid18680.log
> #
> # If you would like to submit a bug report, please visit:
> # http://bugreport.sun.com/bugreport/crash.jsp
> #
> Aborted (core dumped)
> -----------------------------------------------------------
> Here is the stack trace of the core.
> (gdb) bt
> #0 0x00000039e28328a5 in raise () from /lib64/libc.so.6
> #1 0x00000039e283400d in abort () from /lib64/libc.so.6
> #2 0x00007ffff7120a55 in os::abort(bool) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #3 0x00007ffff72a0f87 in VMError::report_and_die() ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #4 0x00007ffff72a150e in crash_handler(int, siginfo*, void*) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #5 0x00007ffff711fbf2 in os::Linux::chained_handler(int, siginfo*, void*) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #6 0x00007ffff71258d6 in JVM_handle_linux_signal ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #7 <signal handler called>
> #8 0x00007ffff7140ce9 in ParallelScavengeHeap::block_start(void const*) const
> () from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #9 0x00007ffff71182b0 in os::print_location(outputStream*, long, bool) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #10 0x00007ffff71252bb in os::print_register_info(outputStream*, void*) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #11 0x00007ffff729f57c in VMError::report(outputStream*) ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #12 0x00007ffff72a0b8a in VMError::report_and_die() ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #13 0x00007ffff712596f in JVM_handle_linux_signal ()
> from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
> #14 <signal handler called>
> #15 init (this=0x7fffe971a910, heap=0x7fffe96c90e8) at ../exp/ExpSqlTupp.h:441
> #16 init (this=0x7fffe971a910, heap=0x7fffe96c90e8)
> at ../executor/ExSimpleSqlBuffer.h:71
> #17 ExSimpleSQLBuffer::init (this=0x7fffe971a910, heap=0x7fffe96c90e8)
> at ../executor/ExSimpleSqlBuffer.cpp:237
> #18 0x00007ffff4c5bbc9 in ExSimpleSQLBuffer::ExSimpleSQLBuffer (
> this=<value optimized out>, numberTuples=18432, tupleSize=200016,
> heap=0x7fffe96c90e8) at ../executor/ExSimpleSqlBuffer.cpp:79
> #19 0x00007ffff4c4774f in ExProbeCacheTcb::ExProbeCacheTcb (
> this=0x7fffe971a838, probeCacheTdb=..., child_tcb=...,
> glob=0x7fffe96ea640)
> at ../executor/ExProbeCache.cpp:85
> #20 0x00007ffff4c47af6 in ExProbeCacheTdb::build (this=0x7fffd5786c88,
> glob=<value optimized out>) at ../executor/ExProbeCache.cpp:45
> #21 0x00007ffff4b6c831 in ExOnljTdb::build (this=0x7fffd5786dd8,
> glob=0x7fffe96ea640) at ../executor/ex_onlj.cpp:66
> #22 0x00007ffff4b75171 in ex_root_tdb::build (this=0x7fffd57840c8,
> cliGlobals=0xb84320, glob=0x7fffe96ea640) at ../executor/ex_root.cpp:206
> #23 0x00007ffff5fa7295 in CliStatement::fixup (this=0x7fffe96b8db8,
> cliGlobals=0xb84320, input_desc=<value optimized out>, diagsArea=...,
> doSimCheck=@0x7fffffff2018, partitionUnavailable=@0x7fffffff201c,
> donePrepare=0) at ../cli/Statement.cpp:2953
> #24 0x00007ffff5fac0e1 in CliStatement::execute (this=0x7fffe96b8db8,
> cliGlobals=0xb84320, input_desc=0x7fffe96c8128,
> diagsArea=<value optimized out>, execute_state=<value optimized out>,
> fixupOnly=0, cliflags=0) at ../cli/Statement.cpp:3990
> #25 0x00007ffff5f5425c in SQLCLI_PerformTasks(CliGlobals *, ULng32,
> SQLSTMT_ID *, SQLDESC_ID *, SQLDESC_ID *, Lng32, Lng32, typedef __va_list_tag
> __va_list_tag *, SQLCLI_PTR_PAIRS *, SQLCLI_PTR_PAIRS *)
> (cliGlobals=0xb84320, tasks=4882,
> statement_id=0x1e1cfe0, input_descriptor=0x223e190, output_descriptor=0x0,
> num_input_ptr_pairs=0, num_output_ptr_pairs=0, ap=0x7fffffff21b0,
> input_ptr_pairs=0x0, output_ptr_pairs=0x0) at ../cli/Cli.cpp:3285
> #26 0x00007ffff5f54f92 in SQLCLI_Exec(CliGlobals *, SQLSTMT_ID *, SQLDESC_ID
> *, Lng32, typedef __va_list_tag __va_list_tag *, SQLCLI_PTR_PAIRS *) (
> cliGlobals=<value optimized out>, statement_id=<value optimized out>,
> input_descriptor=<value optimized out>,
> num_ptr_pairs=<value optimized out>, ap=<value optimized out>,
> ptr_pairs=<value optimized out>) at ../cli/Cli.cpp:3532
> #27 0x00007ffff5fbb27b in SQL_EXEC_Exec (statement_id=0x1e1cfe0,
> input_descriptor=0x223e190, num_ptr_pairs=0) at ../cli/CliExtern.cpp:2071
> #28 0x00007ffff79cc81b in SqlCmd::doExec (sqlci_env=0xb830f0, stmt=0x1e1cfe0,
> prep_stmt=<value optimized out>, numUnnamedParams=<value optimized out>,
> unnamedParamArray=<value optimized out>,
> unnamedParamCharSetArray=<value optimized out>, handleError=1)
> at ../sqlci/SqlCmd.cpp:1780
> #29 0x00007ffff79cd212 in SqlCmd::do_execute (sqlci_env=0xb830f0,
> prep_stmt=0x1e1f020, numUnnamedParams=0, unnamedParamArray=0x0,
> unnamedParamCharSetArray=0x0, prepcode=0) at ../sqlci/SqlCmd.cpp:2116
> #30 0x00007ffff79cd93d in DML::process (this=0x223f860, sqlci_env=0xb830f0)
> at ../sqlci/SqlCmd.cpp:2890
> #31 0x00007ffff79b37f4 in Obey::process (this=0xb85460,
> sqlci_env=<value optimized out>) at ../sqlci/Obey.cpp:264
> #32 0x00007ffff79bbfd4 in SqlciEnv::run (this=0xb830f0,
> in_filename=<value optimized out>, input_string=<value optimized out>)
> at ../sqlci/SqlciEnv.cpp:726
> #33 0x00000000004019c2 in main (argc=3, argv=0x7fffffff3d18)
> at ../bin/SqlciMain.cpp:326
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)