Google
 

Trailing-Edge - PDP-10 Archives - bb-d549g-sb - bkp2a.bwr
There are no other files named bkp2a.bwr in the archive.
            BEWARE FILE FOR BACKUP VERSION 2A




        A  potentially  serious  problem  with  tape   error
handling exists in V2A of BACKUP.   Different customer sites
will experience this problem in varying  degrees,  depending
upon  the release/MCO level of their monitor and the type of
tape drives that they use.

        Edit 321 corrects this  problem,  and  makes  BACKUP
relatively   failsafe   with  regard  to  tape  errors.   We
recommend that all sites install this patch.  The  patch  is
enclosed as a FIX file to be inserted in BACKRS.REL.



[SYMPTOM]

        Holes in RESTORED disk files, missing records.


[DIAGNOSIS]
 
        Under the  6.03  monitor,  the  tape  service  often
returns  control to the calling program before I/O has taken
place.  If a tape write error occurs, the error will usually
be  noticed by BACKUP at some later time, usually after some
number of output buffers have been queued for output by  the
monitor.   As  a  result, BACKUP writes the repeater records
out of sequence.  These out of sequence repeater records are
thrown  away  when  BACKUP reads them, and holes in the file
result.


[CURE]
 
        1) Teach BACKUP  to  use  repeater  records  out  of
sequence,  based on the value of the relative data word.  In
addition, report missing records and repeated records out of
sequence as they happen.
 
        2) If BACKUP appears to be losing records  when  the
tape  controller is extremely busy, assign a larger value to
the assembly parameter NDSKBF.  This will increase the  size
of  the  disk  buffer  ring,  and  will  prevent BACKUP from
getting farther ahead of a busy controller than  BACKUP  can
recover from.
 
[FILCOM]
File 1)	DSKB:BACKUP.320[30,5326,BACKUP]	created: 1114 20-Dec-1978
File 2)	DSKC:BACKUP.321[30,5326,BACKUP]	created: 1153 10-Jan-1979
 
1)1		TITLE	BACKUP -- MODULE TO SCAN COMMANDS FOR BACKUP --
	%2A(320)
1)		SUBTTL	P.F.CONKLIN/PFC/KCM/JEF/MEB/CLRH/VLR/CGN	
		19-DEC-78
1)	CUSTVR==0		;DEC DEVELOPMENT
****
2)1		TITLE	BACKUP -- MODULE TO SCAN COMMANDS FOR BACKUP --
	%2A(321)
2)		SUBTTL	P.F.CONKLIN/PFC/KCM/JEF/MEB/CLRH/VLR/CGN	
		09-JAN-79
2)	CUSTVR==0		;DEC DEVELOPMENT
**************
1)1	DECEVR==320		;EDIT NUMBER
1)	;+
****
2)1	DECEVR==321		;EDIT NUMBER
2)	;+
**************
1)6	;END OF REVISION HISTORY
****
2)6	;321	^USE OUT-OF-SEQUENCE RECORDS, WARNING USER OF THE OCCURA
	NCE.
2)	;		^DON'T REJECT UNEXPECTED REPEATER RECORDS.
2)	;
2)	;END OF REVISION HISTORY
**************
 

[FILCOM]
File 1)	DSKB:BACKRS.320[30,5326,BACKUP]	created: 1133 20-Dec-1978
File 2)	DSKC:BACKRS.321[30,5326,BACKUP]	created: 1601 12-Jan-1979
 
1)1		TITLE	BACKRS -- MODULE TO DO THE WORK FOR BACKUP -- %2
	A(320)
1)		SUBTTL	FRANK NATOLI/FJN/PFC/KCM/JEF/MEB/CLRH/VLR/CGN	
		19-DEC-78
1)	CUSTVR==0		;DEC DEVELOPMENT
****
2)1		TITLE	BACKRS -- MODULE TO DO THE WORK FOR BACKUP -- %2
	A(321)
2)		SUBTTL	FRANK NATOLI/FJN/PFC/KCM/JEF/MEB/CLRH/VLR/CGN	
		09-JAN-79
2)	CUSTVR==0		;DEC DEVELOPMENT
**************
1)1	DECEVR==320		;EDIT NUMBER
1)	;+
****
2)1	DECEVR==321		;EDIT NUMBER
2)	;+
**************
1)70		CAML	T1,THSRDB	;SEE IF CURRENT OR LATER
1)		JRST	NEWDAT		;YES
1)		MOVE	T2,THSRDB	;LOAD NEEDED DISK BLOCK NUMBER
1)		CAIL	T2,N(T1)	;SEE IF NEEDED BLOCK IS IN THIS
	TAPE RECORD
1)		JRST	NOTNEW		;NO--DROP IT
1)		SUB	T2,T1		;YES, GET DIFFERENCE
****
2)70	;**; [321] CHANGE FOLLOWING CNTFIL, 09-JAN-79
2)		CAMN	T1,THSRDB	;[321] BLOCK EXPECTED?
2)		JRST	XFR1		;[321] YES - GO USE IT
2)		MOVE	T2,THSRDB	;LOAD NEEDED DISK BLOCK NUMBER
2)		CAML	T2,T1		;[321] NEEDED BLOCK GE FIRST BLO
	CK IN RECORD?
2)		CAIL	T2,N(T1)	;[321] AND ALSO LT FIRST BLOCK I
	N NEXT RECORD?
2)		JRST	NOTINB		;[321] NO - GO RESET DISK POINTE
	RS
2)		SUB	T2,T1		;YES, GET DIFFERENCE
**************
1)70	NEWDAT:	TXNN	F,FL$CHK	;SEE IF /CHECK
1)		CAMG	T1,THSRDB	; OR IF THIS IS THE NEEDED BLOCK
1)		JRST	XFR1		;YES--GO TRANSFER OVER
1)		USETO	FILE,(T1)	;NO--POSITION TO FILE BLOCK
1)		MOVEM	T1,THSRDB	; AND UPDATE FILE INDEX
1)		JRST	XFR1		;PROCEED
1)	DSKEOF:	SUBI	P1,200		;COUNT LAST DATA XFR
****
2)70	;**; [321] DELETE NEWDAT AND ADD NEW CODE, 09-JAN-79

2)	NOTINB:	CAML	T1,THSRDB	;[321] PREVIOUS BLOCK?
2)		JRST	RSTMSD		;[321] NO - WE MISSED A BLOCK
2)		MOVEM	T1,THSRDB	;[321] YES - RESET FILE INDEX
2)		WARN$N	(PBR,Prior Block Repeated) ;[321] WARN USER
2)		MOVEI	T2,[ASCIZ/Rewriting from /] ;[321] MESSAGE
2)		TXNE	F,FL$CHK	;[321] CHECKING?
2)		MOVEI	T2,[ASCIZ/Rereading from /] ;[321] YES - OTHER M
	SG
2)		OUTSTR	@T2		;[321]
2)		PUSHJ	P,TYEFIL	;[321] TELL USER FILE AND BLOCK
2)		JRST	RSTUST		;[321] GO USE IT
2)	RSTMSD:	PUSH	P,T1		;[321] SAVE THIS RDB
2)		WARN$N	(BMT,Block Missed on Tape, expected) ;[321] WARN
2)		PUSHJ	P,TYEFIL	;[321] DISPLAY FILE AND BLOCK
2)		POP	P,THSRDB	;[321] UPDATE FILE INDEX
2)		WARN$N	(FLC,File continuing with) ;[321] SHOW WHAT'S HA
	PPENING
2)		PUSHJ	P,TYEFIL	;[321] DITTO
2)	RSTUST:	MOVE	T1,THSRDB	;[321] GET BLOCK NUMBER
 
 
2)		TXNN	F,FL$CHK	;[321] CHECKING?
2)		JRST	[USETO 	FILE,(T1)	;[321] NO - USETO DISK F
	ILE
2)			 JRST	XFR1		;[321] GO USE THE BLOCK
2)			]
2)		MOVSI	T2,400000	;[321] CHECKING - MUST RESET INP
	UT BUFFERS
2)		IORB	T2,DSKHDR	;[321] FLAG BUFFER RING AS EMPTY
2)		MOVEI	T3,NDSKBF	;[321] PREPARE TO INVALIDATE ALL
	 BUFFERS
2)	RSTUS1:	SOJL	T3,RSTUS2	;[321] ANY MORE BUFFERS?
2)		MOVE	T4,(T2)		;[321] YES - GET NEXT .BFHDR
2)		TXZ	T4,BF.IOU	;[321] CLEAR THE USE BIT
2)		MOVEM	T4,(T2)		;[321] PUT IT BACK
2)		MOVE	T2,T4		;[321] POINT TO NEXT BUFFER IN R
	ING
2)		JRST	RSTUS1		;[321] GO CHECK FOR MORE
2)	RSTUS2:	USETI	FILE,(T1)	;[321] RING INVALIDATED - USETI
	DISK FILE
2)		PUSHJ	P,@DSKIO	;[321] READ THE NEEDED DISK BLOC
	K
2)		  JRST	XFRERR		;[321] PROBLEM WITH DISK
2)		  JRST	DSKEO1		;[321] NO MORE DISK FILE
2)		JRST	XFR1		;[321] GO COMPARE
2)	DSKEOF:	SUBI	P1,200		;COUNT LAST DATA XFR
**************
1)89	USEREC:				;[257]
1)	IFN	FT$RCV,	<
1)		PUSHJ	P,RPTNXT	;[257] UNEXPECTED REPEATER RECOR
	D NEXT?

1)		 JRST	USERC1		;[257] NO--PROCEED
1)		WARN$N	(URR,Unexpected Repeater Record Found)	;[257]
1)		PUSHJ	P,[MOVE T1,G$TYPE(MH)	;[302] GET RECORD TYPE
1)			   CAIE T1,T$FIL	;[302] IS IT FILE DATA?
1)			   PJRST NONFIL		;[302] NO
1)			   PJRST MASTR1]		;[302] YES, REPO
	RT FILE NAME
1)		JRST	DOINPT		;[257] IGNORE IT
1)	>; END IFN FT$RCV
1)	USERC1:	TRNE	P1,IO.DER!IO.DTE!IO.BKT;[257] IF WORD ERRORS,
****
2)89	;**; [321] DELETE CODE AT USEREC, 09-JAN-79
2)	USEREC:				;[257]
2)	USERC1:	TRNE	P1,IO.DER!IO.DTE!IO.BKT;[257] IF WORD ERRORS,
**************
1)94	;RECORD IS NEXT. ^THE <FL$INP FLAG IS SET IF INPUT WAS FORCED IN
1)	;ORDER TO LOOK AHEAD.
****
2)94	;RECORD WITH THE PROPER <RDW IS NEXT.
2)	;^THE <FL$INP FLAG IS SET IF INPUT WAS FORCED IN
2)	;ORDER TO LOOK AHEAD.
**************
1)		INPUT	F.MTAP,		;[257] FORCE INPUT ON THIS BUFFE
	R
1)		TXO	F,FL$INP	;FLAG INPUT DONE
1)95	;HERE TO SEE IF NEXT TAPE RECORD IS A REPEATER RECORD
 
 
1)	;ALSO REJECT RECORD IF BAD BUFFER SIZE OR NOT BACKUP FORMAT
1)	TSTRPT:	MOVE	P1,S.MBPT	;[257] BUFFER ADDRESS
****
2)94	;**; [321] CHANGE AT RPTNXT, 09-JAN-79
2)		TXON	F,FL$INP	;[321] FLAG INPUT DONE
2)		INPUT	F.MTAP,		;[321] AND INPUT IF NEEDED
2)95	;HERE TO SEE IF NEXT TAPE RECORD IS A REPEATER RECORD
2)	;ALSO REJECT RECORD IF BAD BUFFER SIZE OR NOT BACKUP FORMAT
2)	;OR NOT THE EXPECTED RELATIVE DATA WORD.
2)	TSTRPT:	MOVE	P1,S.MBPT	;[257] BUFFER ADDRESS
**************
1)95		TDNE	T1,G$FLAG(P1)	;SEE IF ON
1)		AOS	(P)		;YES--ADVANCE RETURN
1)		POPJ	P,		;RETURN
1)	>;END IFN FT$RCV
****
2)95	;**; [321] CHANGE IN TSTRPT, 9-JAN-79
2)		TDNN	T1,G$FLAG(P1)	;[321] SEE IF ON
2)		POPJ	P,		;RETURN
2)		MOVE	T1,F$RDW(P1)	;[321] GET REPEATER'S RDW
2)		CAMN	T1,F$RDW(MH)	;[321] MATCHES THE OTHER BUFFER?
2)		AOS	(P)		;[321] YES - ADVANCE RETURN
2)		POPJ	P,		;[321] RETURN

2)	>;END IFN FT$RCV
**************