fis-gtm/sr_port/op_ztstart.c

53 lines
1.8 KiB
C

/****************************************************************
* *
* Copyright 2001, 2010 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include "gdsroot.h"
#include "gtm_facility.h"
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
#include "filestruct.h"
#include "jnl.h"
#include "op.h"
#define JNL_FENCE_MAX_LEVELS 255
error_def(ERR_TPMIXUP);
error_def(ERR_TRANSNEST);
GBLREF jnl_fence_control jnl_fence_ctl;
GBLREF uint4 dollar_tlevel;
GBLREF seq_num seq_num_zero;
GBLREF trans_num local_tn; /* transaction number for THIS PROCESS */
GBLREF jnl_gbls_t jgbl;
void op_ztstart(void)
{
if (dollar_tlevel)
rts_error(VARLSTCNT(4) ERR_TPMIXUP, 2, "A fenced logical", "an M");
if (jnl_fence_ctl.level >= JNL_FENCE_MAX_LEVELS)
rts_error(VARLSTCNT(1) ERR_TRANSNEST);
if (jnl_fence_ctl.level == 0)
{
jnl_fence_ctl.token = 0;
jnl_fence_ctl.fence_list = JNL_FENCE_LIST_END;
++local_tn; /* Begin new local transaction */
/* In journal recovery forward phase, we set jgbl.tp_ztp_jnl_upd_num to whatever update_num the journal record
* has so it is ok for the global variable to be a non-zero value at the start of a ZTP transaction (possible if
* ZTP of one process is in progress when ZTP of another process starts in the journal file). But otherwise
* (in GT.M runtime) we expect it to be 0 at beginning of each TP or ZTP.
*/
assert((0 == jgbl.tp_ztp_jnl_upd_num) || jgbl.forw_phase_recovery);
}
++jnl_fence_ctl.level;
}