Skip to content

DELE/RMD/RNTO hold the identity window across a whole IDCAMS run #87

Description

@mgrossmann

Follow-up to #79 (PR #86), which made the identity windows mutually exclusive.
Three of them are far longer than the rest:

Window Contents Order of magnitude
RETR/STOR fopen — dynalloc ENQ + VTOC I/O milliseconds
STOR (new) __dsalcf/__dsfree — two SVC 99 milliseconds
LIST (PDS) __listpd — BPAM OPEN + directory read milliseconds
MKD alloc_new_dataset milliseconds
JES submit jesiropn() milliseconds
DELE / RMD / RNTO idcams() — load and run a program seconds

Now that the windows serialize, an IDCAMS window blocks every other session's
data set access for its whole duration. Before #86 that was a correctness
problem (a seconds-wide window in which siblings authorized as the wrong
user); now it is a throughput one.

Direction

Replace idcams() with the direct services:

  • DELE / RMD — SCRATCH (SVC 29 via CAMLST) plus the catalog delete
  • RNTO — RENAME (SVC 30 via CAMLST) plus the catalog re-entry

That drops the window to a couple of SVCs, and removes a program load from
under a switched identity. The PDS-member case in DELE (DELETE 'dsn(mbr)')
needs a different route than SCRATCH — probably a STOW disconnect — so it is
the part to design first.

Worth knowing before starting

  • All three already pre-check ALTER via check_dataset_access(), so the
    authorization story does not change; only the mechanism does.
  • IDCAMS reports failures as text ftpd currently discards; the direct services
    return codes, which would make the 550 replies more specific than
    "could not be deleted".
  • This is a rewrite of three commands against a live catalog. It wants its own
    test pass on the target, not a "looks right" merge — the failure mode is a
    half-deleted or orphaned catalog entry.

Not urgent: it costs throughput on the least frequent commands, and only while
another session is doing data set work at the same moment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:cleanupRefactoring or tech debt

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions