The problem
jesopen() (src/jes/jesopen.c:36,46) reaches the JES2 checkpoint and spool by
ddname:
cp = checkpoint_open("DD:HASPCKPT");
js = spool_open("DD:HASPACE1");
That pushes the allocation onto every caller's JCL, and with it the site-specific
UNIT and VOL=SER:
//HASPCKPT DD DISP=SHR,DSN=SYS1.HASPCKPT,UNIT=3350,VOL=SER=MVS000
//HASPACE1 DD DISP=SHR,DSN=SYS1.HASPACE,UNIT=3350,VOL=SER=SPOOL1
Every procedure that hosts a JES2 reader carries those volsers, and each copy is
wrong on a system whose spool lives elsewhere. They are also invisible to the
code that depends on them, which is how mvslovers/httpd#256 happened: httpd's
STC procedure dropped both DDs, and mvsMF's jobs API — a CGI running in httpd's
task, therefore against httpd's allocations — started answering 500 on every
job list, job lookup and spool read.
The precedent is in this library
jesiropn() already dynallocs its own INTRDR SYSOUT DD rather than requiring one
in the JCL. That is why job submit kept working through the httpd outage
while everything reading the spool failed. Same subsystem, same library, two
different contracts.
What this would change
jesopen() dynallocs SYS1.HASPCKPT and SYS1.HASPACE itself (catalog lookup,
or the JES2 checkpoint's own record of the spool volumes) and frees them in
jesclose(). Callers then need no JES2 DDs at all, and the volsers stop being
copied into procedures across the ecosystem.
Consumers to check before changing the contract: mvsmf (jobsapi.c, three call
sites), httpd's STC procedure, and test/mvs/tstjeslg.c plus
jcl/tstjeslg.jcl, which allocate the DDs explicitly.
Not urgent — httpd 4.0.1 restores the DDs and documents them. This removes the
class of failure rather than the instance.
The problem
jesopen()(src/jes/jesopen.c:36,46) reaches the JES2 checkpoint and spool byddname:
That pushes the allocation onto every caller's JCL, and with it the site-specific
UNITandVOL=SER:Every procedure that hosts a JES2 reader carries those volsers, and each copy is
wrong on a system whose spool lives elsewhere. They are also invisible to the
code that depends on them, which is how mvslovers/httpd#256 happened: httpd's
STC procedure dropped both DDs, and mvsMF's jobs API — a CGI running in httpd's
task, therefore against httpd's allocations — started answering 500 on every
job list, job lookup and spool read.
The precedent is in this library
jesiropn()already dynallocs its own INTRDR SYSOUT DD rather than requiring onein the JCL. That is why job submit kept working through the httpd outage
while everything reading the spool failed. Same subsystem, same library, two
different contracts.
What this would change
jesopen()dynallocsSYS1.HASPCKPTandSYS1.HASPACEitself (catalog lookup,or the JES2 checkpoint's own record of the spool volumes) and frees them in
jesclose(). Callers then need no JES2 DDs at all, and the volsers stop beingcopied into procedures across the ecosystem.
Consumers to check before changing the contract: mvsmf (
jobsapi.c, three callsites), httpd's STC procedure, and
test/mvs/tstjeslg.cplusjcl/tstjeslg.jcl, which allocate the DDs explicitly.Not urgent — httpd 4.0.1 restores the DDs and documents them. This removes the
class of failure rather than the instance.