Trailing-Edge
-
PDP-10 Archives
-
bb-jr93e-bb
-
dbsany.f06
There are 10 other files named dbsany.f06 in the archive. Click here to see a list.
;
; VERSION 5A COMMENT
;
; This edit supersedes edit 544. If edit 544 is not installed,
; remove the lines
;
; .ASSOCIATED +544
; .REMOVE 544
;
; from the .FIX file.
;
;
; SYMPTOM
;
; Corrupt line-headers may cause severe damage to database.
;
;
; **********
; DIAGNOSIS
;
; DBCS does not check the line-headers for consistency
; once the headers have been created. Such a check at
; each retrieval is desirable to maintain integrity of
; the database.
;
; **********
; CURE
;
; Install edit 601 (replacing edit 544) to check the
; consistency of line-headers on each record retrieval.
; Three things are checked:
; 1) record type ID (TID) must be acceptable;
; 2) record length must match length declared by user;
; 3) record must fit in data area on DB page.
;
; This code is skipped in DBMEND processing.
;
; This edit includes a check to prevent attempting
; to check records not declared in sub-schema.
;
; If anything looks bad, this edit forces a status code of
; XX56 to notify the user of inconsistent data.
;
;
; Note ***** This edit applies to DBMS10 + DBMS20 V5A, and to COBOL
; and to FORTRAN
;
; The recommended filename for this edit is 601.FIX. The lines
; .EDIT thru .ENDE should be typed into that file.
;
; Apply this edit to DBSANY.REL **********
;
;
; The edit can be inserted using the following commands:
;
; For a COBOL-68 DBMS system ...
;
; .R MAKLIB
; *DBSANY.601=DBSANY.REL,601.FIX/F
; *LIBOL.601=LIBOL.REL/M:DBKIO,DBSANY.601/R:DBKIO
; *LIBOL.601=LIBOL.601/INDEX
;
; .R LINK
; *LIBSHR,LIBOL.601/SEARCH/GO
; .SAVE LIBO12
;
; For a COBOL-74 DBMS system ...
;
; .R MAKLIB
; *DBSANY.601=DBSANY.REL,601.FIX/F
; *C74LIB.601=C74LIB.REL/M:DBKIO,DBSANY.601/R:DBKIO
; *C74LIB.601=C74LIB.601/INDEX
;
; .R LINK
; *C74SHR,C74LIB.601/SEARCH/GO
;
; .SAVE C74O12
;
; For a FORTRAN DBMS system ...
;
; .R MAKLIB
; *DBSANY.601=DBSANY.REL,601.FIX/F
; *FORLIB.601=FORLIB.REL/M:DBKIO,DBSANY.601/R:DBKIO
; *FORLIB.601=FORLIB.601/INDEX
;
; .R LINK
; *FORLIB.601/INCLUDE:FOROTS,FORLIB.601/S/G
;
; .SAVE FOROTS
;
;
; The patched files should be renamed to .REL to be used as the base for
; any future edits.
;
;
;**********************************************************************
;
;
.EDIT 601
.NAME RL
.MODULE DBKIO
.ASSOCIATED +544
.REMOVE 544
.INSERT GET.RE,AFTER,<PUSHJ P,GET.ONL>
;+
; The following two lines of code test whether there is a record
; list defined to the sub-schema invoked by the run-unit. For
; DBMEND there is not, and in fact the symbol RECLIST is not
; defined to DBMEND. If RECLIST(SS) is equal to 0, there is no
; record list for the sub-schema. DBMEND uses a skeletal sub-set
; of the improper sub-schema for its processing.
;-
SKIPN R0,127(SS) ; 127=RECLIS -- Valid record list?
JRST %601A7+1 ; No -- bypass edit 601
;+
; The following code is a spot check for GET.REC which will test
; for an acceptable TID for the current record just retrieved
; and for an offset and length which falls in the data area of
; the current data base page. Also it checks the record length
; in the line-header against the declared user record length
; in the in-core data base.
;-
PUSH P,R0 ; Get 4 ACs
PUSH P,R1
PUSH P,PAG
PUSH P,LIN
;
; Load TID of current record
;
LDB R0,[POINT LH$TID,LH.TID+0(LINHDR),LH%TID]
;
; Test for acceptable TID
;
CAIL R0,1 ; TID GTR 0?
CAMLE R0,TIDHIG(SS) ; TID LEQ high user TID?
PUSHJ P,XC.DAT## ; Bad TID
CAIG R0,3 ; TID GTR internally defined TIDs
JRST %601A0 ; No -- OK
CAIGE R0,SYSTID ; TID not LSS SYSTEM TID?
PUSHJ P,XC.DAT## ; Bad TID
%601A0: MOVEM R0,PAG ; Save aside current TID
;+
; Test offset and length to make sure that they
; point within the data area on the page and that
; the length in the line-hdr conforms to the declared
; length in the in-core record block.
;-
;
; Load offset of current record
;
LDB R0,[POINT LH$OFF,LH.OFF(LINHDR),LH%OFF]
HRRZ R1,AB.CALC(AREABLK) ; Get no of CALC chains on page
ADDI R1,2 ; For page hdr -- now points at first data word
CAMGE R0,R1 ; Offset points into page's data area?
PUSHJ P,XC.DAT## ; No -- bad offset
HRRZ R1,1(PAGHDR) ; Get first free word on page
PUSH P,AREABLK ; Get another AC
;
; Now test against declared length
;
; LDB AREABLK,[POINT LH$RSIZ,LH.RSIZ+0(LINHDR),LH%RSIZ]
LDB AREABLK,[POINT 12,0(LINHDR),11] ; LOAD RECORD'S LENGTH
CAIGE PAG,SYSTID ; Is this a user-defined record?
JRST %601A2 ; No
HRRZ LIN,127(SS) ; Get in-core record block (127 = RECLIST)
SUBI LIN,SYSTID ;
ADD LIN,PAG ;
HRRZ PAG,0(LIN) ; Get record block, if in sub-schema
JUMPN PAG,%601A1 ; Is record in sub-schema?
POP P,AREABLK ; No -- return AC
JRST %601A6 ; No more testing
%601A1: HRRZ LIN,1(PAG) ; Get its declared total length (1 = RB.TSIZ)
CAME AREABLK,LIN ; Line-hdr len = declared len?
PUSHJ P,XC.DAT## ; No -- bad
JRST %601A5 ; Yes -- ok
%601A2: CAIE PAG,1 ; Area status rec? (Note: 1 = TID.ASR)
JRST %601A3 ; No
CAIE AREABLK,2 ; Length = 2?
PUSHJ P,XC.DAT## ; No -- bad
JRST %601A5 ; Yes -- OK
%601A3: CAIE PAG,2 ; Index record? (Note: 2 = TID.XB)
JRST %601A4 ; No -- must be buoy
CAILE AREABLK,170 ; LEQ max Index Block size? (Note 170 =MAX.XB)
PUSHJ P,XC.DAT## ; No -- bad
JRST %601A5 ; Yes -- ok
%601A4: CAIE AREABLK,TID.XL ; Correct buoy length?
PUSHJ P,XC.DAT## ; No -- bad
;
; Does record fit on the data area of the page?
;
%601A5: ADD R0,AREABLK ; Add length to record's offset
POP P,AREABLK ; Give back last AC
CAMLE R0,R1 ; Does record fit in high end of data area?
PUSHJ P,XC.DAT## ; No -- bad offset + length
%601A6: POP P,LIN ; Passed spot checks -- give back ACs
POP P,PAG
POP P,R1
%601A7: POP P,R0
.ENDI
.ENDE
;*************** END OF DBMS-10 V.5A EDIT 601 *********
;******************** START OF DBMS10-V5A EDIT 603, PART 1 OF 3 *************
;
; [SYMPTOM]
;
; Sites with edit 557 installed can receive random
; unexpected SUS (xx62 system in undefined state) exceptions,
; even when all failing transactions are properly backed out
; via a run-unit using before images from the journal. The
; incidence of these occurrances is dimished by edit 576,
; however they will still occasionally happen. The only
; physical symptom is that the journal JUS (Journal in
; undefined state) flag is set (-1 in word 30 of the first
; journal page).
;
; [DIAGNOSIS]
;
; Edit 557 was designed to prevent simultaneous updators
; from continuing to update a data base that had been left in
; a questionable state via an update exception returned to any
; one of the updating run-units. It accomplised this by
; checking for an error flag being on, and leaving the JUS
; word on in the journal label page for the other updators to
; detect. Unfortunately this situation occured for every
; update exception that failed, even though the exception may
; have been recovered by an automatic backup or a subsequent
; call to JBTRAN. Edit 576 tried to soften the effect for
; subsequent calls for the run-unit that initially left the
; JUS condition, but did not address the actual problem.
;
; [CURE]
;
; Check the internal SUS flag to determine whether of not
; to leave JUS set when leaving DBCS. If the exception occurs
; outside a transaction, the automatic rollback will clear the
; SUS state internal to the DML call, and JUS will not be left
; on. If inside a transaction, the data base will remain
; locked via the ENQ until the run-unit calls JBTRAN to
; backout the transaction, at which point the SUS state will
; be turned off, and JUS will be cleared on DBCS exit. Of
; course, if there is no active journal containing before
; images, there is no possibility of rollback, and hence JUS
; (if there is a journal at all) will remain on until cleared
; via some external recovery method (usually terminating with
; a DBMEND UNLOAD command). Also, if a transaction/update
; verb is aborted (via system crash or program abort) JUS will
; remain on until manually cleared.
;
; This edit removes both edits 557 and 576.
;
;*************** EDIT THE FOLLOWING INTO FILE 603.FIX *********************
.EDIT 603
.NAME EGM
.DATE 25-Mar-83
.MODULE DBJOUR
.REMOVE 557
.INSERT JR.LOUT+6,BEFORE,<SETZM -4(JP)>
TLNN X,PSW.SUS ;[603] Retain JUS if bad update still in
.ENDI
.ENDE
;***************************** CAUTION *************************************
;
; TO AVOID LOSING ANY PREVIOUS PATCHES BE
; SURE TO USE THE LATEST PATCHED REL FILES
; AS A BASE FOR THIS EDIT.
;THIS PATCH AFFECTS THE FOLLOWING:
;DBMS COMPONENTS:
; NONE
;
;LANGUAGE INTERFACES:
; COBOL (LIBOL.REL,LIBO12.EXE,C74LIB.REL,C74O12.EXE)
; FORTRAN (FORLIB.REL/FOROT6.EXE or DBMSF.REL/FDBOT7.EXE)
; ------------------ TO INSTALL THIS EDIT ------------------
;
; .RUN SYS:MAKLIB
; *DBSANY.REL=DBSANY.REL,603.FIX/F
; *DBSCOB.REL=DBSCOB.REL,603.F02/F
; *DBSFOR.REL=DBSFOR.REL,603.F03/F
; */EXIT
; .SUBMIT DBMS10.CTL ;FROM DBMS-10 DISTRIBUTION TAPE
; ;OR PERFORM FORTRAN DBMS INSTALLATION
;
;************************** END OF EDIT 603, PART 1 OF 3 ********************