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.
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
| Item | Name |
| FMID | THTP440 |
| Load modules | HTTPD, HTTPDSRV, HTTPDM, HTTPDMTT, ABEND0C1 |
| Target library | HTTPD.LINKLIB |
| Distribution library | HTTPD.AHTTPLOD |
| Sample library | HTTPD.SAMPLIB (SMP does not own it) |
| Document root disk | HTTPD.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.
- Five
DEL SYSMOD(THTP440) MOD(...)statements. They take the five modules out of the entry of the FMID. - Five
DEL MOD(...)statements. They remove the module entries. - Five
DEL LMOD(...)statements, in the CDS only. They remove the load module entries. - Five
DEL SYSMOD(...)statements, one for each id fromTHTP440down toTHTP400. 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
DELis an error. SMP writesHMA2532(the entry does not exist) andHMA2560(update not complete), and the block ends with return code 8. - An error stays in force for the rest of the step. Every later
UCLINof the same step is answered withHMA2293(control statement ignored due to previous error), and itsDELstatements are discarded without a trace. RESETRC .after each block lifts the error. A newEXECstep starts clean as well.
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
- 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
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.
- Remove the line of the HTTPD user from
USERSonly if no other product uses the user. Remove a profile only if no other product uses it. A profile of a route can belong to a server module of another product, for example mvsMF. - Reload the tables with the RAKF started tasks,
S RAKFPROFfor the profiles andS RAKFUSERfor the users.
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.
- Add one block for
THTP450to each zone. It has four lines:UCLIN CDS .(UCLIN ACDS .in the ACDS),DEL SYSMOD(THTP450) .,ENDUCL .andRESETRC .. - In the five
DEL SYSMOD(THTP440) MOD(...)blocks, nameTHTP450in place ofTHTP440. The modules of a 4.5.0 system belong to the newest FMID. The blockDEL SYSMOD(THTP440) .stays. - Add
LIST CDS SYSMOD(THTP450) .andLIST ACDS SYSMOD(THTP450) .to theLISTstep.
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.
- Add one block for
THTP451to each zone, with the four lines of the block forTHTP450, and put it ahead of the blockDEL SYSMOD(THTP450) .. - Add five
DEL SYSMOD(THTP451) MOD(...)blocks, ahead of the five blocks that nameTHTP450, and keep those five. The modules of a 4.5.1 system belong toTHTP451, and those of a 4.5.0 system toTHTP450. The job names both, so that you need not know which release the system holds. - Add
LIST CDS SYSMOD(THTP451) .andLIST ACDS SYSMOD(THTP451) .to theLISTstep, each ahead of theTHTP450statement of its zone.
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
- 31 statements ended with
HMA2550, and 18 ended withHMA2532
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.
- Add a block for
THTP450:UCLIN CDS .(UCLIN ACDS .in the ACDS),DEL SYSMOD(THTP450) .,ENDUCL .andRESETRC .. Put it ahead of the blockDEL SYSMOD(THTP440) .. Each zone has one more block then, and the job has 37DELstatements, 21 against the CDS and 16 against the ACDS. - In the five
DEL SYSMOD(THTP440) MOD(...)blocks, nameTHTP450in place ofTHTP440. The modules of such a system belong to the newest id. The blockDEL SYSMOD(THTP440) .stays. - Add
LIST CDS SYSMOD(THTP450) .andLIST ACDS SYSMOD(THTP450) .to theLISTstep, each ahead of theTHTP440statement 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.
THTP450 still in the inventory, was not run either; the control run above is the nearest case.