Skip to content

jesopen() should dynalloc the checkpoint and spool, as jesiropn() already does #142

Description

@mgrossmann

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions