Google
 

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