IBM Support

JR62455: IDR SCRAPEDTABLECONTEXTSTORAGE ASSUMES AN INTERVAL EXISTS FOR ALL JOURNALS WHICH CAN RESULT IN AN ARRAYINDEXOUTOFBOUNDSEXCEPTION

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • When storing a new table definition in the table history
    metadata, CDC can get an ArrayIndexOutOfBoundsException from
    ScrapedTableContextStorage.tableIntervalExists() line 625. This
    is because CDC is assuming a table definition "interval" exists
    for all journals, but it is possible a table definition may not
    have intervals defined for all journals (nodes). This can occur
    if the table was partitioned on only a subset of the DPF nodes
    and the table definition was created when a DDL was read from
    the log. In this case, CDC creates an interval for each node
    (journal) when it sees a "Data Manager" (DM) log record for the
    DDL in the log for that node. CDC uses the log position of this
    log record when creating the interval boundaries. An "interval"
    is how CDC knows the period in the log for which a table
    definition is valid. DB2 is only required to log a DM log
    record on a node where a partition of that table resides. If
    the table is not partitioned on all nodes, CDC may not see a DM
    log record on the nodes which do not have a partition for that
    table. In that case, there will be no interval for some
    journals. CDC was using a for loop over all journals and
    expecting the number of intervals to be equal to the number of
    journals. If there are fewer intervals, without the fix, CDC
    can try to access an interval that does not exist and get an
    ArrayIndexOutOfBoundsException from
    ScrapedTableContextStorage.tableIntervalExists() line 625. The
    fix is to convert the for loop over all journals to a while
    loop over the intervals that exist, then get the journal Id
    from interval instead of using the for-loop index.
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED:                                              *
    * This issue may affect you if you are using CDC for LUW       *
    * version older than 11.4.0.2-5563.                            *
    ****************************************************************
    * PROBLEM DESCRIPTION:                                         *
    * When storing a new table definition in the table history     *
    * metadata, CDC can get an ArrayIndexOutOfBoundsException from *
    * ScrapedTableContextStorage.tableIntervalExists() line 625.   *
    * This is because CDC is assuming a table definition           *
    * "interval" exists for all journals, but it is possible a     *
    * table definition may not have intervals defined for all      *
    * journals (nodes).                                            *
    * This can occur if the table was partitioned on only a subset *
    * of the DPF nodes and the table definition was created when a *
    * DDL was read from the log.                                   *
    * In this case, CDC creates an interval for each node          *
    * (journal) when it sees a "Data Manager" (DM) log record for  *
    * the DDL in the log for that node.                            *
    * CDC uses the log position of this log record when creating   *
    * the interval boundaries. An "interval" is how CDC knows the  *
    * period in the log for which a table definition is valid. DB2 *
    * is only required to log a DM log                             *
    * record on a node where a partition of that table resides. If *
    * the table is not partitioned on all nodes, CDC may not see a *
    * DM log record on the nodes which do not have a partition for *
    * that table. In that case, there will be no interval for some *
    * journals. CDC was using a for loop over all journals and     *
    * expecting the number of intervals to be equal to the number  *
    * of journals. If there are fewer intervals, without the fix,  *
    * CDC can try to access an interval that does not exist and    *
    * get an ArrayIndexOutOfBoundsException from                   *
    * ScrapedTableContextStorage.tableIntervalExists() line 625.   *
    * The fix is to convert the for loop over all journals to a    *
    * while                                                        *
    * loop over the intervals that exist, then get the journal Id  *
    * from interval instead of using the for-loop index.           *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    

Problem conclusion

  • Upgrading to IDR 11.4.0.2-5563 or newer for LUW resolves the
    issue.
    

Temporary fix

Comments

APAR Information

  • APAR number

    JR62455

  • Reported component name

    IS CDC DB2 LUW

  • Reported component ID

    5725E30DL

  • Reported release

    B40

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2020-06-18

  • Closed date

    2020-07-02

  • Last modified date

    2020-07-02

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    IS CDC DB2 LUW

  • Fixed component ID

    5725E30DL

Applicable component levels

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSTRGZ","label":"InfoSphere Data Replication"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"B40","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
03 July 2020