ShekharBorker
Programmer
Hi,
I have created a REXX utility where the input is a dataset containing names of jobs that are expected to have executed and present in the Spool (SDSF.ST). The utlity then interacts with SDSF to obtain the START DATE, START TIME and END TIME of each job listed in the input dataset.
I do this by invoking the ISFACT command with SA as the action character. I then use EXECIO to browse the ddname present in the first occurrence of the ISFDDNAME. stem, which will be the JESMSGLG section of the job output. I can then obtain the required data from the stem into which EXECIO has written the JESMSGLOG records. Following is the code that does this:
Note: For the sake of brevity, I have only included the code around the ISFACT command. The actual EXEC has a lot of things happening before and after this part. Also, the EXEC is being run in the batch mode via IKJEFT01
Now the problem occurs about midway through the processing of the input dataset. The SYSTSPRT has several error messages like the one below:
The RC for the ISFACT statement is either 8/20 once the problem starts. In fact, the RC seems to alternate between 8 and 20 for each subsequent call to ISFACT
My analysis of the problem is that ISFACT is requesting the dynamic allocation of datasets but the allocation request is being rejected due to the allocation limit being reached which I think causes the RC 8/20 on the ISFACT statement. Consequently, the EXECIO fails as the DDNAME present in ISFDDNAME.1 hasn't been allocated
I have taken the following actions to try and resolve the issue:
1. I have increased the DYNAMNBR to 3200 at the IKJEFT01 step
2. I have added the FINIS option to the EXECIO because all SDSF SYSOUT datasets have the FREE=CLOSE option set causing datasets to be automatically freed once they are closed by EXECIO
3. I have tried putting a "FREE F(" ISFDDNAME.1 ")" statement after the EXECIO to ensure that datasets are freed after the EXECIO. This way I am doubly (see 2 above) sure that the dataset is freed.
The RCS and EXECIO errors are still present. The workaround to the problem seems to use smaller job lists and execute the REXX multiple times.
Could you please advise if there is a different way to solve / sidestep this problem?
- Shekhar Borker.
I have created a REXX utility where the input is a dataset containing names of jobs that are expected to have executed and present in the Spool (SDSF.ST). The utlity then interacts with SDSF to obtain the START DATE, START TIME and END TIME of each job listed in the input dataset.
I do this by invoking the ISFACT command with SA as the action character. I then use EXECIO to browse the ddname present in the first occurrence of the ISFDDNAME. stem, which will be the JESMSGLG section of the job output. I can then obtain the required data from the stem into which EXECIO has written the JESMSGLOG records. Following is the code that does this:
Code:
RC = ISFCALLS("ON")
DO J = JOB_STEM.0 TO 1 BY -1
ISFPREFIX = JOB_STEM.J
ISFOWNER = JOB_OWNER
ADDRESS SDSF "ISFEXEC ST"
IF RETCODE.J = 'CC 0000' THEN DO
ADDRESS SDSF "ISFACT ST TOKEN('"TOKEN.J"')",
"PARM(NP SA)"
"EXECIO * DISKR" ISFDDNAME.1 "(STEM JCL. FINIS"
END
END
RC = ISFCALLS("OFF")
Note: For the sake of brevity, I have only included the code around the ISFACT command. The actual EXEC has a lot of things happening before and after this part. Also, the EXEC is being run in the batch mode via IKJEFT01
Now the problem occurs about midway through the processing of the input dataset. The SYSTSPRT has several error messages like the one below:
Code:
IRX0555E The input or output file SYS03723 is not allocated.
IRX0670E EXECIO error while trying to GET or PUT a record.
The RC for the ISFACT statement is either 8/20 once the problem starts. In fact, the RC seems to alternate between 8 and 20 for each subsequent call to ISFACT
My analysis of the problem is that ISFACT is requesting the dynamic allocation of datasets but the allocation request is being rejected due to the allocation limit being reached which I think causes the RC 8/20 on the ISFACT statement. Consequently, the EXECIO fails as the DDNAME present in ISFDDNAME.1 hasn't been allocated
I have taken the following actions to try and resolve the issue:
1. I have increased the DYNAMNBR to 3200 at the IKJEFT01 step
2. I have added the FINIS option to the EXECIO because all SDSF SYSOUT datasets have the FREE=CLOSE option set causing datasets to be automatically freed once they are closed by EXECIO
3. I have tried putting a "FREE F(" ISFDDNAME.1 ")" statement after the EXECIO to ensure that datasets are freed after the EXECIO. This way I am doubly (see 2 above) sure that the dataset is freed.
The RCS and EXECIO errors are still present. The workaround to the problem seems to use smaller job lists and execute the REXX multiple times.
Could you please advise if there is a different way to solve / sidestep this problem?
- Shekhar Borker.