Uploaded image for project: 'Apache Trafodion (Retired)'
  1. Apache Trafodion (Retired)
  2. TRAFODION-2776

Mdam plans with more than one disjunct sometimes cause either a compiler core or have an incorrect predicate

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • any
    • 2.3
    • sql-cmp
    • None

    Description

      This query will have several disjuncts, with many of them being incorrect.

      prepare s1 from
      select count
      from dwd_roam_03_cngi_src a
      where a.apnni not in ('CMREAD','IMS')
      and a.start_datetime like '201708%'
      and (a.apnni not in ('CMLAP','CMTDS','CMNET') or (substr(a.msisdn,1,6) not in ('147165','147166','147167','147168','147169')) and substr(a.msisdn,1,5) <> '14744');

      Disjuncts 2-5 are incorrect here as they stop after column 0 (SALT).
      mdam_disjunct .......... (START_DATETIME >= '201708') and (START_DATETIME <
      '201709') and (((APNNI < 'CMREAD') or (APNNI >
      'CMREAD') and (APNNI < 'IMS')) or (APNNI > 'IMS'))
      and (APNNI < 'CMLAP') and (SALT >=
      (\:_sys_HostVarLoHashPart Hash2Distrib 8)) and
      (SALT <= (\:_sys_HostVarHiHashPart Hash2Distrib
      8))
      mdam_disjunct .......... (SALT >= (\:_sys_HostVarLoHashPart Hash2Distrib
      8)) and (SALT <= (\:_sys_HostVarHiHashPart
      Hash2Distrib 8))
      mdam_disjunct .......... (SALT >= (\:_sys_HostVarLoHashPart Hash2Distrib
      8)) and (SALT <= (\:_sys_HostVarHiHashPart
      Hash2Distrib 8))
      mdam_disjunct .......... (SALT >= (\:_sys_HostVarLoHashPart Hash2Distrib
      8)) and (SALT <= (\:_sys_HostVarHiHashPart
      Hash2Distrib 8))
      mdam_disjunct .......... (SALT >= (\:_sys_HostVarLoHashPart Hash2Distrib
      8)) and (SALT <= (\:_sys_HostVarHiHashPart
      Hash2Distrib 8))

      The problem also manifests with a core for this related query
      prepare s1 from
      select count
      from dwd_roam_03_cngi_src a
      where a.apnni not in ('CMREAD','IMS')
      and a.start_datetime like '201708%'
      and (a.apnni not in ('CMLAP','CMTDS','CMNET') or (substr(a.msisdn,1,6) not in ('147165','147166')));

      In debug mode we may see a failed assert for both queries due to a DCMPASSERT in code.

      This shape may be needed to see the problem
      control query shape expr(sort_groupby(esp_exchange(sort_groupby(
      scan(TABLE 'A', path 'TRAFODION.SCH.DWD_ROAM_03_CNGI_SRC', forward
      , blocks_per_access 1 , mdam forced)))));

      The DDL is
      CREATE TABLE TRAFODION.SCH.DWD_ROAM_03_CNGI_SRC
      (
      MSISDN CHAR(11) CHARACTER SET ISO88591 COLLATE
      DEFAULT DEFAULT NULL NOT SERIALIZED
      , START_DATETIME CHAR(14) CHARACTER SET ISO88591 COLLATE
      DEFAULT NO DEFAULT NOT NULL NOT DROPPABLE NOT SERIALIZED
      , APNNI VARCHAR(20) CHARACTER SET ISO88591 COLLATE
      DEFAULT NO DEFAULT NOT NULL NOT DROPPABLE NOT SERIALIZED
      )
      STORE BY (APNNI ASC, START_DATETIME ASC)
      SALT USING 8 PARTITIONS
      ATTRIBUTES ALIGNED FORMAT
      HBASE_OPTIONS
      (
      DATA_BLOCK_ENCODING = 'FAST_DIFF',
      MEMSTORE_FLUSH_SIZE = '1073741824'
      )
      ;

      Stack of core is
      #2 0x00007f57f02bcf50 in assert_botch_abend (f=0x7f57ed2cf99c "../common/Collections.cpp", l=874, m=0x7f57ed2d01f0 "List index exceeds # of entries",
      c=<value optimized out>) at ../export/NAAbort.cpp:285
      #3 0x00007f57ecf22020 in NAList<KeyColumns::KeyColumn*>::operator[] (this=0x7f5779a95cf0, i=6) at ../common/Collections.cpp:874
      0000004 0x00007f57ecf1a2f6 in ColumnOrderList::validateOrder (this=0x7f5779a95c68, order=6) at ../optimizer/mdam.cpp:3046
      0000005 0x00007f57ecf1a355 in ColumnOrderList::setStopColumn (this=0x7f5779a95c68, stopColumn=32599) at ../optimizer/mdam.cpp:3091
      0000006 0x00007f57ecf20c4a in MdamKey::preCodeGen (this=0x7f577acfacb8, executorPredicates=..., selectionPredicates=<value optimized out>, availableValues=...,
      inputValues=..., vegPairsPtr=0x7f57e43684c0, replicateExpression=1, partKeyPredsAdded=1) at ../optimizer/mdam.cpp:1699
      0000007 0x00007f57ec58eb4c in FileScan::preCodeGen (this=0x7f577ad4b230, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:4332
      0000008 0x00007f57ec58f6bc in HbaseAccess::preCodeGen (this=0x7f577ad4b230, generator=0x7f57e43697f0, externalInputs=<value optimized out>, pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:12919
      0000009 0x00007f57ec580308 in Exchange::preCodeGen (this=0x7f577ad1c780, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:7828
      0000010 0x00007f57ec583580 in Sort::preCodeGen (this=0x7f5779a83bf0, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:7363
      0000011 0x00007f57ec57b517 in Join::preCodeGen (this=0x7f577ace8560, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:2425
      0000012 0x00007f57ec5967d9 in NestedJoin::preCodeGen (this=0x7f577ace8560, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:3151
      0000013 0x00007f57ec580308 in Exchange::preCodeGen (this=0x7f577acca530, generator=0x7f57e43697f0, externalInputs=..., pulledNewInputs=...)
      at ../generator/GenPreCode.cpp:7828
      0000014 0x00007f57ec581158 in RelRoot::preCodeGen (this=0x7f577acb1bd8, generator=0x7f57e43697f0, pulledNewInputs=...) at ../generator/GenPreCode.cpp:1986
      0000015 0x00007f57ec50bb57 in Generator::preGenCode (this=0x7f57e43697f0, expr_node=0x7f577acb1bd8) at ../generator/Generator.cpp:546

      Issue is not seen for serial plans.

      The problem is that during MdamKey::preCodegen we regenerate the disjuncts and expect to get the same number as we saw during optimize phase. This is mostly true, but in some cases not. There is some defensive code to handle this case, but it does not trigger when there is a partKey predicate. The fix removes the partKey predicate check for the defensive code.

      Attachments

        Issue Links

          Activity

            People

              suresh_subbiah Suresh Subbiah
              suresh_subbiah Suresh Subbiah
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: