IBM Support

PH30068: z/TPFDF recoup optimized chain chasing

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 new function.

Error description

  • See Problem Summary.
    

Local fix

  • NA
    

Problem summary

  • APAR NUMBER:  PH30068
    PRODUCT:  z/TPFDF
    FUNCTIONAL AREA:  TPFDF CENTRAL DATABASE ROUTINES
    SHIPPED IN YEAR:  2021
    
    ABSTRACT:
    z/TPFDF recoup optimized chain chasing
    
    PACKAGE CONTENTS:
    Source Segments:
    (C) base/cntl/tpf_app_tpfdf.cntl
    (C) base/cntl/tpf_app_tpfdf_xv.cntl
    (C) tpfdf/include/c_sw00sr.h
    (C) tpfdf/include/i_crupro.h
    (C) tpfdf/include/i_dfhd.h
    (C) tpfdf/include/i_dfrcp.h
    (C) tpfdf/include/i_idcadf.h
    (N) tpfdf/include/i_iiii.h
    (C) tpfdf/include/i_ircedf.h
    (C) tpfdf/include/i_ircfdf.h
    (C) tpfdf/include/i_ircjdf.h
    (C) tpfdf/include/i_zzzz.h
    (C) tpfdf/macro/dbdef.mac
    (C) tpfdf/macro/dbref.mac
    (C) tpfdf/macro/defix.mac
    (N) tpfdf/macro/dfpixc.mac
    (C) tpfdf/macro/gr26sr.mac
    (C) tpfdf/macro/idcadf.mac
    (C) tpfdf/macro/idf6df.mac
    (C) tpfdf/macro/idfcfm.cpy
    (C) tpfdf/macro/ifl0df.mac
    (C) tpfdf/macro/iiiiii.mac
    (C) tpfdf/macro/ircedf.mac
    (C) tpfdf/macro/ircfdf.mac
    (C) tpfdf/macro/ircjdf.mac
    (C) tpfdf/macro/irckdf.mac
    (C) tpfdf/macro/sw00sr.mac
    (C) tpfdf/macro/sw02sr.mac
    (C) tpfdf/macro/zzzzzz.mac
    (C) tpfdf/rt/brc1.asm
    (C) tpfdf/rt/brc5.asm
    (C) tpfdf/rt/brc7.asm
    (C) tpfdf/rt/brc8.asm
    (C) tpfdf/rt/brcg.asm
    (C) tpfdf/rt/brck.asm
    (C) tpfdf/rt/brcv.asm
    (C) tpfdf/rt/drsf_read.cpp
    (C) tpfdf/rt/ua20.asm
    (C) tpfdf/rt/uaa0.asm
    (C) tpfdf/rt/uac0.asm
    (C) tpfdf/rt/uae0.asm
    (C) tpfdf/rt/uag0.asm
    (C) tpfdf/rt/uah0.asm
    (C) tpfdf/rt/uaj0.asm
    (C) tpfdf/rt/uan0.asm
    (C) tpfdf/rt/uap0.asm
    (C) tpfdf/rt/uas0.asm
    (C) tpfdf/rt/uau0.asm
    (C) tpfdf/rt/uav0.asm
    (C) tpfdf/rt/uaw0.asm
    (C) tpfdf/rt/uax0.asm
    (C) tpfdf/rt/ub90.asm
    (C) tpfdf/rt/uba0.asm
    (C) tpfdf/rt/ubb0.asm
    (C) tpfdf/rt/ubc0.asm
    (N) tpfdf/rt/ubr0.asm
    (O) tpfdf/rt/ubwr.asm
    (C) tpfdf/rt/ufb1.asm
    (C) tpfdf/rt/ufb3.asm
    (C) tpfdf/rt/ufb4.asm
    (C) tpfdf/rt/ufb5.asm
    (C) tpfdf/rt/ufbc.asm
    (C) tpfdf/rt/ufc3.asm
    (C) tpfdf/rt/ufc9.asm
    (C) tpfdf/rt/ufcc.asm
    (C) tpfdf/rt/ufcj.asm
    (C) tpfdf/rt/ufcl.asm
    (C) tpfdf/rt/ufcn.asm
    (C) tpfdf/rt/ufcp.asm
    (C) tpfdf/rt/ufg_rsf_support.cpp
    (C) tpfdf/rt/ufha01.cpp
    (C) tpfdf/rt/ufha06.cpp
    (C) tpfdf/rt/ufha07.cpp
    (C) tpfdf/rt/ufha08.cpp
    (C) tpfdf/rt/ufha09.cpp
    (C) tpfdf/rt/ufha10.cpp
    (C) tpfdf/rt/ufha11.cpp
    (C) tpfdf/rt/ufha12.cpp
    (C) tpfdf/rt/ufha13.cpp
    (C) tpfdf/rt/ufhag1.cpp
    (C) tpfdf/rt/ufhb00.cpp
    (C) tpfdf/rt/ufhb06.cpp
    (C) tpfdf/rt/ufhb08.cpp
    (C) tpfdf/rt/ufhb11.cpp
    (C) tpfdf/rt/ufhb13.cpp
    (C) tpfdf/rt/ufhf00.cpp
    (C) tpfdf/rt/ufhog1.cpp
    (C) tpfdf/rt/ufi2.asm
    (C) tpfdf/rt/ufi3.asm
    (C) tpfdf/rt/ufi4.asm
    (C) tpfdf/rt/ufi5.asm
    (C) tpfdf/rt/ufi6.asm
    (C) tpfdf/rt/ufi7.asm
    (C) tpfdf/rt/ufi8.asm
    (C) tpfdf/rt/ufi9.asm
    (C) tpfdf/rt/ufil.asm
    (C) tpfdf/rt/ufka01.cpp
    (C) tpfdf/rt/utdf.mak
    
    Object Only Binaries:
    None.
    
    BINARIES TO BUILD: YES
    Configuration Independent Binaries:
    See APEDIT for list of configuration independent binaries.
    
    Configuration Dependent Binaries:
    See APEDIT for list of configuration dependent binaries.
    
    
    COMMENTS:
    Standard z/TPFDF recoup chain chasing finds in-use pool records
    in a z/TPFDF database by reading all z/TPFDF index and detail
    subfiles and the pool records that are used by those subfiles.
    If the total number of pool records that are used by subfiles
    in a z/TPFDF database is tens of millions or less, recoup might
    be able to chain chase the database in less than an hour.
    However, as the database size grows into the hundreds of
    millions, billions, or tens of billions of pool records, the
    time required for recoup to chain chase the database can grow
    from a few minutes or hours to more than a day. With a database
    this large, the total recoup run time can exceed the recoup
    runtime window required and negatively impact other utilities
    or business-critical processing. z/TPFDF should be enhanced to
    reduce the time it takes to recoup databases with a large
    number of detail subfiles that have only one pool record.
    
    
    Furthermore, the following areas of z/TPFDF could be enhanced:
    
    (1) ZUDFM ACCESS allows you to create a detail subfile and
    index it on a path when the subfile is first created. However,
    it does not allow you to index the subfile on additional paths.
    
    (2) When a broken chain is detected in CRUISE chain-chasing, a
    find error message is written to the parameter table log
    (FCRU0000I) and to the console (FCRU0204E). The message only
    contains the FROM and the TO file addresses, but it is not
    clear what kind of FIND error occurred (for example, record
    code check, ID, hardware, etc.). This additional information
    should be provided.
    
    (3) CRUISE passes a DECB to new ECBs on SWISC CREATE. The
    default action of SWISC is to make sure the EVA address of that
    block in the new ECB is the same EVA that was used in the
    parent ECB, which requires extra processing. This processing is
    necessary if the block contains addresses to itself or if the
    core block address is passed in the EBW area or in some other
    way. However, CRUISE does not pass the core block address
    directly to the child. Therefore, this extra processing is not
    needed.
    
    
    In addition, the following base issues exist:
    
    (4) Specifying REF=ALL on the DBCLS macro causes z/TPFDF to
    loop through all open SW00SRs by issuing DBIFB NEXT until the
    value return in R3 is zero. The DBIFB API uses a save area in
    the IFB header (SW00RS2) to pass the current search pointers to
    the next DBIFB call. However, in the case where an indexed
    detail file was created in DETAC mode and a DBCLS ABORT is
    issued, close processing that retrieves the index file and
    removes the item (DBDIX) that was created previously uses the
    same save area. The subsequent DBIFB API might then return with
    register R3 set to zero even if there are still active SW00SRs
    that need to be closed. As a result, the remaining SW00SRs will
    not be closed.
    
    (5) With APAR PM81536, a DB0189 system error (ERROR RETRIEVING
    RECORD TO RELEASE) indicates the the file address that had an
    error. However, the file address does not properly display the
    upper 4 bytes of a FARF6 file address.
    
    (6) Recoup processing has some base issues:
    (a) With APAR PI56476,recoup statistics contain incorrect large
    logical record index block (LLIB) and data block (LLDB) counts.
    The recoup statistics display contains a field (D/) that shows
    the count for all LLIBs and LLDBs for an ID. Segment brc5.asm
    increments this count for an LLDB of a type 1 LLR. However, the
    check to determine the LLR type is incorrect and the count is
    incremented for type 2 LLRs instead. This will result in type 1
    counts always being empty, type 2 counts being too high, and
    the overall sum being incorrect.
    (b) Recoup may generate incorrect fixed error messages when an
    error occurs while processing a large logical record (LLR). If
    a FIND error occurs while processing an ID2=, ID3= or LLR
    reference, z/TPFDF segment brc5.asm checks the database
    definition (DBDEF) to see if the embedded reference is an
    ordinal. However, in the case of LLRs, the base register for
    the database definition is not properly setup because the check
    does not apply to LLRs. As a result, BRC5 calls segment BRC9
    case 10 to process a fixed error when a fixed error has not
    occurred. This leads to an incorrect fixed error message with
    an incorrect message number and action type, for example:
    RECP0536N 04.29.21 ID ,'B318'-40404040C4C2C9E3-** +
    (c) Some obsolete z/TPFDF recoup segments should be cleaned up.
    
    (7) CRUISE processing has some base issues
    (a) APAR PH04143 incorrectly changed the following line of code
    in ufi2.asm to set STDPGM to F'1' instead of a F'-1' as it
    originally was. As a result, segment ufi5.asm does not set a
    flag (EBX023) that is used for chain processing for ID3=
    references, and unpredictable results could occur.
    (b) While running CRUISE, if a user issues ZFCRU ABORT to abort
    processing while CRUISE chain chasing is running, the main
    CRUISE ECB waits for all child ECBs to complete. If any ECB is
    hung (or already exited), abort processing requires the user to
    enter a second ZFCRU ABORT command to end the main CRUISE ECB
    and release all temporary work areas, including system heap. If
    a locked child ECB becomes active again after this occurs, the
    ECB may attempt to write out statistics information, resulting
    in a CTL-3 (000003) or OPR-4 (000004) system error.
    (c) CRUISE processing can be interrupted by issuing ZFCRU
    PAUSE, ZFCRU STOP, or ZFCRU ABORT. However, due to a timing
    issue, the CRUISE status indicator can be subsequently reset
    such that the request to interrupt CRUISE is lost and CRUISE
    processing continues.
    (d) WTOPC PAGE does not work properly on CRUISE displays.
    Various CRUISE commands lock the CRUISE parameter table index
    file and issue a display before closing the CRUISE parameter
    table. If those displays invoke WTOPC PAGE processing, the
    parameter table index file lock is not released until ZPAGE is
    entered or the WTOPC PAGE processing times out. This can
    interfere with subsequent CRUISE commands. For example, a ZFCRU
    SETUP command may results in a FCRU0010E NO PARAMETER TABLE
    LOCKED error message even after ZFCRU LOCK was entered, or
    CRUISE FCRU0000I END OF DISPLAY messages may be generated when
    two or more people are issuing CRUISE commands simultaneously
    from different terminals.
    
    (8) On a ZUDFM ACCESS command with the CREATE parameter
    specified, the newly created subfile requires the ALG parameter
    in order to be indexed. If ALG is not specified, the PATH
    parameter is not valid. However, ZUDFM processing simply
    ignores this situation without notifying the user.
    

Problem conclusion

  • SOLUTION:
    Provide support for z/TPFDF recoup optimized chain chasing.
    When this support is enabled for a z/TPFDF database, recoup
    uses an optimized chain chase for detail subfiles that consist
    of only 1 pool record. As part of this process, recoup marks
    the pool record as in use without reading the detail subfile.
    With optimized chain chasing, recoup can find all in-use pool
    records, return lost pools, and chain chase your z/TPFDF
    databases with fewer I/O resources and in less time.
    
    Furthermore, the following enhancements have been made:
    (1) Segments ufb1.asm, ufb3.asm, ufb4.asm, ufb5.asm, ufc3.asm,
    ufcc.asm, and ufcj.asm have been updated to provide a new INDEX
    parameter and rename the RELEASE parameter to DEINDEX on the
    ZUDFM ACCESS command.
    (2) Segments irckdf.mac, ufi2.asm, ufi3.asm, ufi4.asm, uf6.asm,
    ufi7.asm, ufi8.asm and ufil.asm have been updated to show
    additional information on find error message FCRU0204E.
    (3) Segments ufi2.asm, ufi3.asm, ufi4.asm, ufi5.asm, ufi6.asm,
    ufi7.asm, ufi8.asm, and ufil.asm have been updated to use the
    NEWEVA= parameter on SWISC CREATE.
    
    The following additional code updates are included in this APAR:
    
    (4) Segment uba0.asm has been updated so that DBCLS ABORT
    processing uses a save area in the application program stack
    instead of SW00RS2, so all open SW00SRs are closed when issuing
    DBCLS REF=ALL with ABORT.
    
    (5) Header i_dfhd.h was updated so that the DB0189 appended
    message properly displays FARF6 file addresses.
    
    (6) The following segments were updated for recoup:
    (a) Segment brc5.asm has been updated to properly check the LLR
    type so that the count for type 1 LLRs is updated as intended.
    (b) Segment brc5.asm has been updated to only call fixed error
    processing in BRC9 if an LLR is NOT being processed and the
    embedded reference is an ordinal.
    (c) Programs BRCA, BRCB, BRCI and UBWR have been removed from
    the tpf_app_tpfdf control file. ubwr.asm has been marked as
    obsolete (the 3 other segments were previously marked as
    obsolete), and references to the obsolete segments have been
    removed from i_dfrcp.h, brc8.asm, and z/TPF segment brmk.asm
    (in z/TPF APAR PJ46413).
    
    (7) The following segments were updated for CRUISE:
    (a) Updated ufi2.asm to set STDPGM to F'-1'.
    (b) Segment ufi9.asm, the CRUISE chain chase statistic handling
    segment, has been updated so statistics are not updated and the
    ECB exits quietly if CRUISE is not running.
    (c) Segments ufhb06.cpp and ufhb08.cpp have been updated to
    remove the unconditional initialization of the CRUISE status
    indicator.
    (d) Segments ufha01.cpp, ufha06.cpp, and ufhb00.cpp have been
    updated to close the z/TPFDF CRUISE parameter table index file
    before generating a display on ZFCRU LOCK, ZFCRU DEFAULT, and
    CRUISE commands to start, restart, pause, or change CRUISE
    runtime parameters (such as ZFCRU START and ZFCRU ECB).
    Additionally, segments ufha07.cpp, ufha08.cpp, ufha09.cpp,
    ufha10.cpp, ufha11.cpp ufha12.cpp ufhag1.cpp have been updated
    to consistently use WTOPC PAGE processing on ZFCRU HELP, ZFCRU
    DISPLAY (including ZFCRU DISPLAY-DEFAULT and ZFCRU
    DISPLAY-LOG), ZFCRU SETUP, and ZFCRU DELETE commands.
    
    
    (8) Segment ufb4.asm has been updated to enforce that the PATH
    parameter cannot be specified without the ALG parameter on a on
    ZUDFM ACCESS command with the CREATE parameter specified.
    
    COREQS: YES
    PJ46413
    
    MIGRATION CONSIDERATIONS: YES
    Functional, automation, and operation changes:
    Changed commands:
    ZFCRU DELETE
    ZFCRU DISPLAY
    ZFCRU LOCK
    ZFCRU LOG
    ZFCRU SETUP
    ZFCRU START
    ZRECP LOG
    ZRECP STA
    ZUDFM ACCESS (Note: The RELEASE parameter has been renamed to
    DEINDEX)
    ZUDFM COPY
    ZUDFM DEF
    ZUDFM HELP
    
    New messages:
    DB01A0
    DB01A1
    DB01A2
    DB01A3
    FCRU0216E
    FCRU0217E
    FCRU0218W
    FCRU0219E
    FCRU0220E
    FCRU0221E
    UDFM0179E
    UDFM0180E
    UDFM0330I
    UDFM0339E
    UDFM0376W
    
    Changed messages:
    FCRU0204E
    UDFM0341E
    UDFM0344E
    
    Application programming interface (API) changes:
    Changed macros:
    DBCKP
    DBCLS
    DBDEF
    DBDIX
    DBIDX
    
    Changed functions:
    dfckp
    dfcls
    dfdix
    dfidx
    
    
    User exit changes:
    Changed z/TPFDF recoup and CRUISE user exits:
    CDE
    COA
    COE
    
    Coexistence, migration, and fallback considerations:
    z/TPF APAR PJ46413 is a co-requisite of z/TPFDF APAR PH30068
    and must be installed before or at the same time as APAR
    PH30068.
    
    After applying this APAR to your z/TPF system, you must enter:
    - ZUDFM HELP BUILD to rebuild the ZUDFM command help database.
    - ZUDFM MLS to rebuild the macro label set (MLS) database.
    
    Before updating database definitions (DBDEFs) to enable z/TPFDF
    recoup optimized chain chasing for a database, all processors
    in your z/TPF loosely coupled complex must be IPLed on an image
    that has z/TPFDF recoup optimized chain chasing installed.
    
    Before you fallback this APAR and IPL an image that does not
    have z/TPFDF recoup optimized chain chasing installed, you must
    disable recoup optimized chain chasing in any DBDEF where it is
    enabled.
    
    
    
    
    BUILD COMMANDS AND INSTRUCTIONS: YES
    #maketpf commands for linux
    maketpf -f CTDF ufg_rsf_support.o
    maketpf -f BRCG brcg.o
    maketpf -f BRCK brck.o
    maketpf -f BRCV brcv.o
    maketpf -f BRC1 brc1.o
    maketpf -f BRC5 brc5.o
    maketpf -f BRC7 brc7.o
    maketpf -f BRC8 brc8.o
    maketpf -f UTDF ua20.o uaa0.o uac0.o uae0.o uag0.o uah0.o
    uaj0.o uan0.o uap0.o uas0.o uau0.o uav0.o uaw0.o uax0.o ub90.o
    uba0.o ubb0.o ubc0.o ubr0.o
    maketpf -f UFBC ufbc.o
    maketpf -f UFB1 ufb1.o
    maketpf -f UFB3 ufb3.o
    maketpf -f UFB4 ufb4.o
    maketpf -f UFB5 ufb5.o
    maketpf -f UFCC ufcc.o
    maketpf -f UFCJ ufcj.o
    maketpf -f UFCL ufcl.o
    maketpf -f UFCN ufcn.o
    maketpf -f UFCP ufcp.o
    maketpf -f UFC3 ufc3.o
    maketpf -f UFC9 ufc9.o
    maketpf -f UFIL ufil.o
    maketpf -f UFI2 ufi2.o
    maketpf -f UFI3 ufi3.o
    maketpf -f UFI4 ufi4.o
    maketpf -f UFI5 ufi5.o
    maketpf -f UFI6 ufi6.o
    maketpf -f UFI7 ufi7.o
    maketpf -f UFI8 ufi8.o
    maketpf -f UFI9 ufi9.o
    maketpf -f UFHA ufha01.o ufha06.o ufha07.o ufha08.o ufha09.o
    ufha10.o ufha11.o ufha12.o ufha13.o ufhag1.o
    maketpf -f UFHB ufhag1.o ufhb00.o ufhb06.o ufhb08.o ufhb11.o
    ufhb13.o
    maketpf -f UFHE ufhog1.o
    maketpf -f UFHF ufhf00.o
    maketpf -f UFHO ufhog1.o
    maketpf -f UFKA ufka01.o ufka00.o ufka03.o
    maketpf -f UFTH uftk.o
    maketpf UCST link TPF_VERIFY_LINK_REFS=NO
    maketpf -f TPFSTUB link
    maketpf CTDF link TPF_VERIFY_LINK_REFS=NO
    maketpf -f ICDF
    maketpf -f IPAT
    maketpf BRCG link
    maketpf BRCK link
    maketpf BRCV link
    maketpf BRC1 link
    maketpf BRC5 link
    maketpf BRC7 link
    maketpf BRC8 link
    maketpf -f DRSF
    maketpf UTDF link
    maketpf UFBC link
    maketpf UFB1 link
    maketpf UFB3 link
    maketpf UFB4 link
    maketpf UFB5 link
    maketpf UFCC link
    maketpf UFCJ link
    maketpf UFCL link
    maketpf UFCN link
    maketpf UFCP link
    maketpf UFC3 link
    maketpf UFC9 link
    maketpf UFIL link
    maketpf UFI2 link
    maketpf UFI3 link
    maketpf UFI4 link
    maketpf UFI5 link
    maketpf UFI6 link
    maketpf UFI7 link
    maketpf UFI8 link
    maketpf UFI9 link
    maketpf -f UFML
    maketpf UFHA link
    maketpf UFHB link
    maketpf UFHE link
    maketpf UFHF link
    maketpf UFHO link
    maketpf UFKA link
    maketpf UFTH link
    maketpf UCST link
    maketpf CTDF link
    #maketpf commands for z/OS
    maketpf -f ppcp stpp.o
    maketpf ppcp link
    
    UPDATED INFORMATION UNITS: YES
    z/TPF and z/TPFDF Migration Guide: PUT 2 and Later
    z/TPFDF Commands
    z/TPFDF Database Administration
    z/TPFDF Messages (System Error, Online, Offline)
    z/TPFDF Programming Concepts and Reference
    
    See your IBM representative if you need additional information.
    
    DOWNLOAD INSTRUCTIONS:
    https://www.ibm.com/support/docview.wss?uid=swg27049604
    
    APAR URL:
    https://transfer.boulder.ibm.com/2021/PH30068.tar.gz
    

Temporary fix

Comments

APAR Information

  • APAR number

    PH30068

  • Reported component name

    ZTPFDF

  • Reported component ID

    5748F1501

  • Reported release

    110

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2020-09-30

  • Closed date

    2021-11-17

  • Last modified date

    2021-11-17

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

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

Publications Referenced
SK2T8062    

Fix information

  • Fixed component name

    ZTPFDF

  • Fixed component ID

    5748F1501

Applicable component levels

[{"Line of Business":{"code":"LOB35","label":"Mainframe SW"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSZL53","label":"TPF"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"110"}]

Document Information

Modified date:
18 November 2021