Consider the behavior of an empty data set in concatenation

Description

When EXECIO is used to read a DD consisting of a concatenation of 2 or more data sets, that concatenation might contain empty sequential data sets (as of V2R1) as long as any empty data sets are SMS managed.
  • Before V2R1, REXX EXECIO would fail with RC=4 if EXECIO was used with DISKR or DISKRU to read a DD consisting of a concatenation of 2 or more data sets where one of the data sets was an empty (null) sequential data set.
  • Starting with V2R1, REXX EXECIO can read (using DISKR or DISKRU) a DD even if one or more of the data sets within that DD concatenation is an empty data set, as long as all empty data sets within the concatenation are SMS managed empty data sets. If the DD concatenation contains a non-SMS managed empty data set, EXECIO will still fail the read request with RC=4 and messages IRX0670E and IRX0566E.

Table 1 provides more details about this migration action. Use this information to plan your changes to the system.

Table 1. Information about this migration action
Element or feature: TSO/E
When change was introduced: z/OS V2R1.
Applies to migration from: z/OS V1R13.
Timing: Before installing z/OS V2R2.
Is the migration action required? Yes, if you depend upon the behavior that occurred before z/OS V2R1.
Target system hardware requirements: None.
Target system software requirements: None.
Other system (coexistence or fallback) requirements: None.
Restrictions: None.
System impacts: None.
Related IBM Health Checker for z/OS check: None.

Steps to take

This item is intended to alert users of EXECIO to a behavioral change that might occur due to a relaxing of the restriction on null data sets within a concatenation being read by EXECIO DISKR or DISKRU. If your exec tests the EXECIO return code and handles RC=4, you will likely have no action that needs to be taken. The RC=4 that was previously returned when EXECIO detected a null data set within the DD concatenation being read by EXECIO is still a possible return code, if the concatenation contains a null data set which is not SMS managed. Yet, if the EXECIO read against a DD containing a null data set completes successfully (i.e. RC=0 or 2), you would typically have no exceptional action to take, since the read operation will have worked as if the empty data set were not even present.

On the other hand, if you have an exec that expects EXECIO to fail whenever it reads a concatenation containing a null data set, and you exec depends on this EXECIO read failure, you should now look for RC=0 or RC=2 to allow for the possibility of success.

For example, if you use EXECIO RC=4 and the associated message IRX0566E to determine whether a DD concatenation contains a null data set, this will no longer work if the null data set is an SMS managed sequential data set. The read would work (RC=0). You could still determine if a data set is empty by allocating that data set alone to a DD and reading it with EXECIO. RC=2 (or RC=0, if execio * were used) and zero records read would indicate that the data set was empty.

Note: Note that EXECIO against a single null data set that is not part of a multi data set concatenation has always worked successfully, regardless of whether or not the empty data set is SMS managed.

Reference information

For more information, see the following references: