You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafodion.apache.org by "Suresh Subbiah (JIRA)" <ji...@apache.org> on 2016/06/07 17:01:21 UTC

[jira] [Created] (TRAFODION-2038) ERROR[2006] Internal error: assertion failure ((Int32)outputDataLen >= 0) during compile

Suresh Subbiah created TRAFODION-2038:
-----------------------------------------

             Summary:  ERROR[2006] Internal error: assertion failure ((Int32)outputDataLen >= 0) during compile
                 Key: TRAFODION-2038
                 URL: https://issues.apache.org/jira/browse/TRAFODION-2038
             Project: Apache Trafodion
          Issue Type: Bug
          Components: sql-cmp
    Affects Versions: 1.3-incubating
            Reporter: Suresh Subbiah
            Assignee: Howard Qin


When certain query with a long varchar column in a predicate are compiled we get the following error intermittently

*** ERROR[2006] Internal error: assertion failure ((Int32)outputDataLen >= 0) in file ../exp/exp_conv.cpp at line 4557.

Problem occurs when a SQL compiler gets a query that is similar to what it has seen before and can can therefore give a cached plan. The problem occurs when the plan is backpatched to account for differences (i.e. does not show on initial compile, or when query gets an identical text cache hit).

It can be worked around with any one of these cqds, each one being more specific than previous one.

cqd query_cache '0';
cqd hybrid_query_cache 'off' ;
cqd QUERY_CACHE_USE_CONVDOIT_FOR_BACKPATCH 'off' ;

Analysis by Sandhya and Arvind is below.
(0000897)
ssubbiah	(developer) 
2016-06-06 14:14

This issue needs another round of debugging but from the Qcache point of view. Here is what we found . The assertion failure happens at this point (highlightedin the expressions code exp/exp_conv.cpp.
if (rc || (targetPrecision && targetPrecision < (Lng32) translatedCharCnt))
        {
          Lng32 canIgnoreOverflowChars = FALSE;
          Lng32 remainingScanStringLen = 0;
 
          if (rc == 0)
            {
              // We failed because the target has too many characters. Find
              // the first offending character.
              input_to_scan = utf8Tgt;
              input_length = outputDataLen;
              outputDataLen = lightValidateUTF8Str(utf8Tgt,
                                                   (Int32)outputDataLen,
                                                   (Int32)targetPrecision,
                                                   ignoreTrailingBlanksInSource);
              assert((Int32)outputDataLen >= 0); //LCOV_EXCL_LINE : rfi
 
 
The following is the stack trace when query cache is on :
 
#0 convCharToChar (source=0x7fd270730d50 "reason 25", sourceLen=9, 
    sourceType=0, sourcePrecision=-1, sourceScale=1, 
    target=0x7fd269d7231a "reason 25", targetLen=31999, targetType=64, 
    targetPrecision=-1, targetScale=15, heap=0x0, diagsArea=0x0, 
    dataConversionErrorFlag=0x7fd286fa9fc8, actualTargetLen=0x7fd286fa9cb8, 
    blankPadResult=0, ignoreTrailingBlanksInSource=1, allowInvalidCodePoint=0)
    at ../exp/exp_conv.cpp:4524
0000001 0x00007fd29657a34f in convDoIt (source=0x7fd270730d50 "reason 25", 
    sourceLen=9, sourceType=0, sourcePrecision=-1, sourceScale=1, 
    target=0x7fd269d7231a "reason 25", targetLen=31999, targetType=64, 
    targetPrecision=-1, targetScale=15, varCharLen=0x7fd269d72318 "\t", 
    varCharLenSize=2, heap=0x0, diagsArea=0x0, index=CONV_ASCII_F_V, 
    dataConversionErrorFlag=0x7fd286fa9fc8, flags=0)
    at ../exp/exp_conv.cpp:9272
0000002 0x00007fd29432b74f in CacheData::backpatchParams (this=0x7fd2ffffffff, 
    listOfConstantParameters=..., 
    listOfDynamicParameters=<value optimized out>, bindWA=..., 
    params=@0x7fd286faa0d8, parameterBufferSize=@0x7fd286faa0f8)
    at ../sqlcomp/QCache.cpp:1454
0000003 0x00007fd2941d216f in CmpMain::compileFromCache (this=0x7fd286fad8e0, 
    sText=0x7fd270714da8 " SELECT SS_CUSTOMER_SK\n ,SUM(ACT_SALES) SUMSALES\n FROM (SELECT SS_ITEM_SK\n ,SS_TICKET_NUMBER\n ,SS_CUSTOMER_SK\n ,CASE WHEN SR_RETURN_QUANTITY IS NOT NULL THEN (SS_QUANTITY-SR_RETURN_QUANTITY)*SS_SALES_"..., 
---Type <return> to continue, or q <return> to quit---
    charset=15, queryExpr=<value optimized out>, bindWA=..., cachewa=..., 
    plan=0x7fd26c680a68, pLen=0x7fd26c680a60, heap=0x7fd285ad9440, op=3004, 
    bPatchOK=@0x7fd286faca8c, begTime=...) at ../sqlcomp/CmpMain.cpp:1545
0000004 0x00007fd2941d7169 in CmpMain::compile (this=0x7fd286fad8e0, 
    input_str=0x7fd270714da8 " SELECT SS_CUSTOMER_SK\n ,SUM(ACT_SALES) SUMSALES\n FROM (SELECT SS_ITEM_SK\n ,SS_TICKET_NUMBER\n ,SS_CUSTOMER_SK\n ,CASE WHEN SR_RETURN_QUANTITY IS NOT NULL THEN (SS_QUANTITY-SR_RETURN_QUANTITY)*SS_SALES_"..., charset=15, queryExpr=@0x7fd286fad818, gen_code=0x7fd26c680a68, 
    gen_code_len=0x7fd26c680a60, heap=0x7fd285ad9440, phase=CmpMain::END, 
    fragmentDir=0x7fd286fada38, op=3004, useQueryCache=1, 
    cacheable=0x7fd286fad828, begTime=0x7fd286fad800, shouldLog=0)
    at ../sqlcomp/CmpMain.cpp:1883
0000005 0x00007fd2941d9a4c in CmpMain::sqlcomp (this=0x7fd286fad8e0, 
    input_str=0x7fd270714da8 " SELECT SS_CUSTOMER_SK\n ,SUM(ACT_SALES) SUMSALES\n FROM (SELECT SS_ITEM_SK\n ,SS_TICKET_NUMBER\n ,SS_CUSTOMER_SK\n ,CASE WHEN SR_RETURN_QUANTITY IS NOT NULL THEN (SS_QUANTITY-SR_RETURN_QUANTITY)*SS_SALES_"..., charset=15, queryExpr=@0x7fd286fad818, gen_code=0x7fd26c680a68, 
    gen_code_len=0x7fd26c680a60, heap=0x7fd285ad9440, phase=CmpMain::END, 
    fragmentDir=0x7fd286fada38, op=3004, useQueryCache=1, 
    cacheable=0x7fd286fad828, begTime
   
 
 
See how targetPrecision is -1 in this case ? The targetType is coming from a list of parameters stored in the cache and our guess was something isn’t setup right for columns/datatypes in NABoolean CacheData::backpatchParams. Both explain of this query and the prepare of this query fail the same way. 
A couple of things is that the cource has a space
targetLen is 31999.
targetPrecision = -1
targetType=64
VC Indicator Len is 2 bytes



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