void gtmsource_seqno_init(void) { /* Find the start_jnl_seqno */ gd_region *reg, *region_top; seq_num local_read_jsn, local_jsn; sgmnt_addrs *csa; sgmnt_data_ptr_t csd; sm_uc_ptr_t gld_fn; /* Unix and VMS have different field names for now, but will both be soon changed to instname instead of gtmgbldir */ gld_fn = (sm_uc_ptr_t)jnlpool.jnlpool_ctl->jnlpool_id.gtmgbldir; QWASSIGN(jnlpool.jnlpool_ctl->start_jnl_seqno, seq_num_zero); QWASSIGN(local_read_jsn, seq_num_zero); QWASSIGN(local_jsn, seq_num_zero); region_top = gd_header->regions + gd_header->n_regions; for (reg = gd_header->regions; reg < region_top; reg++) { assert(reg->open); csa = &FILE_INFO(reg)->s_addrs; csd = csa->hdr; if (REPL_ALLOWED(csd)) { if (QWLT(local_read_jsn, csd->resync_seqno)) QWASSIGN(local_read_jsn, csd->resync_seqno); if (QWLT(local_jsn, csd->reg_seqno)) QWASSIGN(local_jsn, csd->reg_seqno); /* Copy gtmgbldir into the database shared memory. * Used later to avoid updates from a different gtmgbldir to this database. */ assert(SIZEOF(csa->nl->replinstfilename) == SIZEOF(jnlpool.jnlpool_ctl->jnlpool_id.gtmgbldir)); memcpy(csa->nl->replinstfilename, gld_fn, SIZEOF(csa->nl->replinstfilename)); } } if (QWEQ(local_jsn, seq_num_zero)) { /* No replicated region, or databases created with older version of GTM */ gtm_putmsg(VARLSTCNT(5) ERR_NOREPLCTDREG, 3, LEN_AND_LIT("global directory"), gld_fn); /* Error, has to shutdown all regions 'cos mupip needs exclusive access to turn replication on */ gtmsource_autoshutdown(); } QWASSIGN(jnlpool.jnlpool_ctl->start_jnl_seqno, local_jsn); QWASSIGN(jnlpool.jnlpool_ctl->jnl_seqno, local_jsn); QWASSIGN(jnlpool.gtmsource_local->read_jnl_seqno, local_read_jsn); }
uchar_ptr_t i2ascl(uchar_ptr_t p, qw_num n) { unsigned char ar[MAX_DIGITS_IN_INT8], *q; uint4 len; long r; q = ar + sizeof(ar); if (QWEQ(n, seq_num_zero)) *--q = '0'; else { while (QWNE(n, seq_num_zero)) { QWDIVIDEBYDW(n, 10, n, r); *--q = r + '0'; } } assert((uintszofptr_t)q >= (uintszofptr_t)ar); len = (uint4)(ar + sizeof(ar) - q); memcpy(p, q, len); return (unsigned char *)(p + len) ; }