Core dump accessing MD table descriptors

Bug #1393529 reported by Roberta Marton
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Trafodion
Fix Committed
High
Roberta Marton

Bug Description

When running one of the regressions tests I get a core dump when authorization is enabled. Turning on authorization causes a read on the OBJECTS table for a histograms table during NATable construction time. The lookup is needed to get the OBJECT_UID associated with a Histograms table.

Core dump:

#0 0x0000003e3bc328a5 in raise () from /lib64/libc.so.6
#1 0x0000003e3bc3400d in abort () from /lib64/libc.so.6
#2 0x00007ffff6e5ba55 in os::abort(bool) () from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
#3 0x00007ffff6fdbf87 in VMError::report_and_die() () from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
#4 0x00007ffff6e6096f in JVM_handle_linux_signal () from /opt/home/tools/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so
#5 <signal handler called>
#6 0x0000003e3bd32d5f in __strlen_sse42 () from /lib64/libc.so.6
#7 0x00007fffee92eb45 in Generator::createVirtualTableDesc (inTableName=0x14d57d8 "TRAFODION.\"_MD_\".OBJECTS", numCols=12,
    columnInfo=0x7fffd458d998, numKeys=4, keyInfo=0x7fffd458de80, numConstrs=0, constrInfo=0x0, numIndexes=1,
    indexInfo=0x7fffd458f408, numViews=0, viewInfo=0x0, tableInfo=0x0, seqInfo=0x0) at ../generator/Generator.cpp:1299
#8 0x00007ffff0e5935e in CmpSeabaseDDL::getSeabaseMDTableDesc (this=0x7ffffffdaa60, catName=..., schName=..., objName=...,
    objType=0x7fffef884bdc "BT") at ../sqlcomp/CmpSeabaseDDLtable.cpp:5567
#9 0x00007ffff0e5d792 in CmpSeabaseDDL::getSeabaseTableDesc (this=0x7ffffffdaa60, catName=..., schName=..., objName=...,
    objType=0x7fffef884bdc "BT", includeInvalidDefs=0) at ../sqlcomp/CmpSeabaseDDLtable.cpp:6637
#10 0x00007fffef522970 in NATableDB::get (this=0x7fffd416a6b8, corrName=..., bindWA=0x7ffffffdd3e0, inTableDescStruct=0x0)
    at ../optimizer/NATable.cpp:7639
#11 0x00007fffef281c18 in BindWA::getNATable (this=0x7ffffffdd3e0, corrName=..., catmanCollectTableUsages=1,
    inTableDescStruct=0x0) at ../optimizer/BindRelExpr.cpp:1446
#12 0x00007fffef299c6d in Scan::bindNode (this=0x7fffd45a7d68, bindWA=0x7ffffffdd3e0) at ../optimizer/BindRelExpr.cpp:7262
#13 0x00007fffef28509d in RelExpr::bindChildren (this=0x7fffd45acd70, bindWA=0x7ffffffdd3e0)
    at ../optimizer/BindRelExpr.cpp:2181
#14 0x00007fffef291a5b in RelRoot::bindNode (this=0x7fffd45acd70, bindWA=0x7ffffffdd3e0) at ../optimizer/BindRelExpr.cpp:5204
#15 0x00007ffff0e0fd7d in CmpMain::compile (this=0x7ffffffdf740,
    input_str=0x7fffd45bf480 "select object_uid from TRAFODION.\"_MD_\".OBJECTS where catalog_name = 'TRAFODION' and schema_name = 'SCH' and object_name = 'SB_HISTOGRAMS' and object_type = 'BT'", charset=15, queryExpr=@0x7ffffffdf648,
    gen_code=0x7fffd459e750, gen_code_len=0x7fffd459e748, heap=0x7fffd4b2c9a0, phase=CmpMain::END, fragmentDir=0x7ffffffdf898,
    op=3004, useQueryCache=1, cacheable=0x7ffffffdf634, begTime=0x7ffffffdf650, shouldLog=0) at ../sqlcomp/CmpMain.cpp:2019

. . .

The root cause is that the “indexInfo” structure contains an invalid pointer for hbaseCreateOptions. Here is what indexInfo looks like:

p *indexInfo
$2 = {baseTableName = 0x7fffd458f458 "TRAFODION.\"_MD_\".OBJECTS",
  indexName = 0x7fffd458f480 "TRAFODION.\"_MD_\".OBJECTS_UNIQ_IDX", keytag = 1, isUnique = 1, isExplicit = 1, keyColCount = 1,
  nonKeyColCount = 4, hbaseCreateOptions = 0x69f6bc7069f6bc7 <Address 0x69f6bc7069f6bc7 out of bounds>,
  numSaltPartns = -736345216, keyInfoArray = 0x7fffd458ee70, nonKeyInfoArray = 0x7fffd458f260}

When investigating, I see that the OBJECTS table description is stored in the CmpContext during construction. This code sets up the ComTdbVirtTableIndexInfo structure:

struct ComTdbVirtTableIndexInfo
{
  const char * baseTableName;
  const char * indexName;
  Lng32 keytag;
  Lng32 isUnique;
  Lng32 isExplicit;
  Lng32 keyColCount;
  Lng32 nonKeyColCount;
  const char * hbaseCreateOptions;
  Lng32 numSaltPartns; // num of salted partitions this index was created with.

  const ComTdbVirtTableKeyInfo * keyInfoArray;
  const ComTdbVirtTableKeyInfo * nonKeyInfoArray;
};

When I looked at the code that sets up this structure, hbaseCreateOptions & numSaltPartns were not being initialized.

Changed in trafodion:
importance: Undecided → High
assignee: nobody → Roberta Marton (roberta-marton)
Changed in trafodion:
status: New → In Progress
Revision history for this message
Roberta Marton (roberta-marton) wrote :

This fix was delivered as part of I0445bc9765b60becb9adf8c053c05344395aecaa.

Changed in trafodion:
status: In Progress → Fix Committed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.