Trailing-Edge
-
PDP-10 Archives
-
bb-bt99e-bb
-
rms1v1.d04
There is 1 other file named rms1v1.d04 in the archive. Click here to see a list.
EDIT DESCRIPTIONS FOR RMS-10-V1
EDIT 54 FOR RMS
[SYMPTOM]
A record in an RMS indexed file is not accessible by its index but
may be accessed sequentially. The VERIFY command to RMSUTL reports
an error
"Data Bucket at page n1 points at page n2 but succeeding index
entry does not."
[DIAGNOSIS]
This is caused by the deletion of a short record followed by
writing a much longer record with the same key. The record is
regarded as a duplicate of the deleted record, and flags set
accordingly. If the bucket containing the deleted record is
compressed as a result of the $PUT operation, the deleted record
will be removed but the duplicate flag will not be cleared. This
will cause a three-way split if a split is required. However,
because the duplicate record no longer exists, a three-way split
will instead cause corruption of the index structure, making keyed
access to the new record impossible.
[CURE]
After compressing the bucket and squeezing out any deleted records,
check to be sure that the duplicate flag is correct, and if not,
clear the flag to prevent the three-way split.
Until the next release of RMS, the following patch,
representing Edit 54 to RMS , may be applied to
RMS V1(52) (see comments for use with RMSCOB V1(52)).
***** TOPS-20 patch *****
@ENABLE
$GET SYS:RMS ! or RMSCOB
$MERGE SYS:UDDT
$DD
DDT
MOVE 600006$X ! for RMSCOB, use 525006
<>
MOVEM @770001$X
<>
COMPRESS+320/ MOVE 1,-4(17) FX54A: JRST FX54C#<LF>
FX54A+1/ ADJSP 17,-323 FX54B:<CR>
PAT../ 0 FX54C: MOVE 6,-334(17)<LF>
FX54C+1/ 0 MOVEI 0,2<LF>
FX54C+2/ 0 TDNN 0,0(6)<LF>
FX54C+3/ 0 JRST FX54D#<LF>
FX54C+4/ 0 MOVE 1,KDB<LF>
FX54C+5/ 0 MOVE 0,4(6)<LF>
FX54C+6/ 0 LDB 0,FX54E#<LF>
FX54C+7/ 0 ADD 0,2<LF>
FX54C+10/ 0 PUSH 17,6<LF>
FX54C+11/ 0 PUSH 17,0<LF>
FX54C+12/ 0 PUSHJ 17,CKEYKU<LF>
FX54C+13/ 0 ADJSP 17,-2<LF>
FX54C+14/ 0 CAMN 1,FX54F#<LF>
FX54C+15/ 0 JRST FX54D#<LF>
FX54C+16/ 0 MOVEI 0,2<LF>
FX54C+17/ 0 ANDCAM 0,0(6)<LF>
FX54C+20/ 0 FX54D: MOVE 1,-4(17)<LF>
FX54D+1/ 0 JRST FX54B<LF>
FX54D+2/ 0 FX54E: 410301,,2<LF>
FX54E+1/ 0 FX54F: -1<LF>
FX54F+1/ 0 PAT..:<CR>
MOVE @770001$X
<>
MOVEM 600006$X ! for RMSCOB, use 525006
<>
^Z
$SAVE RMS 600 640 ! for RMSCOB, use "SAVE RMSCOB 5
25 565"
SYS:RMS.EXE.2 Saved
$DISABLE
@
***** End of TOPS-20 patch *****
***** TOPS-10 patch *****
.R FILDDT
File: SYS:RMS/P ! or "SYS:RMSCOB/P"
COMPRESS+320/ MOVE 1,-4(17) FX54A: JRST FX54C#<LF>
FX54A+1/ ADJSP 17,-323 FX54B:<CR>
PAT../ 0 FX54C: MOVE 6,-334(17)<LF>
FX54C+1/ 0 MOVEI 0,2<LF>
FX54C+2/ 0 TDNN 0,0(6)<LF>
FX54C+3/ 0 JRST FX54D#<LF>
FX54C+4/ 0 MOVE 1,KDB<LF>
FX54C+5/ 0 MOVE 0,4(6)<LF>
FX54C+6/ 0 LDB 0,FX54E#<LF>
FX54C+7/ 0 ADD 0,2<LF>
FX54C+10/ 0 PUSH 17,6<LF>
FX54C+11/ 0 PUSH 17,0<LF>
FX54C+12/ 0 PUSHJ 17,CKEYKU<LF>
FX54C+13/ 0 ADJSP 17,-2<LF>
FX54C+14/ 0 CAMN 1,FX54F#<LF>
FX54C+15/ 0 JRST FX54D#<LF>
FX54C+16/ 0 MOVEI 0,2<LF>
FX54C+17/ 0 ANDCAM 0,0(6)<LF>
FX54C+20/ 0 FX54D: MOVE 1,-4(17)<LF>
FX54D+1/ 0 JRST FX54B<LF>
FX54D+2/ 0 FX54E: 410301,,2<LF>
FX54E+1/ 0 FX54F: -1<LF>
FX54F+1/ 0 PAT..:<CR>
^Z
.
***** End of TOPS-10 patch *****
********************************************************************************
EDIT 55 FOR RMS
[SYMPTOM]
An RMS indexed file with duplicates allowed on the primary key but
no duplicates allowed on a secondary key is corrupted.
[DIAGNOSIS]
A duplicate record was added which split a bucket in a three-way
split. When RMS attempted to insert the duplicate secondary key
where it was not allowed, an attempt was made to back out the
operation and remove the data record. RMS had not kept track of
the new bucket created for the record, and instead deleted the
wrong user data record, corrupting secondary indexes as well as
losing data.
[CURE]
Find the new record by an RFA search rather than by an ID search of
the current bucket.
Until the next release of RMS, the following patch,
representing Edit 55 to RMS , may be applied to
RMS V1(52) (see comments for use with RMSCOB V1(52)).
***** TOPS-20 patch *****
@ENABLE
$GET SYS:RMS ! for RMSCOB, "GET SYS:RMSCOB"
$MERGE SYS:UDDT
$DD
DDT
MOVE 600006$X ! for RMSCOB, "MOVE 525006$X"
<>
MOVEM @770001$X
<>
REMOVR 100/ PUSHJ 17,SDATAB FX55: PUSHJ 17,POSRFA<CR>
MOVE @770001$X
<>
MOVEM 600006$X ! for RMSCOB, "MOVEM 525006$X"
<>
^Z
$SAVE SYS:RMS 600 640 ! for RMSCOB, "SAVE SYS:RMSCOB 5
25 565"
SYS:RMS.EXE.2 Saved
$DISABLE
@
***** End of TOPS-20 patch *****
***** TOPS-10 patch *****
.R FILDDT
File: SYS:RMS/P ! for RMSCOB, "SYS:RMSCOB/P"
REMOVR+77/ PUSHJ 17,SDATAB FX55: PUSHJ 17,POSRFA<CR>
^Z
.
***** End of TOPS-10 patch *****
********************************************************************************
EDIT 56 FOR RMS
[SYMPTOM]
RMS returns an error reading a line-sequenced file
produced by an editor like SOS.
[DIAGNOSIS]
SOS-like editors insert a word of nulls in a file
rather than split a sequence number and its tab
across a TOPS-10 block boundary. RMS does not
know about this curiosity.
[CURE]
Tell RMS to allow a null word if it is the last word
in a TOPS10-style block.
********************************************************************************
EDIT 57 FOR RMS
[SYMPTOM]
A COBOL program is performing sequential READs followed by REWRITEs
on an RMS indexed file with two keys. Neither key allows
duplicates, but changes are allowed on the alternate key, and the
REWRITEs are changing this key. After updating at least 7 records,
the program blows up with this error:
?RMSIER An internal error was found in routine "PUTBUF" at xxxxxx
Error is: Buffer not allocated
The alternate key structure of the file is corrupted.
[DIAGNOSIS]
An RMS internal buffer is referenced by a buffer descriptor which
contains a usage count of the buffer. (A particular buffer for a
program may have several "users", as when a bucket used by a $GET
is also used by an $UPDATE call before the lock obtained by the
$GET is freed). This internal usage count is stored in a three-bit
field in the descriptor, and is incremented/decremented whenever a
routine within RMS requests/discards a bucket; when the count goes
to zero, that buffer is free for reuse. Routine PUTBUF checks the
usage count before deallocating a buffer, and signals an error if
the bucket has no users.
In this case, RMS is checking for duplicate keys during each
$UPDATE, since the key has changed and no duplicates are allowed.
The dup-checking routine is allocating a buffer without freeing it
later, the usage count eventually overflows and becomes zero, and
the next time the buffer is legitimately deallocated this error
message is issued.
[CURE]
Free the allocated buffer after the duplicate checking is finished.
Until the next release of RMS, the following patch,
representing Edit 57 to RMS, may be applied to
RMS V1(52) (see comments for use with RMSCOB V1(52)).
***** TOPS-20 patch *****
@ENABLE
$GET SYS:RMS ! for RMSCOB, "GET SYS:RMSCOB"
$MERGE SYS:UDDT
$DD
DDT
MOVE 600006$X ! for RMSCOB, "MOVE 525006$X"
<>
MOVEM @770001$X
<>
DOUPDIDX 124/ JUMPN 1,DOUPDI+132 FX057A: JUMPN 1,.+6<LF>
FX057A+1/ SETZM 0(17) SETZM 0(17)<LF>
FX057A+2/ MOVEI -14(17) MOVEI 0,-14(17)<LF>
FX057A+3/ PUSH 17,0 PUSH 17,0<LF>
FX057A+4/ PUSHJ 17,PUTBKT PUSHJ 17,PUTBKT<LF>
FX057A+5/ JRST FX057A+23 JRST FX057E#<LF>
FX057A+6/ MOVEI -12(17) MOVEI 0,-12(17)<LF>
FX057A+7/ PUSH 17,0 PUSH 17,0<LF>
FX057A+10/ MOVEI -15(17) MOVEI 0,-15(17)<LF>
FX057A+11/ PUSH 17,0 PUSH 17,0<LF>
FX057A+12/ PUSHJ 17,CHKDUP JRST FX057D#<LF>
FX057A+13/ ADJSP 17,-2 FX057B:<CR>
FX057B+157/ MOVEI .JBPFI+4 FX057C:<CR>
PAT../ 0 FX057D: PUSHJ 17,CHKDUP<LF>
FX057D+1/ 0 ADJSP 17,-2<LF>
FX057D+2/ 0 JUMPN 1,.+11<LF>
FX057D+3/ 0 SETZM 0(17)<LF>
FX057D+4/ 0 MOVEI 0,-14(17)<LF>
FX057D+5/ 0 PUSH 17,0<LF>
FX057D+6/ 0 PUSHJ 17,PUTBKT<LF>
FX057D+7/ 0 MOVEI 0,300030<LF>
FX057D+10/ 0 MOVEM 0,USRSTS<LF>
FX057D+11/ 0 FX057E: ADJSP 17,-3<LF>
FX057E+1/ 0 JRST FX057C<LF>
FX057E+2/ 0 SETZM 0(17)<LF>
FX057E+3/ 0 MOVEI 0,-14(17)<LF>
FX057E+4/ 0 PUSH 17,0<LF>
FX057E+5/ 0 PUSHJ 17,PUTBKT<LF>
FX057E+6/ 0 ADJSP 17,-3<LF>
FX057E+7/ 0 JRST FX057B<LF>
FX057E+10/ 0 PAT..:
MOVE @770001$X
<>
MOVEM 600006$X ! for RMSCOB, "MOVEM 525006$X"
<>
^Z
$SAVE SYS:RMS 600 640 ! for RMSCOB, "SAVE SYS:RMSCOB 525 565"
SYS:RMS.EXE.2 Saved
$DISABLE
@
***** End of TOPS-20 patch *****
***** TOPS-10 patch *****
.R FILDDT
File: SYS:RMS/P ! for RMSCOB, "SYS:RMSCOB/P"
DOUPDIDX 124/ JUMPN 1,DOUPDI+132 FX057A: JUMPN 1,.+6<LF>
FX057A+1/ SETZM 0(17) SETZM 0(17)<LF>
FX057A+2/ MOVEI -14(17) MOVEI 0,-14(17)<LF>
FX057A+3/ PUSH 17,0 PUSH 17,0<LF>
FX057A+4/ PUSHJ 17,PUTBKT PUSHJ 17,PUTBKT<LF>
FX057A+5/ JRST FX057A+23 JRST FX057E#<LF>
FX057A+6/ MOVEI -12(17) MOVEI 0,-12(17)<LF>
FX057A+7/ PUSH 17,0 PUSH 17,0<LF>
FX057A+10/ MOVEI -15(17) MOVEI 0,-15(17)<LF>
FX057A+11/ PUSH 17,0 PUSH 17,0<LF>
FX057A+12/ PUSHJ 17,CHKDUP JRST FX057D#<LF>
FX057A+13/ ADJSP 17,-2 FX057B:<CR>
FX057B+157/ MOVEI .JBPFI+4 FX057C:<CR>
PAT../ 0 FX057D: PUSHJ 17,CHKDUP<LF>
FX057D+1/ 0 ADJSP 17,-2<LF>
FX057D+2/ 0 JUMPN 1,.+11<LF>
FX057D+3/ 0 SETZM 0(17)<LF>
FX057D+4/ 0 MOVEI 0,-14(17)<LF>
FX057D+5/ 0 PUSH 17,0<LF>
FX057D+6/ 0 PUSHJ 17,PUTBKT<LF>
FX057D+7/ 0 MOVEI 0,300030<LF>
FX057D+10/ 0 MOVEM 0,USRSTS<LF>
FX057D+11/ 0 FX057E: ADJSP 17,-3<LF>
FX057E+1/ 0 JRST FX057C<LF>
FX057E+2/ 0 SETZM 0(17)<LF>
FX057E+3/ 0 MOVEI 0,-14(17)<LF>
FX057E+4/ 0 PUSH 17,0<LF>
FX057E+5/ 0 PUSHJ 17,PUTBKT<LF>
FX057E+6/ 0 ADJSP 17,-3<LF>
FX057E+7/ 0 JRST FX057B<LF>
FX057E+10/ 0 PAT..:
^Z
.
***** End of TOPS-10 patch *****
********************************************************************************
EDIT 60 FOR RMS
[SYMPTOM]
Registers 3 and 4 have been destroyed following a call to RMS.
[DIAGNOSIS]
RMS does not preserve these registers.
[CURE]
Preserve the registers on entry to RMS and restore them before
returning to the user.
********************************************************************************
END OF RMS-10-V1