/****************************************************************************
  module      : vkb37
  author      : JuergenA
  responsible : UweH
  special area: KB_diagnose_outcopy
  see also    :
  description :
*****************************************************************************/
 
.tt 1 $SAP$LiveCache$VKB37$
.tt 3 $UweH$KB_diagnose_outcopy$1999-07-20$
 
.nf
 
 
    ========== licence begin  GPL
    Copyright (C) 2000 SAP AG
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    ========== licence end
 
.fo
***********************************************************
 
Module  : KB_diagnose_outcopy
 
Define  :
 
        PROCEDURE
              k37diagnose_outcopy (VAR t : tgg00_TransContext;
                    ptr             : tkb00_PagePtr;
                    VAR databuf     : tsp00_MoveObj;
                    databuf_size    : tsp00_Int4;
                    VAR databuf_len : tsp00_Int4;
                    devno           : tsp00_Int2;
                    devtype         : tsp2_dev_type;
                    diag_type       : tgg00_DiagType;
                    VAR pno         : tsp00_PageNo;
                    stop_pno        : tsp00_PageNo;
                    VAR page_count  : tsp00_Int4);
 
        PROCEDURE
              k37dump (VAR m : tgg00_MessBlock);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              filesysteminterface_8 : VBD08;
 
        PROCEDURE
              b08bytestr_diagnose (VAR t : tgg00_TransContext;
                    VAR b : tsp00_Page);
 
        PROCEDURE
              b08tree_diagnose (VAR t : tgg00_TransContext;
                    VAR b : tsp00_Page);
              (* PTS 1111574 E.Z. *)
 
        FUNCTION
              b08was_last_page : boolean;
 
      ------------------------------ 
 
        FROM
              Trace : VBD120;
 
        PROCEDURE
              b120WriteUserForcedDump(
                    TaskId           : tsp00_TaskId;
                    VAR FileName     : tsp00_VFilename;
                    VAR DumpStateSet : tgg00_DumpStateSet );
 
      ------------------------------ 
 
        FROM
              BD_Wrapper : VBD999;
 
        PROCEDURE
              bd999ReadDataPageDirect(
                    TaskId      : tsp00_TaskId;
                    DevNo       : tsp00_Int2;
                    BlockNo     : tsp00_Int4;
                    VAR pPage   : tkb00_PagePtr;
                    VAR TrError : tgg00_BasisError);
 
        PROCEDURE
              bd999ReadLogPageDirect(
                    TaskId      : tsp00_TaskId;
                    DevNo       : tsp00_Int2;
                    BlockNo     : tsp00_Int4;
                    VAR pPage   : tkb00_PagePtr;
                    VAR TrError : tgg00_BasisError);
 
      ------------------------------ 
 
        FROM
              Configuration_Parameter : VGG01;
 
        FUNCTION
              g01region_cnt (region_type : tgg_region_type) : tsp_int4;
 
      ------------------------------ 
 
        FROM
              Regions_and_Longwaits : VGG08;
 
        VAR
              g08data1     : tsp00_RegionId;
              g08savepoint : tsp00_RegionId;
              g08save0     : tsp00_RegionId;
              g08server    : tsp00_RegionId;
              g08split1    : tsp00_RegionId;
              g08surrogate : tsp00_RegionId;
              g08tree1     : tsp00_RegionId;
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG10;
 
        PROCEDURE
              g10mv (mod_id    : tsp_c6;          mod_num    : tsp_int4;
                    source_upb : tsp_int4;        destin_upb : tsp_int4;
                    VAR source : tsp00_Page;      source_pos : tsp_int4;
                    VAR destin : tsp_moveobj;     destin_pos : tsp_int4;
                    length     : tsp_int4;
                    VAR err    : tgg_basis_error);
 
      ------------------------------ 
 
        FROM
              RTE_kernel : VEN101;
 
        PROCEDURE
              vbegexcl (pid : tsp_process_id;
                    region  : tsp_region_id);
 
        PROCEDURE
              vendexcl (pid : tsp_process_id;
                    region  : tsp_region_id);
&       ifdef TRACE
 
      ------------------------------ 
 
        FROM
              Test_Procedures : VTA01;
 
        PROCEDURE
              t01int4 (layer : tgg00_Debug;
                    nam  : tsp00_Sname;
                    int  : tsp00_Int4);
&       endif
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              b01rread_restartpage;
 
              tsp00_PageAddr tkb00_PagePtr
 
        PROCEDURE
              g10mv;
 
              tsp_moveobj tsp00_Page
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : JuergenA
.sp
.cp 3
Created : 1983-06-06
.sp
.cp 3
Version : 2002-08-01
.sp
.cp 3
Release :      Date : 1999-07-20
.sp
***********************************************************
.sp
.cp 9
.fo
.oc _/1
Specification:
 
Procedure K37LOG_DIAGNOSE
.sp
A log page is copied from the database.
.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
(*------------------------------*) 
 
PROCEDURE
      k37diagnose_outcopy (VAR t : tgg00_TransContext;
            ptr             : tkb00_PagePtr;
            VAR databuf     : tsp00_MoveObj;
            databuf_size    : tsp00_Int4;
            VAR databuf_len : tsp00_Int4;
            devno           : tsp00_Int2;
            devtype         : tsp2_dev_type;
            diag_type       : tgg00_DiagType;
            VAR pno         : tsp00_PageNo;
            stop_pno        : tsp00_PageNo;
            VAR page_count  : tsp00_Int4);
 
VAR
      copy_page : boolean;
      pageaddr  : tsp00_PageAddr;
 
BEGIN
t.trError_gg00 := e_ok;
databuf_len    := 0;
WHILE (t.trError_gg00 = e_ok)
      AND
      (NOT ((diag_type = diagPages_egg00) AND (page_count = 1)))
      AND
      (NOT ((diag_type = diagConvPage_egg00) AND (page_count = 1)))
      AND
      (databuf_len + sizeof (ptr^.pageBuf_kb00) <= databuf_size) DO
    BEGIN
    copy_page := false;
    pageaddr  := @databuf [databuf_len+1];
    CASE diag_type OF
        diagDev_egg00:
            BEGIN
            IF  (pno <= stop_pno) AND (pno <> NIL_PAGE_NO_GG00)
            THEN
                BEGIN
                CASE devtype OF
                    sp2dt_data:
                        bd999ReadDataPageDirect( t.trTaskId_gg00, devno, pno, ptr, t.trError_gg00 );
                    sp2dt_log:
                        bd999ReadLogPageDirect( t.trTaskId_gg00, devno, pno, ptr, t.trError_gg00 );
                    OTHERWISE:
                        t.trError_gg00 := e_disk_not_accessible;
                    END;
                (*ENDCASE*) 
                pno := pno + 1;
                END
            ELSE
                t.trError_gg00 := e_no_next_record;
            (*ENDIF*) 
            copy_page := (t.trError_gg00 = e_ok)
            END;
        diagLogFrom_egg00, diagLogLast_egg00:
            t.trError_gg00 := e_not_implemented;
        diagFile_egg00,
        diagInvId_egg00,
        diagInvName_egg00,
        diagMultInvId_egg00,
        diagMultInvName_egg00,
        diagTabId_egg00,
        diagTabName_egg00,
        diagInvTree_egg00:
            BEGIN
            b08tree_diagnose (t, pageaddr^);
            IF  t.trError_gg00 = e_ok
            THEN
                BEGIN
                databuf_len := databuf_len + sizeof (pageaddr^);
                page_count  := page_count  + 1
                END
            (*ENDIF*) 
            END;
        diagColId_egg00, diagColRoot_egg00:
            BEGIN
            b08bytestr_diagnose (t, pageaddr^);
            IF  t.trError_gg00 = e_ok
            THEN
                BEGIN
                databuf_len := databuf_len + sizeof (pageaddr^);
                page_count  := page_count  + 1
                END
            (*ENDIF*) 
            END;
        diagRestart_egg00:
            IF  page_count = 0
            THEN
                BEGIN
                t.trError_gg00 := e_not_implemented;
&               ifdef NOTUSED
                b01rread_restartpage (t, ptr);
                copy_page := (t.trError_gg00 = e_ok)
&                     endif
                END
            ELSE
                t.trError_gg00 := e_no_next_record
            (*ENDIF*) 
        OTHERWISE
            t.trError_gg00 := e_not_implemented
        END;
    (*ENDCASE*) 
    IF  (t.trError_gg00 = e_ok) AND copy_page
    THEN
        BEGIN
        g10mv ('VKB37 ',   1,    
              sizeof (ptr^.pageBuf_kb00), databuf_size,
              ptr^.pageBuf_kb00, 1,
              databuf, databuf_len+1, sizeof (ptr^.pageBuf_kb00),t.trError_gg00);
        databuf_len := databuf_len + sizeof (ptr^.pageBuf_kb00);
        page_count  := page_count  + 1;
        (* PTS 1111574 E.Z. *)
        IF  (diag_type = diagDev_egg00) AND
            (databuf_len + sizeof (ptr^.pageBuf_kb00) > databuf_size)
        THEN
            IF  b08was_last_page
            THEN
                t.trError_gg00 := e_no_next_record
            (*ENDIF*) 
        (*ENDIF*) 
        END
    (*ENDIF*) 
    END
(*ENDWHILE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      k37dump (VAR m : tgg00_MessBlock);
 
VAR
      partition : integer;
 
CONST
      c_region_normal   = 1;
      c_region_autosave = 2;
 
BEGIN
m.mb_trns^.trError_gg00 := e_ok;
vbegexcl (m.mb_trns^.trTaskId_gg00, g08save0 + c_region_normal);
vbegexcl (m.mb_trns^.trTaskId_gg00, g08save0 + c_region_autosave);
vbegexcl (m.mb_trns^.trTaskId_gg00, g08savepoint      );
vbegexcl (m.mb_trns^.trTaskId_gg00, g08surrogate);
FOR partition := 0 TO (g01region_cnt (rgnTree_egg00) - 1) DO
    vbegexcl (m.mb_trns^.trTaskId_gg00, g08split1 + partition);
(*ENDFOR*) 
FOR partition := 0 TO (g01region_cnt (rgnTree_egg00) - 1) DO
    vbegexcl (m.mb_trns^.trTaskId_gg00, g08tree1 + partition);
(*ENDFOR*) 
FOR partition := 0 TO (g01region_cnt (rgnData_egg00) - 1) DO
    vbegexcl (m.mb_trns^.trTaskId_gg00, g08data1 + partition);
(*ENDFOR*) 
vbegexcl (m.mb_trns^.trTaskId_gg00, g08server);
(* *)
b120WriteUserForcedDump (m.mb_trns^.trTaskId_gg00,
      m.mb_qual^.mut_hostfn, m.mb_qual^.mut_dump_state );
(* *)
vendexcl (m.mb_trns^.trTaskId_gg00, g08server);
FOR partition := (g01region_cnt (rgnData_egg00) - 1) DOWNTO 0 DO
    vendexcl (m.mb_trns^.trTaskId_gg00, g08data1 + partition);
(*ENDFOR*) 
FOR partition := (g01region_cnt (rgnTree_egg00) - 1) DOWNTO 0 DO
    vendexcl (m.mb_trns^.trTaskId_gg00, g08tree1 + partition);
(*ENDFOR*) 
FOR partition := (g01region_cnt (rgnTree_egg00) - 1) DOWNTO 0 DO
    vendexcl (m.mb_trns^.trTaskId_gg00, g08split1 + partition);
(*ENDFOR*) 
vendexcl (m.mb_trns^.trTaskId_gg00, g08surrogate);
vendexcl (m.mb_trns^.trTaskId_gg00, g08savepoint      );
vendexcl (m.mb_trns^.trTaskId_gg00, g08save0 + c_region_autosave);
vendexcl (m.mb_trns^.trTaskId_gg00, g08save0 + c_region_normal);
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
*-PRETTY-*  statements    :         62
*-PRETTY-*  lines of code :        175        PRETTYX 3.10 
*-PRETTY-*  lines in file :        417         1997-12-10 
.PA 
