With IBM support and other help, we finally figured this one out,
and so I will share it.
When you write to a TDQ (Intra partition, Recovery= Logical,
TriggerLevel=1, TRANID=XXXX) The Trigger Level is NOT the only thing
governing when the TRANID gets kicked off. It is a combination of
TriggerLevel and SYNCHPOINT. BOTH must happen before TRANID gets kicked
off. And SYNCHpoint can happen at as a result of things other than EXEC
CICS SYNCHPOINT, such as some DLI calls, and invocation of some other
progams.
In my case the program (XXXXXXXX) started to write to the TDQ
which set the Trigger level to 1, but the tranid YYYY did NOT start at
this point. Then the program XXXXXXXX did IMS DLI call, and thus a
SYNCHPOINT happened. At this point YYYY started reading from the TDQ at a
faster rate than the program XXXXXXXX was writing into the TDQ. If the
report was short, the program XXXXXXXX finished before YYYY and no problem
was detected. If the report was longer, it "could" happen that YYYY
read the last record from the TDQ and finished. However the program
XXXXXXXX kept writing to the now empty TDQ thus setting the Trigger level
to 1 again. The next SYNCH happened when the program XXXXXXXX completed,
and thus YYYY was released to process the remaining records as a partial
report.
We started calling this the "bucket brigade" problem. Very hard
to duplicate. IBM was very helpful on this one. Remember "This could
happen to YOU".
From: John Mattson/Epson
To: IBM Mainframe Discussion List <[email protected]>
Date: 02/23/2011 08:02 AM
Subject: TS41 TDQ triggering before program finishes writing to it
Just went from TS22 to TS41 and have a surprise problem.
Our program writes a report to a TDQ, and when the report is
complete leaves the TDQ, which has a Trigger level of 1. At this point
TRANSID starts since the trigger level is reached and it process the
record in the TDQ. Up to TS41 it worked fine. Now, it works alright if
we do the transactions one at a time (manually). However, if we "batch" a
bunch of them to run right after another then the TDQ is "sometimes"
triggered before the report record is completly sent to the TDQ, and then
the TDQ is read, cleared by the TRANSID trans. The the rest of the
record report is written to the TDQ and then read, and a mess is created.
Note: The TDQ is INTRA partition, has a TRANSID value, and Tirggerlevel is
1.
Note: This system has worked fine until going to TS41 and zOS 1.11
Note: My knowledge of CICS programming is limited.
Question is: 1) is this a bug? 2) now do we go about preventing
it from happening? Basically the report writing program must remain 'in
control' of the TDQ until it completes a full report.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html