[This is a real-world example used in production.
I have edited the email only for anonymity.
Again, this is food-for-thought, not prescriptive.]
The key for this approach is the use of 'hard links'.
The idea was given to me by an old developer that used to work with us.
I had used 'hard links' and soft links on Unix system and had heard of them
on OpenVMS, but had never used them there.
'Hard Links' can be used in many different ways. I'll present the way
********* uses it.
********* runs a SFTP/WASD cluster to serve their Application File Interface
using independent system disks. WASD is installed on a cluster common disk.
The prerequisite is that 'Hard Links' has to be enabled on the volume
where WASD is installed.
$set volume /VOLUME_CHARACTERISTICS=HARDLINKS DSA230
FTP228> sho dev dsa230/full
Disk DSA230:, device type Generic SCSI disk, is online, mounted, file-oriented
device, shareable, available to cluster, shadow set virtual unit, error
logging is enabled, device supports bitmaps (no bitmaps active).
Error count 0 Operations completed 315537
Owner process "" Owner UIC [TBX,SYSTEM]
Owner process ID 00000000 Dev Prot S:RWPL,O:RWPL,G:R,W
Reference count 4 Default buffer size 512
Total blocks 20971520 Sectors per track 48
Total cylinders 54614 Tracks per cylinder 8
Logical Volume Size 20971520 Expansion Size Limit 21954560
Volume label "WASD" Relative volume number 0
Cluster size 16 Transaction count 3
Free blocks 19539200 Maximum files allowed 616809
Extend quantity 5 Mount count 2
Mount status System Cache name "_DSA21:XQPCACHE"
Extent cache size 64 Max blocks in extent cache 1953920
File ID cache size 4096 Blocks in extent cache 0
Quota cache size 0 Maximum buffers in FCP cache 10240
Volume owner UIC [TBX,SYSTEM] Vol Prot S:RWCD,O:RWCD,G:RWCD,W:RWCD
Volume Status: ODS-5, subject to mount verification, write-through XFC
caching enabled, write-back XQP caching enabled,*hard links enabled,*
special files enabled.
Volume is also mounted on FTP128.
Members of shadow set DSA230: are $1$DGA12223:, $1$DGA11223:.
The command for defining a hard link is:
SET
FILE
/ENTER
/ENTER=new-filespec
The new-filespec parameter is used to create either an alias or
a hard link for the file specified in the SET FILE command. For
detailed information about using hard links and aliases, see the
VSI OpenVMS System Manager's Manual.
Normally you would use /ENTER to create an alias or a hard link
in a directory different from the one where the original filename
resides. If the names are not in different directories, you or
another user could subsequently lose data during a delete or
purge operation. The DELETE and PURGE commands and the file
version limit feature can behave unpredictably if the original
name and the new name are in the same directory.
To remove an alias or hard link, use the SET FILE /REMOVE
command. Exercise caution when using the DELETE and SET FILE
/REMOVE commands, or you could end up with either an inaccessible
file that has no name or a name that does not refer to a file.
Follow these guidelines to avoid such problems:
o Use SET FILE /REMOVE to remove an alias; do not use the DELETE
command to remove an alias.
o Do not use SET FILE /REMOVE to remove the original file name.
If you do not follow these guidelines and encounter problems, use
ANALYZE /DISK /REPAIR to move inaccessible files to the SYSLOST
directory and remove names that no longer refer to files.
WASD is installed in version specific directories.
This will involve the copying of the contents of the [.LOCAL] directory of
the actual version to the [.LOCAL] directory of the new installed version.
********* makes use of the [IncludeFile] parameter in their AUTH and MAP
configuration files so that the WASD DTAG user specific configuration is
located independently of the WASD product configuration.
Directory DSA230:[000000]
wasd_root_V11-0-2.DIR;1
wasd_root_V11-1-0.DIR;1
wasd_root_V11-2-0.DIR;1
wasd_root_V11-3-0.DIR;1
wasd_root_V11-4-0.DIR;1
wasd_root_V11-5-1.DIR;1
wasd_root_V12-0-0.DIR;1
Each of the WASD OpenVMS systems has an individual WASD Startup file in
SYS$STARTUP where the use of the 'hard link' comes to bear.
$! WASD FTP128 Startup using Hardlinks
$!
$ set process/PARSE_STYLE=EXTENDED
$ if f$search ("DSA230:[000000]WASD_ROOT_FTP128.DIR") .NES. ""
$ then
$ delete DSA230:[000000]WASD_ROOT_FTP128.DIR;
$ endif
$!
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-0-2.DIR
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-1-0.DIR
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-2-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-3-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-4-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V11-5-1.dir
$ set file/enter=DSA230:[000000]wasd_root_ftp128.dir DSA230:[000000]wasd_root_V12-0-0.dir
$!
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv2,SSLv3)/SYSUAF=ID/profile"
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv2,SSLv3)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA" !J.D. 05.09.2013
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv3,TLSv1,TLSv1.1,TLSv1.2)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv3,TLSv1,TLSv1.1,TLSv1.2,TIMEOUT=5)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$ define/sys WASD_STARTUP_SERVER "/SSL=(TLSv1,TLSv1.1,TLSv1.2,TLSv1.3,TIMEOUT=5)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$ WASD_DECNET = 1
$ WASD_SSL = 1 ! 0 = off, 1 = on
$ @ DSA230:[WASD_ROOT_ftp128.STARTUP]STARTUP.COM
$exit
$! WASD FTP228 Startup using Hardlinks
$!
$ set process/PARSE_STYLE=EXTENDED
$ if f$search ("DSA230:[000000]WASD_ROOT_FTP228.DIR") .NES. ""
$ then
$ delete DSA230:[000000]WASD_ROOT_FTP228.DIR;
$ endif
$!
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-0-2.DIR
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-1-0.DIR
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-2-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-3-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-4-0.dir
$! set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V11-5-1.dir
$ set file/enter=DSA230:[000000]wasd_root_ftp228.dir DSA230:[000000]wasd_root_V12-0-0.dir
$!
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv2,SSLv3)/SYSUAF=ID/profile"
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv2,SSLv3)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA" !X.Y. 05.09.2013
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv3,TLSv1,TLSv1.1,TLSv1.2)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$! define/sys WASD_STARTUP_SERVER "/SSL=(SSLv3,TLSv1,TLSv1.1,TLSv1.2,TIMEOUT=5)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$ define/sys WASD_STARTUP_SERVER "/SSL=(TLSv1,TLSv1.1,TLSv1.2,TLSv1.3,TIMEOUT=5)/SYSUAF=(VMS,ID,PROXY)/PROFILE/PERSONA"
$ WASD_DECNET = 1
$ WASD_SSL = 1 ! 0 = off, 1 = on
$ @ DSA230:[WASD_ROOT_ftp228.STARTUP]STARTUP.COM
$exit
Basically one can only see use of the hard links when examining the file id's
of the WASD directories.
Directory DSA230:[000000]
wasd_root_ftp128.dir;1 *(16042,1,0) * 3 10-MAY-2022 15:14:06.93
wasd_root_ftp228.dir;1 *(16042,1,0) * 3 10-MAY-2022 15:14:06.93
wasd_root_V11-0-2.DIR;1
(13,1,0) 3 11-NOV-2016 07:05:03.27
wasd_root_V11-1-0.DIR;1
(3017,1,0) 3 26-JUN-2017 10:59:14.32
wasd_root_V11-2-0.DIR;1
(5899,1,0) 3 21-MAR-2018 07:33:40.00
wasd_root_V11-3-0.DIR;1
(8823,1,0) 3 26-MAR-2019 06:54:03.85
wasd_root_V11-4-0.DIR;1
(13107,1,0) 3 22-OCT-2019 08:24:22.24
wasd_root_V11-5-1.DIR;1
(14539,2,0) 3 27-OCT-2020 09:20:07.21
wasd_root_V12-0-0.DIR;1 *(16042,1,0) * 3 10-MAY-2022 15:14:06.93
wasd_root_ftp128.dir and wasd_root_ftp228.dirare both 'hard links' that point
to the version WASD specific directory wasd_root_V12-0-0.DIR;.
When examining the WASD_ROOT logical on the different systems one will see
the following:
FTP128> sho log wasd_root
"WASD_ROOT" = "DSA230:[WASD_ROOT_FTP128.]" (LNM$SYSTEM_TABLE)
FTP228> sho log wasd_root
"WASD_ROOT" = "DSA230:[WASD_ROOT_FTP228.]" (LNM$SYSTEM_TABLE)
Basically it gives ********** the ability to quickly shutdown and startup
with a new WASD version. Minor updates/patches, ie. where I have to compile
a new HTTPD_SSL.EXE for them, are done by replacing the existing
HTTPD_SSL.EXE in the respective WASD version specific directory.
Hopefully I haven't left anything out.
|