soyMAIL 2.1.0 requires JavaScript
soyMAIL @ wasd.vsm.com.au
       info-WASD Mailing List 2022 

Mon 18:49:47 Message "2022 / 0063" opened.  MIME.  UTF-8.  15 kbytes.    JavaScript

Subject:[Info-WASD] WASD Startup using 'Hard Links'0063 / 0000
From:Mark.Daniel@wasd.vsm.com.au
Reply-to:info-wasd@vsm.com.au
Date:Wed, 16 Nov 2022 20:58:55 +1030  [16-NOV-2022 20:58]
To:info-WASD@vsm.com.au

[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.

  ¤¤¤       
  ¤¤¤