On 03-Jan-2014 12:20 -0800, Jerry Draper wrote:
After we upgrade to V7R1 we found that a number of old routines that
used a combination of this will err out (see error below):
≥ CPYTOIMPF (failure occurs here)
A Retry after some minutes allows the job to complete normally.
So the failing request apparently uses the /QDLO file system [as
inferred from Change Document Description (CHGDOCD) that precedes it,
and the messages noted later]? If so, then using the root file system
to output to a stream file (STMF) vs output to a *DOC [in the old-style
8.3 PC document folder file system] would avoid that error... and avoid
all the other restrictions and requirements of the DLO vs STMF.
If we put a DLYJOB DLY(120) after the RUNSQLSTM it completes normally.
Because a hard-coded wait is both possibly excessively long and
possibly too short avoid encountering the exception, it is IMO a poor
implementation as an attempt to circumvent. A routine that polls on a
shorter timed-wait, each time interrogating the existence of secondary
threads, would seem a more timely /solution/.
Of course a true /solution/ would probably require a QAQQINI option
to tell the query processor not to implement that way; i.e. a means to
tell the Query Engine to expunge the secondary [system] threads when the
query closes, instead of them hanging about [for an unstated amount of
time] awaiting possibly more work.
The error has to do with the multi-threaded environment implemented
in V7R1. There is no "fix" for this. Welcome to multi-threading.
Apparently the following is some document\reply sent to you, in
response to an inquiry.? Perhaps from IBM? Is there an IBM Technical
Document to document the new behavior? An APAR [there should be one; if
that response was from a PMR reported to IBM, demand they open an APAR
so the /closure/ of the APAR is a clear indication both of their
awareness of the issue and their response to customers about what was
the resolution]. An entry in the Memo to Users (MTU) for the IBM i 7.1?
If documented anywhere by IBM, hopefully with the source-code for an
awaitQueryThreadsNoMore() routine... or identification of the PTF that
provides the new command to Delay for Query Threads (DLYQRYTHD) for as
long as the WAIT() parameter suggests before the command terminates
issuing an exception that the condition was not met prior to the
allowed\specified wait-time being exceeded.
When running SQL or using user defined functions, the system will
often spawn multiple threads to complete the request. At R710, these
threads are left open longer to improve the performance of future
calls to the same function or statement. This can cause failures if
the job the runs any function or command that can not be ran in a job
with multiple threads. Some examples these errors include:
msgCPE3524 Message . . . . : Function not allowed.
Cause: Function is not allowed in a job that is running with
msgCPF180B Message . . . . : Function &1 not allowed.
Cause: Function &1 is not allowed in a job which has multiple
msgCPFA0D4 Message . . . . : File system error occurred.
Error number 3524
Since they were written in symptom kwd form, adding: errno3524 and
rc3524 for return code, and the non-kwd form for each message CPE3524
CPF180B CPFA0D4 making them capable of being searched otherwise.