ML07-0001-0

Chapter 11. Removing HTTPD

This chapter takes HTTPD off an MVS 3.8j system and frees its FMID. It covers the SMP inventory, the load and distribution libraries, and the parts that SMP never owned: the procedure, the Parmlib member, the RAKF entries and the document root disk. The last section shows how to check that the work happened.

If you want a newer release, you are in the wrong chapter. A release deletes its predecessor when it is installed (Chapter 10, “Upgrading HTTPD”). Running this chapter first would scratch the libraries that the new release installs into.

Note: Which release the sessions come from. The sessions in this chapter were measured on release 4.4.0 (the FMID THTP440) on a TK5 system. The FMID of a release is THTP and the three digits of its version. HTTPD 4.5.0 is THTP450, and it deletes THTP440. HTTPD 4.5.1 is THTP451, and it deletes THTP450 the rule is in the HTTPD Reference, in “The Started Task and the Package”, section “The FMID”. The job in this chapter is the 4.4.0 job. “What Changes for HTTPD 4.5.0” tells what changes for 4.5.0, and what the 4.5.0 form of the job did on a TK5 system. “What Changes for HTTPD 4.5.1” tells what changes for 4.5.1, and what the 4.5.1 form of the job did on an MVS/CE system that held 4.5.0 and on a TK5 system that held 4.5.1. If you installed a development build of HTTPD, read “A Development Build with a Later FMID” too.

What HTTPD Put on the System

ItemName
FMIDTHTP440
Load modulesHTTPD, HTTPDSRV, HTTPDM, HTTPDMTT, ABEND0C1
Target libraryHTTPD.LINKLIB
Distribution libraryHTTPD.AHTTPLOD
Sample libraryHTTPD.SAMPLIB (SMP does not own it)
Document root diskHTTPD.WEBROOT.UFS (SMP does not own it)

Table 37. What release 4.4.0 installed

The names of the data sets carry no version, so there is one HTTPD installation on a system, whichever release put it there. The staging library HTTPD.HTTPLOAD is not on the list. The last step of the install job scratches it, but only if the ACCEPT ended with return code 0. If a failed install left it, scratch it as well.

Earlier releases left their FMIDs behind. One release has one FMID, and an id is spent once. Each release deletes its predecessor, and SMP keeps the id of the deleted function in both zones as a mark. SMP lists the mark as TYPE FUNCTION with DELBY naming the later id, and its LIST of such an id ends with return code 0, not 4. A system that took four upgrades carries four of these marks. A removal that names only the current release and its predecessor leaves the older marks in the inventory for good. The SYSMOD of 4.5.0 carries DELETE(THTP440), so a system that took 4.5.0 as its first install holds THTP440 as a mark as well, with DELBY = THTP450 in the CDS and in the ACDS. The same holds for THTP450 on a system that took 4.5.1 as its first install, with DELBY = THTP451. The job in this chapter therefore names every FMID that HTTPD has ever spent, from THTP400 to THTP440 (to THTP450 in the form of “What Changes for HTTPD 4.5.0”, to THTP451 in the form of “What Changes for HTTPD 4.5.1”). You need not know which releases your system has seen.

Step 1: Stop the Server

Stop the started task from the console. The server writes its shutdown messages and the statistics of the run, and the task ends.

P HTTPD
HTTPD098I HTTPD SHUTTING DOWN
HTTPD040I WAITING FOR SOCKET THREAD TO TERMINATE (1)
HTTPD060I SHUTDOWN SOCKET THREAD    TCB(9AD080) TASK(15EFC8) STACKSIZE(32768)
HTTPD060I SHUTDOWN WORKER(170C48)   TCB(9A09C8) TASK(194FC8) STACKSIZE(65536)
HTTPD060I SHUTDOWN WORKER(170CC8)   TCB(9A0CF8) TASK(183FC8) STACKSIZE(65536)
HTTPD060I SHUTDOWN WORKER(0E97B0)   TCB(9AD828) TASK(172FC8) STACKSIZE(65536)
HTTPD416I STATS: 39 REQUESTS, 1 ERRORS, 156405 BYTES
HTTPD099I HTTPD SHUTDOWN COMPLETE
$HASP395 HTTPD    ENDED
IEF404I HTTPD - ENDED - TIME=07.07.17
$HASP150 HTTPD    ON PRINTER2       158 LINES
$HASP160 PRINTER2 INACTIVE - CLASS=Z
$HASP250 HTTPD    IS PURGED

HTTPD098I starts the stop and HTTPD099I ends it. Between them the server writes one line for the listener thread and one for each worker. The messages are in the HTTPD Reference, in ‘Messages’, section “A Healthy Start and Stop”. $HASP250 HTTPD IS PURGED shows that JES2 has dropped the task.

If you run a second HTTPD on another port, stop that one as well. It loads from a library that step 4 scratches.

Step 2: Cut the FMIDs out of the SMP Inventory

The job below edits the CDS (what is applied) and the ACDS (what is accepted). It touches no library. It is long on purpose. This is the job as it ran on the measured system. SMPAPP is the SMP procedure of TK5. If your system names it differently, change the two EXEC statements.

//HTTPDUCL JOB (SYS),'HTTPD UNINSTALL',
//             CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),
//             REGION=4096K
//UCLIN   EXEC SMPAPP
//SMPCNTL  DD  *
 UCLIN CDS .
  DEL SYSMOD(THTP440) MOD(HTTPD) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP440) MOD(HTTPDSRV) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP440) MOD(HTTPDM) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP440) MOD(HTTPDMTT) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP440) MOD(ABEND0C1) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL MOD(HTTPD) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL MOD(HTTPDSRV) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL MOD(HTTPDM) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL MOD(HTTPDMTT) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL MOD(ABEND0C1) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL LMOD(HTTPD) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL LMOD(HTTPDSRV) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL LMOD(HTTPDM) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL LMOD(HTTPDMTT) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL LMOD(ABEND0C1) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP440) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP430) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP420) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP410) .
 ENDUCL .
 RESETRC .
 UCLIN CDS .
  DEL SYSMOD(THTP400) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) MOD(HTTPD) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) MOD(HTTPDSRV) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) MOD(HTTPDM) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) MOD(HTTPDMTT) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) MOD(ABEND0C1) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL MOD(HTTPD) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL MOD(HTTPDSRV) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL MOD(HTTPDM) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL MOD(HTTPDMTT) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL MOD(ABEND0C1) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP440) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP430) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP420) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP410) .
 ENDUCL .
 RESETRC .
 UCLIN ACDS .
  DEL SYSMOD(THTP400) .
 ENDUCL .
 RESETRC .
/*
//LIST    EXEC SMPAPP
//SMPCNTL  DD  *
 RESETRC .
 LIST CDS  SYSMOD(THTP440) .
 LIST CDS  SYSMOD(THTP430) .
 LIST CDS  SYSMOD(THTP420) .
 LIST CDS  SYSMOD(THTP410) .
 LIST CDS  SYSMOD(THTP400) .
 LIST ACDS SYSMOD(THTP440) .
 LIST ACDS SYSMOD(THTP430) .
 LIST ACDS SYSMOD(THTP420) .
 LIST ACDS SYSMOD(THTP410) .
 LIST ACDS SYSMOD(THTP400) .
/*
//

Save the job as uclin.jcl and submit it the way the install job is submitted (“Editing and Submitting the Install Job”). With FTP:

$ ftp -v -n mvs.example.org 2121
Connected to mvs.example.org.
220 MVS 3.8j FTPD Server
ftp> user HERC01
331 Send password please.
Password: 
230 HERC01 is logged on.  Working directory is "HERC01.".
Remote system type is MVS.
ftp> progress off
Progress bar off.
ftp> quote site filetype=jes
200 SITE command was accepted
ftp> put uclin.jcl
local: uclin.jcl remote: uclin.jcl
229 Entering Extended Passive Mode (|||22000|)
125 Sending Job to JES internal reader FIXrecfm 80
250-It is known to JES as JOBnnnnn
250 Transfer completed successfully.
2802 bytes sent in 00:00 (57.47 KiB/s)
ftp> quit
221 Quit command received. Goodbye.

The job has 35 DEL statements, 20 against the CDS and 15 against the ACDS. In each zone they fall into these groups.

  1. Five DEL SYSMOD(THTP440) MOD(...) statements. They take the five modules out of the entry of the FMID.
  2. Five DEL MOD(...) statements. They remove the module entries.
  3. Five DEL LMOD(...) statements, in the CDS only. They remove the load module entries.
  4. Five DEL SYSMOD(...) statements, one for each id from THTP440 down to THTP400. They remove the function entries, and with them the marks of the deleted releases.

Every DEL stands in a UCLIN/ENDUCL pair of its own, and a RESETRC . follows every ENDUCL .. The reason is the way SMP treats a DEL for an entry that the zone does not hold.

The job needs this because it names every FMID that HTTPD has spent, and no system has seen all of them.

Reading the return codes

On the measured system, the job log says this.

                                                J E S 2   J O B   L O G
 7.07.25 JOB   nn  $HASP373 HTTPDUCL STARTED - INIT  1 - CLASS A - SYS TK5R
 7.07.25 JOB   nn  IEF403I HTTPDUCL - STARTED - TIME=07.07.25
 7.07.58 JOB   nn  IEFACTRT - Stepname  Procstep  Program   Retcode
 7.07.58 JOB   nn  HTTPDUCL   UCLIN     HMASMP    HMASMP    RC= 0008
 7.07.58 JOB   nn  HTTPDUCL   LIST      HMASMP    HMASMP    RC= 0004
 7.07.58 JOB   nn  IEF404I HTTPDUCL - ENDED - TIME=07.07.58
 7.07.58 JOB   nn  $HASP395 HTTPDUCL ENDED

The UCLIN step ends with return code 8 and the LIST step with

  1. Both are the expected result on this system. The system held THTP440,

THTP430 and the mark of THTP420, but it had never seen THTP410 or THTP400. The next screen counts the messages in the SMP output of the UCLIN step.

$ grep -E 'HMA2(532|550|560)' uclin-smp-uclin.txt
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR HTTPD
HMA2550    UPDATE COMPLETE FOR HTTPDSRV
HMA2550    UPDATE COMPLETE FOR HTTPDM
HMA2550    UPDATE COMPLETE FOR HTTPDMTT
HMA2550    UPDATE COMPLETE FOR ABEND0C1
HMA2550    UPDATE COMPLETE FOR HTTPD
HMA2550    UPDATE COMPLETE FOR HTTPDSRV
HMA2550    UPDATE COMPLETE FOR HTTPDM
HMA2550    UPDATE COMPLETE FOR HTTPDMTT
HMA2550    UPDATE COMPLETE FOR ABEND0C1
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP430
HMA2550    UPDATE COMPLETE FOR THTP420
HMA2532 ** SYSMOD ENTRY THTP410 TO BE DELETED DOES NOT EXIST
HMA2560    UPDATE PROCESSING TERMINATED - UPDATE NOT COMPLETE
HMA2532 ** SYSMOD ENTRY THTP400 TO BE DELETED DOES NOT EXIST
HMA2560    UPDATE PROCESSING TERMINATED - UPDATE NOT COMPLETE
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR HTTPD
HMA2550    UPDATE COMPLETE FOR HTTPDSRV
HMA2550    UPDATE COMPLETE FOR HTTPDM
HMA2550    UPDATE COMPLETE FOR HTTPDMTT
HMA2550    UPDATE COMPLETE FOR ABEND0C1
HMA2550    UPDATE COMPLETE FOR THTP440
HMA2550    UPDATE COMPLETE FOR THTP430
HMA2550    UPDATE COMPLETE FOR THTP420
HMA2532 ** SYSMOD ENTRY THTP410 TO BE DELETED DOES NOT EXIST
HMA2560    UPDATE PROCESSING TERMINATED - UPDATE NOT COMPLETE
HMA2532 ** SYSMOD ENTRY THTP400 TO BE DELETED DOES NOT EXIST
HMA2560    UPDATE PROCESSING TERMINATED - UPDATE NOT COMPLETE

Of the 35 statements, 31 ended with HMA2550 (update complete). Four ended with HMA2532 and HMA2560: THTP410 and THTP400, in each of the two zones. There is no HMA2293, because each block has its own RESETRC ..

A return code of 8 here does not say that the removal failed, and a return code of 0 would not say that it worked. The LIST of the next step tells. If a DEL that you expected to work shows an error other than HMA2532, read the complete SMP output of the UCLIN step. It holds the messages between the statements.

Step 3: Read the LIST

The second step of the job lists the five ids in both zones. This listing is the result of the removal, not the return code of the job. This is the output on the measured system.

     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0001
 
HMA4240    HMASMP EXEC PARM = 'DATE=U'
 RESETRC .
HMA2050    RESETRC PROCESSING COMPLETED - HIGHEST RETURN CODE IS 00
 
 
 LIST CDS  SYSMOD(THTP440) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0002
 
LIST     SELECT SUMMARY REPORT FOR SMPCDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP440
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0003
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST CDS  SYSMOD(THTP430) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0004
 
LIST     SELECT SUMMARY REPORT FOR SMPCDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP430
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0005
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST CDS  SYSMOD(THTP420) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0006
 
LIST     SELECT SUMMARY REPORT FOR SMPCDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP420
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0007
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST CDS  SYSMOD(THTP410) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0008
 
LIST     SELECT SUMMARY REPORT FOR SMPCDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP410
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0009
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST CDS  SYSMOD(THTP400) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0010
 
LIST     SELECT SUMMARY REPORT FOR SMPCDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP400
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0011
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST ACDS SYSMOD(THTP440) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0012
 
LIST     SELECT SUMMARY REPORT FOR SMPACDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP440
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0013
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST ACDS SYSMOD(THTP430) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0014
 
LIST     SELECT SUMMARY REPORT FOR SMPACDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP430
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0015
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST ACDS SYSMOD(THTP420) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0016
 
LIST     SELECT SUMMARY REPORT FOR SMPACDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP420
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0017
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST ACDS SYSMOD(THTP410) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0018
 
LIST     SELECT SUMMARY REPORT FOR SMPACDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP410
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0019
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
 LIST ACDS SYSMOD(THTP400) .
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0020
 
LIST     SELECT SUMMARY REPORT FOR SMPACDS
 
THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING
 
 
 TYPE        NAME
 SYSMOD      THTP400
     DATE 26.300  TIME 07:07:58      HMASMP LVL 04.48 MESSAGES AND CONTROL STATEMENTS                        PAGE 0021
 
HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04
 
 
HMA2050    HMASMP PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04

Each of the ten LIST statements must answer with the stanza “THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING”, naming the id, and the step ends with return code 4. Return code 4 and an empty list mean that the FMID is free. Read all ten. The CDS and the ACDS are separate inventories, and an id that is gone from one and present in the other is not free.

A stanza that lists TYPE FUNCTION with DELBY is an id that is still there. SMP answers it with return code 0, so it does not lift the return code of the step above the 4 that you expect. This is why you read the stanzas and not the return code of the step.

Step 4: Scratch the Libraries

Note: List the members first. HTTPD.LINKLIB is the STEPLIB of the started task, and it holds whatever was copied into it. The package puts five modules there. A server module of another product, for example MVSMF, can be in the same library. SMP does not know such a module, and the scratch takes it with it. List the members (ISPF 3.4 or IEHLIST) and install again what belongs to something else.

The UCLIN job edited the inventory only. Both libraries are still catalogued, and the allocation job of a later install would fail on them. This job scratches them.

//HTTPDDEL JOB (SYS),'HTTPD SCRATCH',
//             CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),
//             REGION=4096K
//SCRATCH EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  DELETE HTTPD.LINKLIB  NONVSAM SCRATCH PURGE
  DELETE HTTPD.AHTTPLOD NONVSAM SCRATCH PURGE
/*
//

The job log shows that the step ran.

                                                J E S 2   J O B   L O G
 7.09.00 JOB   nn  $HASP373 HTTPDDEL STARTED - INIT  1 - CLASS A - SYS TK5R
 7.09.00 JOB   nn  IEF403I HTTPDDEL - STARTED - TIME=07.09.00
 7.09.00 JOB   nn  IEFACTRT - Stepname  Procstep  Program   Retcode
 7.09.00 JOB   nn  HTTPDDEL   SCRATCH             IDCAMS    RC= 0000
 7.09.00 JOB   nn  IEF404I HTTPDDEL - ENDED - TIME=07.09.00
 7.09.00 JOB   nn  $HASP395 HTTPDDEL ENDED

The return code says that the job ran. IDCAMS says what it did.

IDCAMS  SYSTEM SERVICES                                           TIME: 07:09:00        10/27/26     PAGE   1
 
  DELETE HTTPD.LINKLIB  NONVSAM SCRATCH PURGE
IDC0550I ENTRY (A) HTTPD.LINKLIB DELETED
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0
 
  DELETE HTTPD.AHTTPLOD NONVSAM SCRATCH PURGE
IDC0550I ENTRY (A) HTTPD.AHTTPLOD DELETED
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0
 
IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 0
 !! END OF JES SPOOL FILE !!

IDC0550I names the entry that was deleted, once for each library. HTTPD.SAMPLIB is not in this job. The next install scratches it by itself (the step DELOLD of the install job). Scratch it too if you want a clean system, once you have copied what you want out of it.

If you put the library into the APF list (the entry in SYS1.PARMLIB(IEAAPF00)), remove the entry for HTTPD.LINKLIB too.

Step 5: The Parts that SMP Never Owned

The UCLIN job and the scratch job do not touch these. They are yours.

The procedure. Delete the member HTTPD from the procedure library that you copied it to, for example SYS2.PROCLIB(HTTPD).

The Parmlib member. Delete the member that the procedure names in its symbol M (HTTPPRM0 in the sample) from the data set that its symbol D names. The HTTPD Reference shows the procedure in “The Started Task and the Package”, section “The Procedure”. Keep a copy if you want to look at your routes again later.

The RAKF entries. The user of the started task (HTTPD in the group USER in the sample procedure) has a line in SYS1.SECURE.CNTL(USERS). The routes with RES= can have profiles in SYS1.SECURE.CNTL(PROFILES). Chapter 6, “Authentication and Security” shows the definitions that HTTPD needs. Take care in this step.

The document root disk. The mount of HTTPD.WEBROOT.UFS belongs to UFSD, not to HTTPD. Remove the MOUNT statement that names it from the Parmlib member of UFSD. Unmount the disk or stop UFSD before you scratch the data set (see the documentation of UFSD). Then scratch it with IDCAMS, as you scratched the libraries.

  DELETE HTTPD.WEBROOT.UFS NONVSAM SCRATCH PURGE

No SMP job removes the document root disk. The files that you put into it are in it. Copy out what you want before you scratch it.

Step 6: Check That It Is Gone

A return code says that a job ran. It does not say that the work happened. Check the result in two places.

SMP. The LIST of step 3 is the check for the inventory. You can run it again at any time. On a clean system every stanza answers “not found”.

The catalog. List what is left under the high-level qualifier.

  LISTCAT LEVEL(HTTPD)

This is the answer on the measured system, after the scratch job.

IDCAMS  SYSTEM SERVICES                                           TIME: 07:10:11        10/27/26     PAGE   1
 
  LISTCAT LEVEL(HTTPD)
NONVSAM ------- HTTPD.BREXX
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.HTML
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.HTML.TK5
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.ICON
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.LUA
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.SAMPLIB
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.STATS
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.UFSDISK0
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.UFSDISK1
     IN-CAT --- SYS1.UCAT.TK5
NONVSAM ------- HTTPD.V3R3M0.LINKLIB
     IN-CAT --- SYS1.UCAT.TK5
IDCAMS  SYSTEM SERVICES                                           TIME: 07:10:11        10/27/26     PAGE   2
         THE NUMBER OF ENTRIES PROCESSED WAS:
                   AIX -------------------0
                   ALIAS -----------------0
                   CLUSTER ---------------0
                   DATA ------------------0
                   GDG -------------------0
                   INDEX -----------------0
                   NONVSAM --------------10
                   PAGESPACE -------------0
                   PATH ------------------0
                   SPACE -----------------0
                   USERCATALOG -----------0
                   TOTAL ----------------10
         THE NUMBER OF PROTECTED ENTRIES SUPPRESSED WAS 0
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0
 
IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 0

Neither HTTPD.LINKLIB nor HTTPD.AHTTPLOD is in the list. The list still shows ten entries. Only HTTPD.SAMPLIB is a data set of the package, and step 4 left it in place on purpose. The other nine are not data sets that the package creates, and this chapter does not touch them. On your system, check each remaining name before you scratch it. Expect HTTPD.WEBROOT.UFS and HTTPD.SAMPLIB in the list until you scratch them yourself.

Running the Job Twice

The job can run again. On a system where no id is left, the UCLIN step ends with return code 8 for the missing entries and writes no HMA2550, and the LIST gives the same answer. After the removal no zone holds the id, so the same release can be installed again.

What Changes for HTTPD 4.5.0

HTTPD 4.5.0 has the FMID THTP450 and deletes THTP440. The job above is the 4.4.0 job. For 4.5.0, make these changes in both zones.

What was measured. The 4.5.0 form of the job has 37 DEL statements. It was run on a TK5 system that held THTP450, THTP440, THTP430 and THTP420. The UCLIN step ended with return code 8, from four HMA2532 for THTP400 and THTP410, two for each. 33 statements ended with HMA2550, and there was no HMA2293. The LIST step ended with return code 4, and all six ids were not found in the CDS and in the ACDS. After the scratch of the two libraries, the install of a package build of 4.5.0 (Chapter 2, “Installing HTTPD”) ran without an error.

The next section is for HTTPD 4.5.1. The section after it is about the case where a system holds an FMID that the job does not name, because a development build put it there.

What Changes for HTTPD 4.5.1

HTTPD 4.5.1 has the FMID THTP451 and deletes THTP450. The job of “What Changes for HTTPD 4.5.0” is the 4.5.0 job. For 4.5.1, make these changes in both zones.

The job has 49 DEL statements then, 27 against the CDS and 22 against the ACDS, and the LIST step has fourteen statements. The README of the installation package prints the job in full.

What was measured. The 4.5.1 form of the job was run on an MVS/CE system with SMP 4 (HMASMP LVL 04.48). The system held the released THTP450 with its five modules, and the marks of THTP440 and THTP430. It had been brought there by installing the 4.4.0 package and then the 4.5.0 package. It held no entry for THTP451, THTP420, THTP410 or THTP400. The UCLIN step ended with return code

  1. 31 statements ended with HMA2550, and 18 ended with HMA2532

and HMA2560, nine in each zone: the five DEL SYSMOD(THTP451) MOD(...) blocks, DEL SYSMOD(THTP451), and the blocks for THTP420, THTP410 and THTP400. There was no HMA2293. The LIST step ended with return code 4, and all 14 statements answered “not found”. LIST CDS MOD(...), LIST CDS LMOD(...) and LIST ACDS MOD(...) for the five modules answered “not found” as well. On this system the THTP450 blocks did the work and the THTP451 blocks found nothing.

A system that holds THTP451. The 4.5.1 form of the job was run on a TK5 system that held THTP451, installed from the package of 4.5.1 as an upgrade from 4.5.0. The modules belong to THTP451 and THTP450 is a mark, so the five DEL SYSMOD(THTP450) MOD(...) blocks of each zone are the ones that find nothing, ten in all. They do not end with HMA2532 like the blocks of the system above. SMP writes HMA3572 for them, as it does for a mark that lists no module (“A Development Build with a Later FMID”). The UCLIN step ended with return code 8 and the LIST step with return code 4. The job reported HMA2550 35 times, HMA2532 4 times and HMA3572 10 times, and there was no HMA2293. All 14 LIST statements of the job and all 15 statements for the modules and load modules answered “not found”, so the removal was complete. Scratching the libraries, allocating them again and installing the same package ended with return code 0000 in every step, with ten HMA2380 lines and the banner of 4.5.1, and THTP450 was a mark again.

What was not measured. A system at 4.4.0 or older was not run. Its modules belong to an FMID that no MOD block names, and whether the DEL MOD and DEL SYSMOD statements remove them cleanly is not known.

The next section is about the case where a system holds an FMID that the job does not name, because a development build put it there.

A Development Build with a Later FMID

A development build of the source tree is packaged under the FMID of the release that the tree is heading for. A build of 4.5.0-dev carries THTP450, the id of the release that the tree becomes. If you installed such a package with SMP, the system holds an id that the job of “Step 2: Cut the FMIDs out of the SMP Inventory” does not name. The job of “What Changes for HTTPD 4.5.1” names THTP450 and THTP451. The sessions of this section were measured with the changes of “What Changes for HTTPD 4.5.0”, which the job of “What Changes for HTTPD 4.5.1” contains, on a development build under THTP450. A development build under THTP451 is covered by the same blocks, and that was not run. The rest of the section is for the job of “Step 2: Cut the FMIDs out of the SMP Inventory” as printed, and for an id later than THTP451.

What the job does on such a system. The sessions of this section were measured with SMP 4 (HMASMP LVL 04.48) on two systems. The TK5 system held 4.3.0 and 4.4.0, installed by SMP, before the development build was installed over them. The MVS/CE system was fresh. On both, the job of the 4.4.0 chapter ends with condition code 8, and it removes the modules but not the development build. The five DEL SYSMOD(THTP440) MOD(...) blocks of each zone fail, because on such a system THTP440 is only a mark with DELBY naming THTP450 and lists no modules.

  DEL SYSMOD(THTP440) MOD(HTTPD) .
HMA3572 ** MOD HTTPD TO BE DELETED FROM ENTRY DOES NOT EXIST
HMA2560    UPDATE PROCESSING TERMINATED - UPDATE NOT COMPLETE
 ENDUCL .
HMA2050    UCLIN PROCESSING COMPLETED - HIGHEST RETURN CODE IS 08

The DEL MOD and DEL LMOD blocks end with HMA2550. The module entries are gone from both zones, and so are the ids that the job names and the system held. THTP450 stays in both zones, and its MOD list still names the five modules, whose entries no longer exist. The libraries are not touched. LIST CDS MOD(...) now answers that the module is not found, so the modules look free, and only the function itself shows what is left. This is the TK5 system, without the page headers of the listing.

 LIST CDS SYSMOD(THTP450) .

SMPCDS   SYSMOD ENTRIES

  NAME

THTP450   TYPE            = FUNCTION
          STATUS          = REC  APP  ACC
          FMID            = THTP450
          JCLIN           = YES
          DATE/TIME REC   = 26.301  18:17:20
                    APP   = 26.301  18:17:50
                    ACC   = 26.301  18:18:04
          DELETE VER(001) = THTP440
          MOD             = ABEND0C1  HTTPD     HTTPDM    HTTPDMTT  HTTPDSRV

HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 00

Why the leftover matters. The install job of the 4.4.0 package receives the SYSMOD, and then APPLY and ACCEPT both end with return code 12. Nothing is installed. The cause is the mark: after the development build, THTP440 is a function that THTP450 deleted. The server still starts, and it prints the banner of the development build. This is the control run on the TK5 system: the 4.4.0 package installed over the development build, with no removal in between.

 APPLY S(THTP440) CHECK .

HMA3792 ** SYSMOD THTP440 SELECTED FOR APPLY IS DELETED
HMA3703 ** APPLY PROCESSING TERMINATED BECAUSE FUNCTION SYSMOD THTP440 FAILED
HMA2050    APPLY PROCESSING COMPLETED - HIGHEST RETURN CODE IS 12

 ACCEPT S(THTP440) DIS(WRITE) .
HMA4140    SMPACDS DIRECTORY SUCCESSFULLY LOADED FOR IN-STORAGE UPDATE OPERATIONS

HMA3792 ** SYSMOD THTP440 SELECTED FOR ACCEPT IS DELETED
HMA3703 ** ACCEPT PROCESSING TERMINATED BECAUSE FUNCTION SYSMOD THTP440 FAILED
HMA3680    SMPACDS IN STORAGE DIRECTORY SUCCESSFULLY REWRITTEN
HMA2050    ACCEPT PROCESSING COMPLETED - HIGHEST RETURN CODE IS 12

Find out which id the system carries. Run this under the SMP procedure of your system (SMPAPP on TK5).

  //HTTPDLST JOB (SYS),'HTTPD LIST',
  //             CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),
  //             REGION=4096K
  //LISTM   EXEC SMPAPP
  //SMPCNTL  DD  *
   LIST CDS MOD(HTTPD) .
  /*
  //

This is the answer of the TK5 system with the development build, without the page headers.

 LIST CDS MOD(HTTPD) .

SMPCDS  MODULE ENTRIES

  NAME

HTTPD     LASTUPD         = THTP450  TYPE=ADD
          LIBRARIES       = DISTLIB=AHTTPLOD
          FMID            = THTP450
          RMID            = THTP450
          LMOD            = HTTPD

HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 00

FMID = THTP450 puts you in this section. So does any other id except THTP400, THTP410, THTP420, THTP430 and THTP440. Those five are releases, the job of “Step 2: Cut the FMIDs out of the SMP Inventory” removes them, and this section is not yours. Only THTP450 has been measured. A package that was built with a throwaway id of its own is the same case with another name, and that was not measured. Read your id wherever this section says THTP450.

Change the job in three places, in both zones. They are the changes of “What Changes for HTTPD 4.5.0”, with the placement that the measured job had.

  1. Add a block for THTP450: UCLIN CDS . (UCLIN ACDS . in the ACDS), DEL SYSMOD(THTP450) ., ENDUCL . and RESETRC .. Put it ahead of the block DEL SYSMOD(THTP440) .. Each zone has one more block then, and the job has 37 DEL statements, 21 against the CDS and 16 against the ACDS.
  2. In the five DEL SYSMOD(THTP440) MOD(...) blocks, name THTP450 in place of THTP440. The modules of such a system belong to the newest id. The block DEL SYSMOD(THTP440) . stays.
  3. Add LIST CDS SYSMOD(THTP450) . and LIST ACDS SYSMOD(THTP450) . to the LIST step, each ahead of the THTP440 statement of its zone. The step has twelve statements then.

What the changed job does. It was measured on the two systems above and in four further runs. Every statement that names THTP450 ends with HMA2550, in both zones: the ten DEL SYSMOD(THTP450) MOD(...) blocks and the two DEL SYSMOD(THTP450). The UCLIN step still ends with condition code 8 whenever the job names an id that the system does not hold, as “Reading the return codes” describes. How many such ids there are depends on the marks the system carries. The runs gave four (THTP410 and THTP400 in each zone) on TK5 after 4.3.0, 4.4.0 and the development build, six on MVS/CE with 4.4.0 before the development build, and eight on fresh systems. Because of RESETRC . the job runs to its end in every case. Do not wait for condition code 0. The LIST is the result: all twelve statements answer that the id is not found, as in “Step 3: Read the LIST”, and the eleven LIST statements for modules and load modules do the same. This is the first of the twelve, without the page headers.

 LIST CDS SYSMOD(THTP450) .

LIST     SELECT SUMMARY REPORT FOR SMPCDS

THE FOLLOWING SELECTED ENTRIES WERE NOT FOUND OR WERE NOT ELIGIBLE FOR PROCESSING

 TYPE        NAME
 SYSMOD      THTP450

HMA2050    LIST PROCESSING COMPLETED - HIGHEST RETURN CODE IS 04

The libraries still hold the development build. UCLIN does not touch them. On the TK5 system HTTPD.LINKLIB and HTTPD.AHTTPLOD each still listed the five modules ABEND0C1, HTTPD, HTTPDM, HTTPDMTT and HTTPDSRV after the job. If you install a release next, do not scratch the libraries and do not run the allocation job. Run the install job of the release package. If you only remove HTTPD, go on with “Step 4: Scratch the Libraries”. That step scratches those two libraries and not HTTPD.DEV.LINKLIB, which is yours to scratch, and it was not run after a development build.

Installing a release afterwards. Measured with the 4.4.0 package on both systems, after the changed job and without the allocation job. Every step of the install job ended with condition code 0, APPLY included. APPLY reported ten HMA2380 lines, one for each of the five modules in each of the two libraries. These are two of them.

HMA2380    COPY SUCCESSFUL - MOD=ABEND0C1 - LMOD=ABEND0C1 - LIBRARY=LINKLIB - SYSMOD=THTP440 - RETURN CODE=00
HMA2380    COPY SUCCESSFUL - MOD=ABEND0C1 - LMOD=ABEND0C1 - LIBRARY=AHTTPLOD - SYSMOD=THTP440 - RETURN CODE=00

The LIST of the module then shows FMID = THTP440 and RMID = THTP440, and THTP450 is not found. THTP430 is now a function with DELBY = THTP440, also on a system that never held it. That mark is the release’s own and not a leftover of the development build. After the start, the console shows the release.

/18.21.46 STC   43  HTTPD000I HTTPD 4.4.0 (93CD307) STARTING
/18.21.46 STC   43  HTTPD001I HTTPD 4.4.0 READY - SERVING /www

A banner with -DEV after a successful install means that the server was loaded from another library. This is the banner of a development build, from the start after the control run, where the install had failed.

/18.31.11 STC   43  HTTPD000I HTTPD 4.5.0-DEV (9116F34-DIRTY) STARTING
/18.31.11 STC   43  HTTPD001I HTTPD 4.5.0-DEV READY - SERVING /www

A development build is deployed to HTTPD.DEV.LINKLIB by default, and a procedure whose STEPLIB names that library ahead of HTTPD.LINKLIB loads the module from there. Neither the SMP deletion nor the install of the release touches HTTPD.DEV.LINKLIB. Read the STEPLIB of your procedure. If it names that library, take it out, or scratch the library when you no longer need it, and start HTTPD again. This was not measured with HTTPD: the development builds of the runs were installed from the SMP package.

Note: What has not been measured. The runs did not stop HTTPD before the jobs (“Step 1: Stop the Server”), so the server ran while SMP replaced the modules, and it was restarted after the install. A development build installed directly over a system that holds 4.3.0 or older, and a system with a history older than 4.3.0, were not run, and neither were the steps that scratch the libraries and finish the removal after a development build. The release install over a system that only the unchanged job of “Step 2: Cut the FMIDs out of the SMP Inventory” has cleaned, with THTP450 still in the inventory, was not run either; the control run above is the nearest case.